Ping mit Zeitstempel

79

An der Windows-Eingabeaufforderung verwende cmdichping -t to 10.21.11.81

Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238
Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238
Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238

Gibt es Möglichkeiten, eine solche Ausgabe zu erhalten?

10:13:29.421875 Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238
10:13:29.468750 Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238
10:13:29.468751 Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238

Bitte beachten Sie, dass ich dies nur mit Befehlen erreichen möchte, die von CMD bereitgestellt werden

SuicideSheep
quelle
Eine allgemeinere Version: stackoverflow.com/questions/21564/…
Anton Tarasenko

Antworten:

93
@echo off
    ping -t localhost|find /v ""|cmd /q /v:on /c "for /l %%a in (0) do (set "data="&set /p "data="&if defined data echo(!time! !data!)" 

Hinweis : Code, der in einer Batchdatei verwendet werden soll. Zur Verwendung über die Befehlszeile ersetzen %%adurch%a

Starten Sie den Ping, erzwingen Sie eine korrekte zeilengepufferte Ausgabe ( find /v) und starten Sie einen cmdProzess mit aktivierter verzögerter Erweiterung, der eine Endlosschleife durchführt, in der die weitergeleiteten Daten gelesen werden, die an die Konsole mit dem Präfix der aktuellen Zeit zurückgesendet werden.

08.01.2015 bearbeitet : In schnelleren / neueren Maschinen / Betriebssystemversionen gibt es im vorherigen Code ein Synchronisationsproblem, bei dem das set /pLesen einer Zeile erfolgt, während der pingBefehl sie noch schreibt, und das Ergebnis sind Zeilenausschnitte.

@echo off
    ping -t localhost|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul"

Zu pauseBeginn der Unterschale sind zwei zusätzliche Befehle enthalten (nur einer kann verwendet werden, aber wenn pauseein Eingabezeichen verbraucht wird, wird ein CRLF-Paar unterbrochen und eine Zeile mit einem LF wird gelesen), um auf Eingabedaten zu warten, und a ping -n 2 localhostist enthalten Warten Sie eine Sekunde für jeden Lesevorgang in der inneren Schleife. Das Ergebnis ist ein stabileres Verhalten und eine geringere CPU-Auslastung.

HINWEIS: Das Innere pingkann durch ein ersetzt werden pause, aber dann wird das erste Zeichen jeder gelesenen Zeile vom pauseund verbraucht und nicht vomset /p

