web-dev-qa-db-fra.com

Linux Ping: Afficher l'heure

Comment puis-je établir le Ping Linux pour montrer les demandes 'Time Out' au lieu d'omettre la sortie?

Tout comme la version Windows de Ping.

17
Andre

La meilleure chose que j'ai trouvée était d'utiliser le drapeau -o (notez qu'il ne fonctionne pas sur toutes les distributions - à l'aide de Linux Mint 17.1 Rebecca iPuttils-Ping 3: 20121221-4ubuntu1.1)

$ ping -O 10.10.5.1

64 bytes from 10.10.5.1: icmp_seq=53 ttl=245 time=460 ms
no answer yet for icmp_seq=54
64 bytes from 10.10.5.1: icmp_seq=55 ttl=245 time=265 ms
64 bytes from 10.10.5.1: icmp_seq=56 ttl=245 time=480 ms
no answer yet for icmp_seq=57
64 bytes from 10.10.5.1: icmp_seq=58 ttl=245 time=348 ms
64 bytes from 10.10.5.1: icmp_seq=59 ttl=245 time=515 ms
no answer yet for icmp_seq=60
64 bytes from 10.10.5.1: icmp_seq=61 ttl=245 time=320 ms
64 bytes from 10.10.5.1: icmp_seq=62 ttl=245 time=537 ms

De la page man:

-O Report outstanding ICMP ECHO reply before sending next packet. This is useful together with the timestamp -D to log output to a diagnostic file and search for missing answers.

21
scoy

Lorsque j'utilise Ping pour voir si un hôte est en place dans des scripts shell, je fais quelque chose comme ça:

ping -W 1 -c 1 $Host 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-Host-to-be-up

Fondamentalement, envoie un ICMP que l'ICMP est terminé dans une seconde sans sortie et utilise le code de sortie pour passer une autre action.

5
entropo

Le script ci-dessus par Bruno.Braga fonctionne simplement bien, mais personnellement, je préfère un alias d'un profil de shell (comme .CacheRC) afin que cela puisse être un cas d'utilisation quotidienne.

Ma solution ci-dessous calcule également le numéro de séquence de demande d'écho automatiquement:

alias pingt='__pingt() { s=0; while :; do s=$(($s+1)); result=$(ping $1 -c1 -W1 |/bin/grep from) && echo "$result, seq=$s" && sleep 1 || echo timeout; done }; __pingt $1'

Voici l'exemple de sortie lorsque l'hôte est instable avec un délai d'attente:

$ pingt 10.10.10.126
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.235 ms, seq=1
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.228 ms, seq=2
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.209 ms, seq=3
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.241 ms, seq=4
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.195 ms, seq=5
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.211 ms, seq=6
timeout
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.267 ms, seq=8
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.232 ms, seq=9
^C

Bien sûr, l'inconvénient est: Aucune statistique à la fin lorsque CTRL-C est enfoncé. Si vous le souhaitez, il serait également possible de calculer MIN/AVG/MAX par Script Shell, MDEV est bien au-delà de la portée.

2
Jackie Yeh

J'ai peur mais il n'y a pas de solution à 100% à cela avec Standard Ping. Même avec Ping -V pour la sortie verbose, Ping serait silencieux en cas d'horaire des délais. Vous pouvez essayer d'utiliser:

ping -w 2 192.168.199.1
PING 192.168.199.1 (192.168.199.1) 56(84) bytes of data.

--- 192.168.199.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1007ms

Cela cesserait de ping après 2 secondes, puis montrer le nombre de paquets transmis et une perte de paquets. Une autre option serait d'utiliser MTR.

1
shakalandy

J'aime beaucoup le script shell de Bruno. J'ai ajouté une ligne pour créer un fichier avec toutes les échecs.

echo -e "date +'%Y/%m/%d %H:%M:%S' - Host $ hôte est\033 [0; 31mdown\033 [0m ">>/lostpackets.txt

0
Dave Honsvick

Le ping normal montre réellement vos times de temps. En regardant la SEQ = valeur entre les pings, vous pouvez raconter combien d'horaires

64 bytes from 192.168.12.46: icmp_seq=8 ttl=62 time=46.7 ms
64 bytes from 192.168.12.46: icmp_seq=11 ttl=62 time=45.3 ms

Par exemple, 3 sorties de temps se sont produites entre les 2 plants ci-dessus depuis le premier était seq=8 et le second était seq=11 (9 et 10 étaient des sorties de temps) seq=sequence.

0
Clive Gerada

sans rien scripter

ping -f -i 1 hostname

Avantages: commande standard Linux - rien à installer ou à script.

Inconvénients:

  1. Rien n'est imprimé pour les paquets qui ont répondu avec succès
  2. Cela fait un bip ennuyeux pour les paquets qui ont répondu avec succès
  3. L'indication visuelle des délais d'attente est aussi minime que possible (un petit point reste à l'écran lorsqu'un paquet temps).

avec un script minimal

#!/bin/bash
while :; do
    ping -W1 -c 1 "$@" | grep 'bytes from '
    case $? in
        0 ) sleep 1 ;;
        1 ) echo -e "request timeout" ;;
        * ) exit ;;
    esac
done

Inconvénients: Vous n'obtenez aucune statistique à la fin et vous ne pouvez pas utiliser ces 3 options de ping:

  1. -i Pour modifier l'intervalle entre l'envoi de paquets (il est codé sur 1Sec)
  2. -W Pour altérer le délai d'attente (il est codé sur 1sec)
  3. -c arrêter après avoir envoyé n paquets

BTW: C'est l'un des exemples extrêmement rares de fonctionnalités que je manque vraiment d'un outil de cli de Linux, mais je trouve dans un outil Windows. La précédente qui prouve la règle comme on dit :-)

0
ndemou