Wie zeige ich fehlgeschlagenen Ping?

24

Wenn wir Windows Ping verwenden, werden die fehlgeschlagenen Pings angezeigt. Hat Ubuntu eine ähnliche Funktion?

Der fehlgeschlagene Ping ist beim Debuggen des Netzwerks sehr nützlich. Wie löst ihr das? Nun, ich möchte nur eine einfache Lösung, ich möchte kein langes Skript bekommen.

王子 1986
quelle
2
Können Sie eine Beispielausgabe oder einen Screenshot zur Ergänzung der Frage bereitstellen?
Grün
1
Suchen Sie oder detailliertere Informationen als 5 packets transmitted, 0 received, 100% packet loss, time 4032ms(Informationen wie diese werden gedruckt, wenn Ping beendet wird, entweder für sich selbst oder mit Strg + C)? Suchen Sie separate Daten für jeden einzelnen Ping?
Eliah Kagan
1
Linux ist großartig und wir alle hier lieben es aus vielen Gründen, aber ... hey manchmal hat Windows es richtig und Linux hat es falsch verstanden. Ja, auch in einfachen CLI-Tools. Ja, auch in grundlegenden Netzwerk-CLI-Tools! Wenn es nicht einfach ist, eine Meldung auf den Bildschirm zu bringen, wenn etwas schief geht, müssen wir dies als "fehlende Funktion" anerkennen. Wir möchten mit Sicherheit nicht so tun, als sei es so komplex, dass wir nicht herausfinden können, was genau das OP verlangt (insbesondere, wenn es sich um eine Funktion handelt, die standardmäßig in einigen Millionen Kisten um uns herum aktiviert ist).
Ndemou
Ich hätte schwören können, dass diese Funktion in früheren Linux-Ping vorhanden war. Es ist auch in MacOS verfügbar (das auf Unix aufbaut). Es ist mir ein Rätsel, warum es nicht da sein sollte. Ich habe eine Linie, die intermittierend arbeitet und um die Länge der Blackouts herauszufinden, muss ich die Ausgabe nach einem Sprung durchsuchen, anstatt die Linien klar voneinander zu unterscheiden.
Silvio Levy

Antworten:

26

Die richtige Antwort lautet: Es gibt kein " fehlgeschlagenes verlorenes Ping". (Fehlerantworten wie "Ziel nicht erreichbar" werden immer gedruckt. Sie unterscheiden sich davon, dass überhaupt keine Antwort erfolgt.)

Das Dienstprogramm Ping druckt jede empfangene Antwort aus, auch wenn es entschieden hat, dass dieser bestimmte Ping verloren gegangen ist. Es ist durchaus möglich, Antworten außerhalb der angegebenen Reihenfolge zu erhalten.

Selbst auf meinem Android-Telefon unterstützt das Dienstprogramm "Stock Ping" diese zwei Optionen:
-D druckt einen Zeitstempel vor jeder Nachricht
-O druckt eine Nachricht, wenn die Antwort nicht rechtzeitig eingeht und es ist mehr oder weniger das, was gefragt wurde .
Diese Optionen scheinen jedoch nicht überall unterstützt zu werden (z. B. fehlen sie Debian Wheezy, soweit ich weiß, während Jessie sie hat. busybox pingUnterstützt sie nicht).

Hier ist eine Beispielausgabe, die ich erhalten habe (unwichtige Ping-Antworten wurden übersprungen):

u0_a93@NX505J:/ $ ping -D -O 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1440545014.805478] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=244 time=116 ms
~~~~~~~~~~
[1440545142.995443] 64 bytes from 8.8.8.8: icmp_seq=129 ttl=244 time=110 ms
[1440545144.885601] no answer yet for icmp_seq=130
[1440545145.455485] 64 bytes from 8.8.8.8: icmp_seq=131 ttl=244 time=568 ms
[1440545145.455780] 64 bytes from 8.8.8.8: icmp_seq=130 ttl=244 time=1569 ms
[1440545146.005850] 64 bytes from 8.8.8.8: icmp_seq=132 ttl=244 time=119 ms
~~~~~~~~~~
[1440545254.055962] 64 bytes from 8.8.8.8: icmp_seq=240 ttl=244 time=115 ms
^C
--- 8.8.8.8 ping statistics ---
240 packets transmitted, 240 received, 0% packet loss, time 239250ms
rtt min/avg/max/mdev = 109.062/138.757/1569.620/101.608 ms, pipe 2

Beachten Sie, wie # 130 zuerst als vermisst gemeldet wird, dann nach # 131 empfangen wird und schließlich Paketverlust als Null gemeldet wird.


Zusätzlicher Hinweis zu Windows:

Unter Windows scheint Ping länger auf eine Antwort zu warten und diese dann für fehlend zu erklären und zu ignorieren, falls sie später eintrifft.

Standardmäßig beträgt das Intervall 1 Sekunde und das Zeitlimit 4 Sekunden.
Bei niedriger RTT werden Pings in Intervallen von 1 Sekunde gesendet.
Bei RTT> 4 werden Pings in Intervallen von 4 Sekunden gesendet (oder 5, nicht sicher) und alle werden als fehlgeschlagen gemeldet, so als ob der Server nicht geantwortet hätte.

EvgEnZh
quelle
1
+1 für -OOption, ist vorhanden und funktioniert gut in Ubuntu Trusty (& Linux Mint 17.2) aus dem iputils-ping-Paket Version 3: 20121221-4ubuntu1.1
Xen2050
11

Teilweise geht die Antwort von EvgEnZh verloren, aber mit meiner eigenen Version:

ping -O -q 8.8.8.8