MC ND
quelle
6
@ Mr.SuicideSheep, dies ist eine Batch-Datei. Wenn Sie es über die Befehlszeile testen möchten, ersetzen Sie alle doppelten Prozentzeichen (die in Batchdateien maskiert werden müssen) durch einzelne Prozentzeichen.
MC ND
5
Wenn ich versuche, dies zu verwenden, bekomme ich Zeilenumbrüche in der Ausgabe. Sie erscheinen routinemäßig nach dem 52. Zeichen in der Ausgabe. Irgendwelche Gedanken darüber warum?
Ryan
2
@AlexG, wenn Sie das Datum benötigen (die ursprüngliche Frage hat es nicht in die gewünschte Ausgabe aufgenommen), ändern Sie den echoBefehl inecho(!date! !time! !data!
MC ND
4
Keine Antwort auf Ping, also habe ich + C gesteuert und der Computer wurde langsam, erstarrte dann der blaue Bildschirm
Dan
2
@ Dan, der einzige Weg, wie ich mir vorstellen kann, dass ein BSOD diesen Code ausführt (HW- oder Treiberprobleme verwerfen), ist eine Gabelbombe. Haben Sie Ihre Batch-Datei angerufen ping.batoder ping.cmd?
MC ND
88

WindowsPowershell:

Option 1

ping.exe -t COMPUTERNAME|Foreach{"{0} - {1}" -f (Get-Date),$_}

Option 2

Test-Connection -Count 9999 -ComputerName COMPUTERNAME | Format-Table @{Name='TimeStamp';Expression={Get-Date}},Address,ProtocolAddress,ResponseTime
Hames
quelle
4
Funktionierte wunderbar ohne die Endlosschleifen- / Max-CPU-Probleme der anderen Vorschläge.
Serinus
Testverbindung - Anzahl 9999 - Computername google.com | Format-Tabelle @ {Name = 'TimeStamp'; Ausdruck = {Get-Date}}, Adresse, Protokolladresse, Antwortzeit | Tee-Datei C: \ Benutzer \ Ihr Name \ Desktop \ pingtest.txt -append
Serinus
einfache und knackige Lösung. erste Option funktionierte für mich
Sree Harsha
Wenn Sie Option 2 direkt in eine PowerShell-Eingabeaufforderung einfügen möchten, können Sie das Bit -ComputerName weglassen. Daraufhin werden Sie zur Liste der Computernamen aufgefordert (lassen Sie einfach die zweite leer). Test-Connection -Count 9999 | Format-Table @{Name='TimeStamp';Expression={Get-Date}},Address,ProtocolAddress,ResponseTime
mwfearnley
1
Wenn Sie die obigen Optionen erweitern, wird > C:\temp\ping.txtdie Ausgabe in eine Datei umgeleitet. Wenn Sie auch die Live-Ausgabe sehen möchten, führen Sie sie einfach Get-Content C:\temp\ping.txt -tail 10 -waitin einer anderen PowerShell aus.
Flandersen
64

Sie können dies in Bash tun (z. B. Linux oder WSL):

ping 10.0.0.1 | while read line; do echo `date` - $line; done

Obwohl es nicht die Statistiken gibt, die Sie normalerweise erhalten, wenn Sie am Ende ^ C drücken.

Sam Critchley
quelle
4
Dies ist bisher am besten
Satish
2
Funktioniert perfekt !!
Shoaib Khan
4
Dies funktioniert NICHT unter Windows, wie in der Frage gestellt wurde.
Janos
3
Dies funktioniert unter Windows unter Windows Subsystem for Linux (WSL), eine optionale Funktion, einwandfrei.
Lee
1
Ich hatte versucht, Ping-Ergebnisse zu protokollieren. date +%sist hilfreicher, da es ganzzahlige Zeitstempel anzeigt.
Himanshu Shekhar
28

Batch-Skript:

@echo off

set /p host=host Address: 
set logfile=Log_%host%.log

echo Target Host = %host% >%logfile%
for /f "tokens=*" %%A in ('ping %host% -n 1 ') do (echo %%A>>%logfile% && GOTO Ping)
:Ping
for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ') do (
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
    timeout 1 >NUL 
    GOTO Ping)

Dieses Skript fragt nach dem zu pingenden Host. Die Ping-Ausgabe wird auf dem Bildschirm und in der Protokolldatei ausgegeben. Beispiel für die Ausgabe einer Protokolldatei:

Target Host = www.nu.nl
Pinging nu-nl.gslb.sanomaservices.nl [62.69.166.210] with 32 bytes of data: 
24-Aug-2015 13:17:42 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250
24-Aug-2015 13:17:43 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250
24-Aug-2015 13:17:44 Reply from 62.69.166.210: bytes=32 time=1ms TTL=250

Die Protokolldatei heißt LOG_ [Hostname] .log und wird in denselben Ordner wie das Skript geschrieben.

sabo-fx
quelle
sagt immer wieder, dass der Schlaf nicht erkannt wird, aber das Skript funktioniert einwandfrei. Wie kann ich verhindern, dass das Ergebnis weiterhin im cmd-Fenster angezeigt wird, und nur die Protokolldatei aufrufen?
Allwynmasc
Sie sollten sleep.zip in denselben Ordner herunterladen und extrahieren, in dem Sie die Batchdatei ausführen. Der Befehl sleep zwingt das Skript, nach jedem Ping 1 Sekunde zu warten. Ohne sie gibt es keine Pause zwischen "Pings" und Ihre Protokolldatei wächst sehr schnell. Um zu verhindern, dass Ergebnisse im cmd-Fenster angezeigt werden, können Sie die letzte Zeile aus dem Skript entfernen , die mit dem Wort "echo"
sabo-fx
@ sabo-fx manchmal 'sleep 1> NUL' funktioniert nicht (nicht erkannter Befehl), ich habe 'timeout 1> NUL' verwendet
Asprelis
@ Sprisis: Das ist großartig. Danke für den Tipp. Mir war die Existenz des Befehls "Zeitüberschreitung" nicht bekannt. Ich bin damit einverstanden, dass es viel schöner ist, Befehle zu verwenden, die im Betriebssystem enthalten sind.
Sabo-FX
Ich habe das Skript getestet. Funktioniert einwandfrei, aber Sie müssen ein Leerzeichen in der 3. Zeile nach dem Setzen und vor / p hinzufügen.
Mikia
10

Dies könnte jemandem helfen: [Muss in Windows PowerShell ausgeführt werden]

