Frage Wie kann ich mit dem Ping-Befehl ein kurzes Timeout setzen?


Ich versuche, ein Skript zu schreiben, das alle Hosts in meinem LAN auflistet (dort etwa 20) und schreibt den Ping-Status neben jedem Host. Ich habe die DHCP-Leasedatei, also habe ich alle IPs (sagen wir, 10.0.0.1, 10.0.0.2, usw.), alles was ich brauche ist der Ping-Status für jeden Host.

Also, mein Skript startet einen einzelnen Ping für jeden Host:

ping -c 1 10.0.0.1

Wenn ein Host offline ist, dauert es lange Zeit, bis das Ping abgelaufen ist. Ich überprüfte man ping, scheint es zwei Optionen zu geben, um die Timeout-Verzögerung einzustellen: -w deadline und -W timeout. Ich glaube, ich bin an letzterem interessiert.

Also habe ich Folgendes versucht:

ping -c 1 -W 1 10.0.0.1

Aber das Warten auf eine Sekunde pro Offline-Host ist immer noch zu lang. Ich habe versucht, es auf unter eine Sekunde zu setzen, aber es scheint den Parameter überhaupt nicht zu berücksichtigen:

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

Gibt es eine Möglichkeit, das Timeout auf einen niedrigeren Wert zu setzen? Wenn nicht, gibt es Alternativen?

Bearbeiten

  • Die O.S. ist Debian Lenny.
  • Die Hosts, die ich anpingen möchte, sind Access Points. Sie befinden sich im selben VLAN und Subnetz wie die Benutzer (zur Vereinfachung der Bereitstellung und des Austauschs). Deshalb möchte ich nicht alle Subnetze scannen (mit einem ping -b zum Beispiel).

Bearbeite # 2

Ich habe das akzeptiert fping Lösung (danke für alle anderen Antworten). Dieser Befehl macht genau das, wonach ich gesucht habe:

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4

Dieser Befehl dauert höchstens 500 ms und gibt mir den Ping-Status aller Hosts gleichzeitig:

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

Auf Debian Lenny ist die Installation trivial:

aptitude update
aptitude install fping

39
2017-11-10 19:13


Ursprung




Antworten:


fping ist möglicherweise ein besseres Werkzeug als der verwendete Ping-Ping. Auf welchem ​​Betriebssystem bist du?

  • "fping unterscheidet sich von ping darin, dass Sie eine beliebige Anzahl von Zielen in der Befehlszeile angeben oder eine Datei mit den Listen der zu pingenden Ziele angeben können."
  • "Anstatt an ein Ziel zu senden, bis es ausläuft oder antwortet, sendet fping ein Ping-Paket und geht zum nächsten Ziel im Round-Robin-Modus über."
  • "Im Gegensatz zu Ping soll Fping in Skripten verwendet werden, so dass seine Ausgabe leicht zu parsen ist."

38
2017-11-10 19:53



Funktioniert gut, danke, das ist, was ich gesucht habe. Dieser Befehl macht den Job gut: fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 ... Das Ganze dauert eine halbe Sekunde, und ich bekomme die Ergebnisse für alle Hosts auf einmal. Ausgezeichnetes Werkzeug. :-)) - MiniQuark


Für Leute, die nach einer Lösung suchen, die mit einbezieht ping, benutze die -i Schalter.

ping -i 0.2 www.google.com

Oder, wenn Sie 0.1 verwenden möchten, müssen Sie es als root ausführen

sudo ping -i 0.1 www.google.com

Keine Notwendigkeit, zusätzliche Dienstprogramme herunterzuladen.


33
2017-08-15 20:17



+1 von mir. Dies ist das erste Ergebnis beim googlen von "ping timeout", und genau das habe ich gesucht. - Steven Jeffries
@StevenJeffries Das gleiche hier! - Luc
Wenn Sie eine neuere Version von timeout, du kannst tun timeout 0.1 ping -c 1 ${hostname}. Die älteren Versionen von timeout Befehl unterstützt nur positive Ganzzahl-Timeout-Werte. - Trevor Boyd Smith
Ich habe gerade bemerkt, dass es weiter unten ist eine Lösung von @jordonbedwell das ist funktional das selbe zu meinem Kommentar. Als ich meinen Kommentar gepostet habe, habe ich das nicht gesehen Lösung von @jordonwedwell. - Trevor Boyd Smith
Im Falle eines toten Hosts wird diese Lösung ihre erste nützliche Ausgabe nach ungefähr 1 Sekunde ausdrucken. Das ist definitiv eine falsche Antwort, wie @MarcelBurkhard bereits erwähnt hat. - Victor Yarema