Das bedeutet, dass eine Nachricht gedruckt wird, wenn eine Antwort zu lange dauert oder nie zurückkommt ( -O), und dass Nachrichten unterdrückt werden, wenn sie zurückkommen ( -q). Das Ergebnis ist, dass Sie nur dann eine Ausgabe erhalten, wenn Pakete verloren gehen. Dies kann das Auffinden von zeitweiligen Problemen erheblich vereinfachen, indem Sie es so gestalten, dass Sie nicht einen Stapel von "es hat funktioniert" -Meldungen für die wenigen Stellen durchsehen müssen, an denen es kaputt gegangen ist.

Azendale
quelle
Beachten Sie, dass -O-Triggerung nur bedeutet, dass die Latenz höher als erwartet ist. Das deutet oft auf ein echtes Problem hin, aber nicht immer. Das Protokoll, das ich in meiner Antwort gepostet habe, wurde über eine schwache GPRS-Verbindung abgerufen, und obwohl ich in mehr als 2 Minuten nur eine einzige nicht ordnungsgemäße Antwort erhalten habe, gingen viele Antworten "spät" ein. Die beschissene Verbindung wurde einige Male überfordert, meldete, dass mehrere Pings hintereinander fehlten, und dann kamen sie alle nach ein paar Sekunden. Die Verbindung war immer noch zuverlässig (möglicherweise wurde GPRS intern für die erneute Übertragung verwendet, ich weiß es nicht), was selbst für den SSH-Zugriff äußerst schwierig ist.
EvgEnZh
3

Vielleicht ping -fist für Sie geeignet. Aus dem Ping-Handbuch:

-f

Flood Ping. Für jede gesendete ECHO_REQUEST wird ein Punkt ''. '' Gedruckt, während für immer ECHO_REPLY, das empfangen wurde, ein Backspace gedruckt wird. Dies bietet eine schnelle Anzeige, wie viele Pakete verworfen werden. Wenn kein Intervall angegeben wird, wird das Intervall auf Null gesetzt und die Pakete werden so schnell wie sie zurückkommen oder hundert Mal pro Sekunde ausgegeben, je nachdem, welcher Wert höher ist. Nur der Superuser darf diese Option mit einem Intervall von Null verwenden.

Für 1 echo_request pro Sekunde würde es so aussehen ping -i 1 -f 8.8.8.8

Daniel Yuste Aroca
quelle
Nicht sicher, ob es sich um eine neue Funktion handelt oder nicht, ich konnte die fehlgeschlagenen Pings sehen.
王子 1986
Mit welcher Option haben Sie die fehlgeschlagenen Pings gemeldet? Welche Nachricht erhalten Sie für einen fehlgeschlagenen Ping?
Daniel Yuste Aroca
Während ich gerade Ping verwendet habe, ist die Nachricht wie folgt: $ ping 172.18.1.12 PING 172.18.1.12 (172.18.1.12) 56 (84) Datenbytes. Von 172.18.1.224 icmp_seq = 1 Zielhost nicht erreichbar Von 172.18.1.224 icmp_seq = 2 Zielhost nicht erreichbar Von 172.18.1.224 icmp_seq = 3 Zielhost nicht erreichbar
王子 1986
2
"Destination Host Unreachable" ist nicht dasselbe wie ein Ping-Timeout
ndemou
ping -f ist nicht die Antwort, weil es keinen Datensatz hinterlässt. Was benötigt wird, ist ein Leitungstyp für einen erfolgreichen Ping und ein anderer Leitungstyp für einen Ausfall, sodass sofort (in einer Situation, in der der Service unterbrochen ist) festgestellt werden kann, wie oft und wie lange die Stromausfälle dauern.
Silvio Levy,
0

Selbst mit der Option -v macht Ping das nicht. Siehe diese Frage . Aber wenn dies für Sie wirklich wichtig ist (oder Spaß macht), können Sie die Quelle herunterladen und den Code so ändern, dass er einen geeigneten printf-Aufruf enthält. Ein guter Ort dafür wäre am Ende der Methode 'send_probe' (Zeile 619 am 12.10) ...

Zuerst bekommen Sie die Quelle

apt-get source iputils
cd iputils*

Nehmen Sie die gewünschten Änderungen vor

gedit ping.c

Generiertes Paket erstellen und installieren ...

apt-get install libsysfs-dev
dpkg-buildpackage
Rémi
quelle
Ich würde dies gerne tun (und diese Antwort zehnmal hoch bewerten), aber es muss etwas fehlen. Ich arbeite unter sudo -s. Wenn ich nach der Bearbeitung von ping.c versuche, "make" zu machen, erhalte ich den "schwerwiegenden Fehler: sys / capacity.h: Keine solche Datei". Wenn ich den nächsten beiden Zeilen in der Antwort folge (apt-get install und dpkg -...), erhalte ich keine Fehler, aber ich habe keine Ahnung, wo die ausführbare Datei abgelegt ist. Die alte ausführbare Datei (/ bin / ping) ist noch da - ich weiß, dass sie vom Zeitstempel alt ist und sich nicht anders verhält.
Silvio Levy,
-1

Danke für alle Antworten. Anscheinend kann der neueste Ubuntu-Ping anzeigen, dass der Ping fehlgeschlagen ist.

Danke noch einmal.

王子 1986
quelle
1
Nein, dies ist nicht der Fall (bis mindestens Januar 2015). "Ziel-Host nicht erreichbar" ist nicht dasselbe wie eine Ping-Zeitüberschreitung
zwar am
Warum ist das die akzeptierte Antwort? ping -O -q 8.8.8.8ist der Weg zu gehen.
theV0ID