it-swarm.com.de

Wie kann ich mit dem Ping-Befehl eine kurze Zeitüberschreitung einstellen?

Ich versuche, ein Skript zu schreiben, das alle Hosts in meinem LAN auflistet (dort etwa 20) und den Ping-Status neben jeden Host schreibt. Ich habe die DHCP-Leases-Datei, also alle IPs (z. B. 10.0.0.1, 10.0.0.2 usw.). Ich benötige lediglich den Ping-Status für jeden Host.

Mein Skript startet also einen einzelnen Ping für jeden Host:

ping -c 1 10.0.0.1

Wenn ein Host offline ist, dauert es leider lange, bis der Ping eine Zeitüberschreitung aufweist. Ich überprüfte man ping scheint es zwei Möglichkeiten zu geben, die Timeout-Verzögerung einzustellen: -w deadline und -W timeout. Ich glaube, ich interessiere mich für Letzteres.

Also habe ich das versucht:

ping -c 1 -W 1 10.0.0.1

Das Warten einer Sekunde pro Offline-Host ist jedoch 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 einzustellen? Wenn nicht, gibt es Alternativen?

Bearbeiten

  • Die O.S. ist Debian Lenny.
  • Die Hosts, die ich zu pingen versuche, sind tatsächlich Zugangspunkte. Sie befinden sich im selben VLAN und Subnetz wie die Benutzer (zur Vereinfachung der Bereitstellung und des Austauschs). Aus diesem Grund möchte ich nicht das gesamte Subnetz scannen (mit einem ping -b beispielsweise).

Edit # 2

Ich habe die Lösung fping akzeptiert (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 an:

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

Bei Debian Lenny ist die Installation trivial:

aptitude update
aptitude install fping
53
MiniQuark

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

  • "fping unterscheidet sich von ping dadurch, dass Sie eine beliebige Anzahl von Zielen in der Befehlszeile oder eine Datei mit den Listen der zu pingenden Ziele angeben können."
  • "Anstatt an ein Ziel zu senden, bis es eine Zeitüberschreitung aufweist oder antwortet, sendet fping ein Ping-Paket und wechselt im Round-Robin-Verfahren zum nächsten Ziel."
  • "Im Gegensatz zu Ping soll fping in Skripten verwendet werden, sodass die Ausgabe einfach zu analysieren ist."
42
AndyN

Verwenden Sie für Personen, die nach einer Lösung suchen, die ping umfasst, -i Schalter.

ping -i 0.2 www.google.com

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

Sudo ping -i 0.1 www.google.com

Es müssen keine zusätzlichen Dienstprogramme heruntergeladen werden.

40

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

timeout 0.2 ping -c1 fqdn || { do_work }
23
Jordon Bedwell

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

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

Weitere Informationen hierzu finden Sie in der nmap-Dokumentation .

15
pacey

möglicherweise möchten Sie sich das Arp-Ping-Tool ansehen, wenn sich alle Ihre Hosts im physischen LAN befinden. Es macht dasselbe, verwendet jedoch Layer-2-Arp-Pakete, um das 'Ping' durchzuführen. Sie können eine Kombination aus Arpping und ICMP-Ping oder sogar TCP-Ping verwenden, um den Fehler zu ermitteln. Beispiel ist ein Absturz des TCP-Stacks, obwohl dies heutzutage selten vorkommt. Wir konnten feststellen, ob ein TCP-Stapel eines Computers abgestürzt war, da der Computer nicht auf Ping reagierte, jedoch auf Arp (ein anderer Code auf dem Host). .

mithilfe einer Kombination aus Arpping, TCPING und ICMP-Ping können Sie feststellen, ob der Dienst auf dem Computer abgestürzt ist, der TCP-Stapel abgestürzt ist oder der Computer vollständig gesperrt ist. Wenn Sie Ethernet-Switches verwaltet haben, können Sie physische Verbindungsdaten abrufen und feststellen, ob der Computer tatsächlich eingeschaltet ist oder physisch vom Stromnetz getrennt wurde. Wir hatten eine Situation, in der Maschinen (Clients in öffentlichen Räumen) ausgeschaltet wurden. Wir sammelten diese Daten und das gesendete Wake auf LAN-Paketen, um die Maschinen einzuschalten. :-)

Unabhängig davon, welche Lösungen Sie erstellen, wenn Ihr Netzwerk ausgelastet ist, sollten Sie überlegen, eine Art von QOS zu implementieren, damit Ihre Überwachungspakete im Netzwerk Vorrang haben. Der Verlust von Messpaketen aufgrund einer Überlastung des Netzwerks kann zu Fehlalarmen führen. Wenn Sie qos zur Überwachung von Paketen verwenden, müssen Sie über das Sammeln von Daten zur Netzwerkauslastung nachdenken.

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

viel Glück!

4

@ Jordan-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 einen DNS verwenden und Ihre Workstation offline ist, kann Ping die IP-Adresse nicht ermitteln und wartet daher ungefähr 20 Sekunden, bevor false zurückgegeben wird.

Die Verwendung des Linux-Tools "Timeout" bietet mehr Kontrolle beim Ausführen von Ping mit einem Domänennamen.

Danke Leute

3
Digc

Verwenden Sie den Schalter - w, sowohl unter Windows als auch unter Debian.

Auf diese Weise können Sie schnell überprüfen, ob das Gerät überhaupt reagiert, vorausgesetzt, es reagiert weniger als die angegebene Anzahl von Sekunden.

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
3
NXT

Wenn Sie Ihr Subnetz (oder einen Teil davon) scannen können, ohne Sicherheitsalarme auszulösen, und sich nicht um zusätzliche Daten kümmern, Angry IP Scanner ist schnell, kostenlos und lässt Sie nach Status sortieren und kann detailliertere Informationen liefern.

1
Paul

Warum nicht Ping im Hintergrund mit Ausgabe in eine temporäre Datei parallel für jeden Host starten? Schlafen Sie dann eine Sekunde lang, beenden Sie alle noch laufenden Ping-Prozesse und lesen Sie die Dateien, um die Ausgabe zu sammeln.

0
dfranke

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

Die einzige Möglichkeit, die Dinge zu beschleunigen, besteht darin, eine Hintergrundüberprüfung durchzuführen und die Ergebnisse zu sammeln. Dies ist, was Tools wie Nagios tun.

0
BillThor

Sie könnten so etwas versuchen. Der Lauf dauert jedoch 15 Minuten.

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
VeggieVampire

versuche dies:

ping -n 5 1.2.3.4.5 >nul
0
Micky