ping.exe -t 10.227.23.241 |Foreach{"{0} - {1}" -f (Get-Date),$_} >> Ping_IP.txt

- Suchen Sie im aktuellen Verzeichnis oder im Benutzer-Home-Pfad nach der Datei Ping_IP.txt.

Mit dem obigen Befehl können Sie in einer Datei wie der folgenden ausgeben.

9/14/2018 8:58:48 AM - Pinging 10.227.23.241 with 32 bytes of data:
9/14/2018 8:58:48 AM - Reply from 10.227.23.241: bytes=32 time=29ms TTL=117
9/14/2018 8:58:49 AM - Reply from 10.227.23.241: bytes=32 time=29ms TTL=117
9/14/2018 8:58:50 AM - Reply from 10.227.23.241: bytes=32 time=28ms TTL=117
9/14/2018 8:58:51 AM - Reply from 10.227.23.241: bytes=32 time=27ms TTL=117
9/14/2018 8:58:52 AM - Reply from 10.227.23.241: bytes=32 time=28ms TTL=117
9/14/2018 8:58:53 AM - Reply from 10.227.23.241: bytes=32 time=27ms TTL=117
9/14/2018 8:58:54 AM - Reply from 10.227.23.241: bytes=32 time=28ms TTL=117
khalidmehmoodawan
quelle
3
Diese Lösung ist identisch mit der in einer früheren Antwort auf diese Frage angegebenen .
Skomisa
@skomisa: Es ist etwas anders, da es auch in einer Datei gespeichert wird, die später verwendet werden kann.
Khalidmehmoodawan
5

Unter Windows

Sie können eine der anderen Antworten verwenden.

Unter Unix / Linux

while :;do ping -n -w1 -W1 -c1 10.21.11.81| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done

Oder als Funktion pingtfür Ihr ~ / .bashrc:

pingt() {
  while :;do ping -n -w1 -W1 -c1 $1| grep -E "rtt|100%"| sed -e "s/^/`date` /g"; sleep 1; done
}

Quelle: https://stackoverflow.com/a/26666549/1069083

rubo77
quelle
1
Auf dem Mac -wist eine ungültige Option zu ping.
Jorisw
3

Ich denke, mein Code ist das, was jeder braucht:

ping -w 5000 -t -l 4000 -4 localhost|cmd /q /v /c "(pause&pause)>nul &for /l %a in () do (for /f "delims=*" %a in ('powershell get-date -format "{ddd dd-MMM-yyyy HH:mm:ss}"') do (set datax=%a) && set /p "data=" && echo([!datax!] - !data!)&ping -n 2 localhost>nul"

anzuzeigen:

[Fri 09-Feb-2018 11:55:03] - Pinging localhost [127.0.0.1] with 4000 bytes of data:
[Fri 09-Feb-2018 11:55:05] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:08] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:11] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128
[Fri 09-Feb-2018 11:55:13] - Reply from 127.0.0.1: bytes=4000 time<1ms TTL=128

Hinweis : Code, der in einer Befehlszeile verwendet werden soll, und auf OS muss Powershell vorinstalliert sein.

Eldar Wert
quelle
danke ... kann ich das Ergebnis in eine Textdatei exportieren?
Salem Ahmed
3

Dies könnte in die Rechnung für spätere Windows-Versionen passen:

for /l %i in (1,0,2) do @echo|cmd /v:on /c set /p=!time! & ping -n 1 10.21.11.81 | findstr "Reply timed" && timeout /t 2 > nul:
mlarss
quelle
genau das suche ich! danke ... funktioniert perfekt. Ich bekomme die Zeit und dann die Ausgabe, die ich von einem Ping Zeile für Zeile erwarten würde
Keith E. Truesdell
2

Versuche dies:

Erstellen Sie eine Batchdatei mit den folgenden Angaben:

echo off

cd\

:start

echo %time% >> c:\somedirectory\pinghostname.txt

ping pinghostname >> c:\somedirectory\pinghostname.txt

goto start

Sie können dem Ping-Befehl je nach Ihren Anforderungen eigene Optionen hinzufügen. Dadurch wird der Zeitstempel nicht in dieselbe Zeile wie der Ping gesetzt, aber Sie erhalten trotzdem die Informationen, die Sie benötigen.

Ein noch besserer Weg ist die Verwendung von fping. Klicken Sie hier http://www.kwakkelflap.com/fping.html , um es herunterzuladen.

