web-dev-qa-db-fra.com

Comment puis-je horodater chaque résultat de ping?

Ping retourne ceci par défaut:

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

Y a-t-il un moyen que je puisse l'obtenir pour ajouter l'horodatage?

Par exemple,

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

Je suis sous OS X v10.7 (Lion) qui semble avoir une version BSD de ping.

54
John Mee

Si votre AWK n'a pas strftime():

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

Pour le rediriger vers un fichier, utilisez la redirection Shell standard et désactivez la mise en tampon de sortie:

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

Si vous voulez le format ISO8601 pour l'horodatage:

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

Je ne pouvais pas rediriger la solution basée sur Perl vers un fichier pour une raison quelconque, alors j'ai continué à chercher et trouvé un seul moyen de faire bash:

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

Le crédit va à https://askubuntu.com/a/137246

88
richk

De man ping:

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

Cela produira quelque chose comme ceci:

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

Ensuite, l'horodatage pourrait être analysé à partir de la réponse ping et converti au format requis avec date.

  1. sortie du terminal:

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

  2. sortie du fichier: 

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

  3. sortie terminal + fichier: 

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

  4. fond de sortie du fichier: 

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

13
xuanyuanaosheng

Ma soumission originale était incorrecte car elle n’évaluait pas la date de chaque ligne. Des corrections ont été apportées.

Essaye ça 

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

produit la sortie suivante

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

L'option -L 1 permet à xargs de traiter une ligne à la fois au lieu de mots.

8
Bromo

Sous OS X, vous pouvez simplement utiliser l'option --Apple-time:

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

Produit des résultats tels que:

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

Essaye ça:

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

Il retourne quelque chose comme:

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

Transformez le résultat en awk:

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

Sur macos tu peux faire 

ping --Apple-time 127.0.0.1

La sortie ressemble à 

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

ou peut-être

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

J'ai également besoin de cela pour surveiller le problème de réseau lié au délai d'attente de la mise en miroir de base de données. J'utilise le code de commande comme ci-dessous:

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

Il vous suffit de modifier Google.com en fonction de votre nom de serveur. Cela fonctionne parfaitement pour moi. et rappelez-vous d'arrêter cela quand vous avez fini. Le fichier pingtest.txt augmentera de 1 Ko par seconde (environ).

Merci pour raymond.cc. https://www.raymond.cc/blog/timestamp-ping-with-hrping/

1
DBALUKE HUANG

Vous n'avez pas spécifié d'horodatage ni d'intervalle pendant combien de temps vous auriez besoin d'une telle sortie. J'ai donc considéré qu'il s'agissait d'une boucle infinie. Vous pouvez le changer en fonction de vos besoins.

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

Vous pouvez créer une fonction dans votre fichier ~/.bashrc afin d'obtenir une commande ping ping-t sur votre console:

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

Maintenant, vous pouvez appeler ceci sur la console:

ping-t example.com

Sa 31. Mär 12:58:31 CEST 2018: PING example.com (93.184.216.34) 56 (84) octets de données.
Sa 31. Mär 12:58:31 CEST 2018: 64 octets à partir de 93.184.216.34 (93.184.216.34): icmp_seq = 1 ttl = 48 fois = 208 ms
Sa 31. Mär 12:58:32 CEST 2018: 64 octets à partir de 93.184.216.34 (93.184.216.34): icmp_seq = 2 ttl = 48 fois = 233 ms

0
rubo77

Essayez cette ligne.

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

Vous devrez l'annuler avec ctrl-c tho.

0
nDCasT