Sie können eine kurze Zeitüberschreitung mit dem timeout Befehl unter Ubuntu / Debian:

timeout 0.2 ping -c1 fqdn || { do_work }

15
2017-11-04 18:48



Gute Antwort! Ich habe es jetzt getan: timeout 1 ping -c 1 test.com - vrijdenker
Meine Version von Timeout akzeptiert nur 1 Sekunde. timeout (GNU coreutils) 8.4. - slm
Ich mag diese Lösung, sie kann auf alle anderen Befehle angewendet werden - datdinhquoc
@ Slm, ist es seltsam, dass Ihre Version nicht weniger als eine Sekunde unterstützt. Für mich geht das: DURATION is a floating point number with an optional suffix: 's' for seconds (the default),... In meinem Fall man timeout Berichte GNU coreutils 8.26. BWT, ich benutze Ubuntu 17.04. - Victor Yarema


Ich würde nmap für diese Aufgabe verwenden.

nmap -sP --max-retries=1 --host-timeout=1500ms 10.0.0.1

Siehe die nmap Dokumentation für mehr Details dazu.


12
2017-11-10 20:05



Guter Anruf .. Dies ist der "Super" Weg, es zu tun: D +1 - Arenstar
Hallo, ich habe das gerade versucht, aber ich habe die folgende Fehlermeldung erhalten: "--host-timeout wird in Millisekunden angegeben, es sei denn, Sie qualifizieren es durch Anhängen von 's', 'm', 'h' oder 'd' muss größer als 1500 Millisekunden sein ". - MiniQuark
Ich denke, das Problem ist offensichtlich, das Timeout kann nicht kürzer als 1500ms sein. Dann sollten Sie nach den nmap-Optionen suchen, die Parallelität berücksichtigen, denke ich. - pacey
Dies scheint nur eine Anfrage zu senden. Ich suche nach kontinuierlicher Fehlererkennung, ich habe hier von Googling "Ping Millisekunden Timeout" bekommen, bietet nmap Infinie-Pings wie Ubuntu Ping an? - ThorSummoner
Wenn das Zeitlimit auf etwas unter einer Sekunde gesetzt wird, wird ein privilegierter Benutzer wie in @ victor-bjelkholm answer verwendet - thrau


Vielleicht möchten Sie sich das arp-Ping-Tool ansehen, wenn sich alle Ihre Hosts im physischen LAN befinden. Es macht dasselbe, verwendet aber Layer-2-arp-Pakete, um das "Ping" auszuführen. Sie können eine Kombination aus arpping und icmp ping oder tatsächlich tcp ping verwenden, um den Fehler zu erfassen. Beispiel ist ein Tcp-Stack-Absturz, obwohl wir in diesen Tagen selten feststellen konnten, ob ein Maschinen-TCP-Stack abgestürzt war, da die Maschine nicht auf Ping reagieren würde, jedoch auf arp antworten würde (was ein anderer Code auf dem Host ist). .

Mit einer Kombination aus arpping, tcpping und icmp ping können Sie herausfinden, ob der Dienst auf dem Rechner abgestürzt ist, der tcp-stack abgestürzt ist oder der Rechner vollständig gesperrt ist. Wenn Sie Ethernet-Switches verwaltet haben, können Sie physische Verbindungsdaten abrufen, die anzeigen, ob das Gerät tatsächlich eingeschaltet ist oder ob es nicht angeschlossen ist. Wir hatten eine Situation, in der Maschinen (Kunden in öffentlichen Räumen) abgeschaltet wurden, wir sammelten diese Daten und die gesendeten Wake-on-Lan-Pakete, um die Maschinen hochzufahren. :-)

Was auch immer Lösungen Sie bauen, wenn Ihr Netzwerk beschäftigt ist, denken Sie über die Implementierung einer Art von Qos, so dass Ihre Überwachungspakete Priorität im Netzwerk haben, Verlust von Messpaketen aufgrund von Netzwerküberlastung kann zu Fehlalarmen führen. Wenn Sie Qos zum Überwachen von Paketen verwenden, müssen Sie darüber nachdenken, Daten über die Netzwerkauslastung zu sammeln.