jjrab
quelle
404 auf diesem Link jetzt
Hicsy
1

Verwenden

ping -D 8.8.8.8

Von der Manpage

-D     Print timestamp (unix time + microseconds as in gettimeofday) before each line

Ausgabe

[1593014142.306704] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=120 time=13.7 ms
[1593014143.307690] 64 bytes from 8.8.8.8: icmp_seq=3 ttl=120 time=13.8 ms
[1593014144.310229] 64 bytes from 8.8.8.8: icmp_seq=4 ttl=120 time=14.3 ms
[1593014145.311144] 64 bytes from 8.8.8.8: icmp_seq=5 ttl=120 time=14.2 ms
[1593014146.312641] 64 bytes from 8.8.8.8: icmp_seq=6 ttl=120 time=14.8 ms
Nerrve
quelle
Funktioniert nicht für Windows Standard-Cmd oder MacOS.
Juliën
0

Versuchen Sie dies insted:

ping -c2 -s16 sntdn | awk '{print NR "|" strftime ("% Y-% m-% d_% H:% M:% S") "|" $ 0}' A VER QUE TE PARECE, OJALA Y TE SIRVA

JuanZR
quelle
1
Perdona, Koloquium "un alias de servidor" coloca la direcciónIP und lugar de la cadena "sntdn", saludos
JuanZR
0

Eine andere Powershell-Methode (ich wollte nur Fehler)

$ping = new-object System.Net.NetworkInformation.Ping
$target="192.168.0.1"
Write-Host "$(Get-Date -format 's') Start ping to $target"
while($true){
    $reply = $ping.send($target)
    if ($reply.status -eq "Success"){
        # ignore success    
        Start-Sleep -Seconds 1
    }
    else{
        Write-Host "$(Get-Date -format 's') Destination unreachable" $target

    }
}
Chris Richardson
quelle
0

Ich benötige dies auch, um das Netzwerkproblem auf mein Problem mit dem Zeitlimit für die Datenbankspiegelung zu überwachen. Ich benutze den Befehlscode wie folgt:

ping -t Google.com|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 Google.com>nul" >C:\pingtest.txt

Sie müssen nur Google.com an Ihren Servernamen ändern. Es funktioniert perfekt für mich. und denken Sie daran, dies zu beenden, wenn Sie fertig sind. Die Datei pingtest.txt wird um ca. 4,5 KB pro Minute erhöht.

Vielen Dank für raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/

DBALUKE HUANG
quelle
0

Eine Verbesserung der Antwort von MC ND für Windows.
Ich brauchte ein Skript, um in WinPE ausgeführt zu werden, also habe ich Folgendes getan:

@echo off
SET TARGET=192.168.1.1
IF "%~1" NEQ "" SET TARGET=%~1

ping -t %TARGET%|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost >nul"

Dies kann auf eine bestimmte IP-Adresse ( 192.168.1.1in meinem Beispiel) fest codiert werden oder einen übergebenen Parameter annehmen. Und wie in der Antwort von MC ND wird der Ping etwa alle 1 Sekunde wiederholt.

Mike Schlueter
quelle
0

Einfach 😎:

@echo off

set hostName=www.stackoverflow.com
set logfile=C:\Users\Dell\Desktop\PING_LOG\NetworkLog\Log_%hostName%.text
echo Network Loging Running %hostName%...
echo Ping Log %hostName% >>%logfile%

:Ping
for /f "tokens=* skip=2" %%A in ('ping %hostName% -n 1 ') do (
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
    timeout 1 >NUL
    GOTO Ping)
Thrainder
quelle
0

Anstatt das zusätzliche ping -n 2 localhostam Ende der Schleife zu haben, können Sie einfach das Zeichen R vorher hinzufügen, !data!da die einzigen Möglichkeiten Antworten oder Anfordern sind. Das erste Zeichen wird aus dem verbraucht pause>nul. Also anstatt den folgenden Ausdruck zu haben:

ping localhost -t -l 4|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p data=&echo(!date! !time! !data!)&ping -n 2 localhost>nul"

Sie können diesen Ausdruck verwenden:

ping localhost -t -l 4|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p data=&echo(!date! !time! R!data!)&pause>nul"

Welches erzeugt die gleiche Ausgabe zB:

22:34:49.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116
22:34:50.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116
22:34:55.47 Request timed out.
22:34:56.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116
22:34:57.49 Reply from 172.217.4.46: bytes=4 time=14ms TTL=116
Vorpal56
quelle