93 votes

Comment puis-je définir un court délai d'attente avec la commande ping ?

J'essaie d'écrire un script qui liste tous les hôtes de mon réseau local (il y en a une vingtaine) et écrit le statut ping à côté de chaque hôte. J'ai le fichier des baux DHCP, donc j'ai toutes les IPs (disons, 10.0.0.1, 10.0.0.2, etc.), tout ce dont j'ai besoin est le statut ping pour chaque hôte.

Ainsi, mon script lance un seul ping pour chaque hôte :

ping -c 1 10.0.0.1

Malheureusement, lorsqu'un hôte est hors ligne, le ping prend beaucoup de temps avant de s'arrêter. J'ai vérifié man ping il semble y avoir deux options pour définir le délai d'attente : -w deadline y -W timeout . Je pense que je suis intéressé par ce dernier.

Alors j'ai essayé ça :

ping -c 1 -W 1 10.0.0.1

Mais attendre une seconde par hôte hors ligne est encore trop long. J'ai essayé de le régler en dessous d'une seconde, mais il ne semble pas du tout prendre en compte le paramètre :

ping -c 1 -W 0.1 10.0.0.1  # timeout option is ignored, apparently

Y a-t-il un moyen de régler le délai d'attente à une valeur inférieure ? Sinon, existe-t-il des alternatives ?

Modifier

  • L'O.S. est Debian Lenny.
  • Les hôtes que j'essaie de pinguer sont en fait des points d'accès. Ils sont sur le même vlan et le même sous-réseau que les utilisateurs (pour simplifier le déploiement et le remplacement). C'est pourquoi je ne souhaite pas scanner tout le sous-réseau (avec un ping -b par exemple).

Edit #2

J'ai accepté le fping (merci pour toutes les autres réponses). Cette commande fait exactement ce que je cherchais :

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4

Cette commande prend au maximum 500 ms et me donne le statut ping de tous les hôtes en même temps :

10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)

10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0

Sur Debian Lenny, l'installation est triviale :

aptitude update
aptitude install fping

0voto

BillThor Points 27096

Le délai d'attente est une valeur entière indiquant la distance et la durée de l'envoi du paquet. Les valeurs inférieures à 1 sont sans signification. Une valeur de 1 indique que vous n'envoyez des signaux qu'à vos voisins immédiats.

La seule façon d'accélérer les choses est de faire une vérification des antécédents et de récolter les résultats. C'est ce que font des outils comme Nagios.

2 votes

Je suis désolé, mais je ne pense vraiment pas que ce soit vrai. La page de manuel est assez claire sur le fait que -W spécifie le "Temps d'attente pour une réponse, en secondes" ; ce n'est pas sans dimension, et bien que ping n'honore pas les valeurs inférieures à 1 (d'où la question), les délais inférieurs à une seconde ne sont pas dénués de sens. Si vous me pardonnez, vous confondez peut-être -W avec -t, ce dernier définissant le champ IP TTL (hop count), qui se comporte comme vous l'avez décrit, et où les valeurs inférieures à 1 sont effectivement sans signification.

0 votes

-W est le temps que le processus ping attend pour une réponse, et il peut être utile de le définir bien en dessous du nombre de sauts lorsque le nombre de sauts est élevé, ce qui est normalement le cas. A partir de trois secondes, on se trouve généralement dans des conditions de réessai. Certains outils peuvent permettre l'utilisation d'un minuteur plus fin pour les attentes, mais pour la plupart des utilisations de ping, les secondes sont une unité raisonnable.

0voto

VeggieVampire Points 1

Vous pourriez essayer quelque chose comme ça. Mais ça prend 15 minutes pour fonctionner.

a=258
while [ $a -ge 1 ]
do
    echo "10.0.0.$a"
    sudo ping -i 0.1 -c 1 "10.0.0.$a">>/home/$USER/output.log
   a=`expr $a - 1`
done
cat /home/$USER/output.log|grep -i "icmp_req=1"
cat /dev/null>/home/$USER/output.log

0 votes

On dirait que nmap serait le bon outil pour ce travail.

0voto

Randhir Points 161

Essayez ceci :

ping -n 5 1.2.3.4.5 >nul

0 votes

En quoi est-ce mieux que fping ?

-2voto

Ivelin Points 107

Ping possède les options [-t timeout] et [-W waittime], ce qui vous permet de le faire :

ping -c 1 -t 1 -W 1 google.com

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X