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.
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
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
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
.
sortie du terminal:
ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}'
sortie du fichier:
ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' > test.txt
sortie terminal + fichier:
ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' | tee test.txt
fond de sortie du fichier:
Nohup ping -i 5 google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S: {}' > test.txt &
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.
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
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
Transformez le résultat en awk
:
ping Host | awk '{if($0 ~ /bytes from/){print strftime()"|"$0}else print}'
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
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
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/
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
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
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.