So können Sie Ihre Überwachungslösung so komplex oder so einfach gestalten, wie Sie möchten. Wir finden, dass selbst das elementarste Überwachungssystem ein Schritt in die richtige Richtung ist, zumindest einige Administratoren behalten die Maschinen im Auge :-).

Viel Glück!


4
2017-11-11 10:29





@ Jordon-Bedwell hat einen tollen Vorschlag.

@ Laszlo-Valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linux erklärt, dass Ping-Timeouts erst beginnen, nachdem die IP-Adresse ermittelt wurde. Wenn Sie eine DNS-Datei verwenden und Ihre Workstation offline ist, kann ping die IP-Adresse nicht bestimmen. Daher scheint sie ungefähr 20 Sekunden lang zu warten, bevor sie false zurückgibt.

Die Verwendung des Linux-Timeout-Tools bietet mehr Kontrolle, wenn Ping mit einem Domainnamen ausgeführt wird.

Danke Leute


3
2017-11-30 23:34





Wenn Sie Ihr Subnetz (oder einen Teil davon) scannen können, ohne Sicherheitsalarme auszulösen, und ein paar zusätzliche Daten nicht stören, Angry IP-Scanner ist schnell, kostenlos, können Sie klicken, um nach Status zu sortieren, und können detailliertere Informationen bereitstellen.


1
2017-11-10 19:45





Benutzen -w wechseln, sowohl unter Windows als auch unter Debian.

Es ist ein schneller Weg, um zu überprüfen, ob die Maschine überhaupt reagiert, vorausgesetzt, dass sie in weniger als der angegebenen Anzahl von Sekunden reagiert.

ping -w 1 192.168.80.105

PING 192.168.80.105 (192.168.80.105) 56(84) bytes of data.

--- 192.168.80.105 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

1
2017-10-12 10:20





Warum nicht Ping im Hintergrund starten, mit Ausgabe in eine temporäre Datei, parallel für jeden Host? Dann ruhen Sie eine Sekunde lang aus, beenden Sie alle Ping-Prozesse, die noch ausgeführt werden, und lesen Sie die Dateien, um die Ausgabe zu erfassen.


0
2017-11-10 19:27



Ich denke, es würde funktionieren, aber ich suchte nach einer einfacheren Lösung. Danke trotzdem. - MiniQuark
Diese Methode wird nicht vergrößert. - Synetech


Das Timeout ist ein ganzzahliger Wert, der angibt, wie weit und wie lange das Paket gesendet werden kann. Werte unter 1 sind bedeutungslos. Ein Wert von 1 zeigt an, dass Sie nur unmittelbare Nachbarn anpingen.

Die einzige Möglichkeit, die Dinge zu beschleunigen, ist eine Hintergrundprüfung durchzuführen und die Ergebnisse zu sammeln. Das machen Tools wie Nagios.


0
2017-11-10 19:56



Es tut mir leid, aber ich glaube wirklich nicht, dass das wahr ist. Die man-Seite ist ziemlich klar, dass -W gibt die "Zeit, auf eine Antwort in Sekunden warten"; Es ist nicht dimensionslos, und obwohl Ping Werte unter 1 nicht berücksichtigt (daher die Frage), sind Untersekunden-Timeouts nicht bedeutungslos. Wenn du mir verzeihst, verwirrst du vielleicht -W mit -t, wobei letztere das IP TTL (Hop Count) -Feld setzt, das sich so verhält, wie du es beschrieben hast und wo Werte unter 1 tatsächlich bedeutungslos sind. - MadHatter
W ist der Zeitpunkt, zu dem der Ping-Prozess auf eine Antwort wartet, und es kann sinnvoll sein, ihn deutlich unter den Hop-Count zu setzen, wenn der Hop-Count hoch ist, was er normalerweise ist. Nach drei Sekunden bekommen Sie normalerweise Wiederholungsbedingungen. Einige Tools erlauben möglicherweise die Verwendung eines feineren Timers für Wartezeiten, aber für die meisten Anwendungen von Ping sind Sekunden eine vernünftige Einheit. - BillThor