it-swarm.com.de

Wie kann ich jedes Ping-Ergebnis mit einem Zeitstempel versehen?

Ping gibt dies standardmäßig zurück:

64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms

Gibt es eine Möglichkeit, den Zeitstempel hinzuzufügen?

Zum Beispiel,

Mon 21 May 2012 15:15:37 EST | 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms

Ich bin auf OS X v10.7 (Lion), das scheinbar eine BSD - Version von Ping hat.

54
John Mee

Wenn Ihr AWK strftime() nicht hat:

ping Host | Perl -nle 'print scalar(localtime), " ", $_'

Um es in eine Datei umzuleiten, verwenden Sie die Standard-Shell-Umleitung und deaktivieren Sie die Ausgabepufferung:

ping Host | Perl -nle 'BEGIN {$|++} print scalar(localtime), " ", $_' > outputfile

Wenn Sie das ISO8601-Format für den Zeitstempel wünschen:

ping Host | Perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' > outputfile
77

Ich konnte die auf Perl basierende Lösung aus irgendeinem Grund nicht in eine Datei umleiten, daher habe ich weiter nach einer bash Möglichkeit gesucht, dies zu tun:

ping www.google.fr | while read pong; do echo "$(date): $pong"; done

Wed Jun 26 13:09:23 CEST 2013: PING www.google.fr (173.194.40.56) 56(84) bytes of data.
Wed Jun 26 13:09:23 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=1 ttl=57 time=7.26 ms
Wed Jun 26 13:09:24 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=2 ttl=57 time=8.14 ms

Das Guthaben geht an https://askubuntu.com/a/137246

87
richk

Von man ping:

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

Es wird so etwas produzieren:

[1337577886.346622] 64 bytes from 4.2.2.2: icmp_req=1 ttl=243 time=47.1 ms

Dann könnte der Zeitstempel aus der Antwort ping analysiert und mit date in das erforderliche Format konvertiert werden.

  1. terminalausgang:

    ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}'

  2. dateiausgabe: 

    ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' > test.txt

  3. terminal + Dateiausgabe: 

    ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' | tee test.txt

  4. hintergrund der Dateiausgabe: 

    Nohup ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' > test.txt &

13
xuanyuanaosheng

Meine ursprüngliche Einreichung war falsch, da das Datum nicht für jede Zeile ausgewertet wurde. Korrekturen wurden vorgenommen.

Versuche dies 

 ping google.com | xargs -L 1 -I '{}' date '+%+: {}'

erzeugt die folgende Ausgabe

Thu Aug 15 10:13:59 PDT 2013: PING google.com (74.125.239.103): 56 data bytes
Thu Aug 15 10:13:59 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=0 ttl=55 time=14.983 ms
Thu Aug 15 10:14:00 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=1 ttl=55 time=17.340 ms
Thu Aug 15 10:14:01 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=2 ttl=55 time=15.898 ms
Thu Aug 15 10:14:02 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=3 ttl=55 time=15.720 ms
Thu Aug 15 10:14:03 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=4 ttl=55 time=16.899 ms
Thu Aug 15 10:14:04 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=5 ttl=55 time=16.242 ms
Thu Aug 15 10:14:05 PDT 2013: 64 bytes from 74.125.239.103: icmp_seq=6 ttl=55 time=16.574 ms

Die Option -L 1 bewirkt, dass xargs jeweils eine Zeile anstelle von Wörtern verarbeitet.

8
Bromo

Unter OS X können Sie einfach die Option --Apple-Time verwenden:

ping -i 2 --Apple-time www.Apple.com

Produziert Ergebnisse wie:

10:09:55.691216 64 bytes from 72.246.225.209: icmp_seq=0 ttl=60 time=34.388 ms
10:09:57.687282 64 bytes from 72.246.225.209: icmp_seq=1 ttl=60 time=25.319 ms
10:09:59.729998 64 bytes from 72.246.225.209: icmp_seq=2 ttl=60 time=64.097 ms
5
Nicolas Grison

Versuche dies:

ping www.google.com | while read endlooop; do echo "$(date): $endlooop"; done

Es gibt etwas wie:

Wednesday 18 January  09:29:20 AEDT 2017: PING www.google.com (216.58.199.36) 56(84) bytes of data.
Wednesday 18 January  09:29:20 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=1 ttl=57 time=2.86 ms
Wednesday 18 January  09:29:21 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=2 ttl=57 time=2.64 ms
Wednesday 18 January  09:29:22 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=3 ttl=57 time=2.76 ms
Wednesday 18 January  09:29:23 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=4 ttl=57 time=1.87 ms
Wednesday 18 January  09:29:24 AEDT 2017: 64 bytes from syd09s12-in-f36.1e100.net (216.58.199.36): icmp_seq=5 ttl=57 time=2.45 ms
4
nutria

Pipe das Ergebnis an awk:

 ping Host | awk '{if($0 ~ /bytes from/){print strftime()"|"$0}else print}'
3

Auf Macos können Sie das tun 

ping --Apple-time 127.0.0.1

Die Ausgabe sieht so aus 

16:07:11.315419 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.064 ms
16:07:12.319933 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.157 ms
16:07:13.322766 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
16:07:14.324649 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.148 ms
16:07:15.328743 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.092 ms
3
Clintm
ping -D -n -O -i1 -W1 8.8.8.8

oder vielleicht

while true; do \
    ping -n -w1 -W1 -c1 8.8.8.8 \
    | grep -E "rtt|100%" \
    | sed -e "s/^/`date` /g"; \
    sleep 1; \
done
1
Thomas Szteliga

Ich brauche dies auch, um das Netzwerkproblem für das Zeitlimitproblem bei der 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 lediglich Google.com in Ihren Servernamen ändern. Es funktioniert perfekt für mich. und vergessen Sie nicht, dies zu beenden, wenn Sie fertig sind. Die Datei pingtest.txt erhöht sich um etwa 1 KB pro Sekunde (ungefähr).

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

1
DBALUKE HUANG

Sie haben keinen Zeitstempel oder Intervall für die Dauer einer solchen Ausgabe angegeben. Ich hielt es für eine endlose Schleife. Sie können es entsprechend Ihrem Bedarf entsprechend ändern.

while true
do
   echo -e "`date`|`ping -n -c 1 <IP_TO_PING>|grep 'bytes from'`"
   sleep 2
done
1
Venkat Madhav

Sie können eine Funktion in Ihrer ~/.bashrc-Datei erstellen, sodass Sie auf Ihrer Konsole einen Ping-Befehl ping-t erhalten:

function ping-t { ping "$1" | while read pong; do echo "$(date): $pong"; done; }

Jetzt können Sie dies auf der Konsole aufrufen:

ping-t example.com

Sa 31. Mär 12:58:31 CEST 2018: PING example.com (93.184.216.34) 56 (84) Datenbytes.
Sa 31. Mär 12:58:31 CEST 2018: 64 Bytes von 93.184.216.34 (93.184.216.34): icmp_seq = 1 ttl = 48 Zeit = 208 ms
Sa 31. Mär 12:58:32 CEST 2018: 64 Bytes von 93.184.216.34 (93.184.216.34): icmp_seq = 2 ttl = 48 Zeit = 233 ms

0
rubo77

Versuchen Sie diese Zeile.

while sleep 1;do echo "$(date +%d-%m-%y-%T) $(ping -c 1 whatever.com | gawk 'FNR==2{print "Response from:",$4,$8}')" | tee -a /yourfolder/pingtest.log;done

Sie müssen es mit ctrl-c tho abbrechen.

0
nDCasT