Jak pokazać nieudany ping?

24

Gdy korzystamy z pingowania systemu Windows, pokaże nieudane pingi. Czy Ubuntu ma podobną funkcję?

Niepowodzenie polecenia ping jest bardzo przydatne podczas debugowania sieci. Jak to rozwiązujecie? Chcę tylko prostego rozwiązania, nie chcę mieć długiego skryptu.

王子 1986
źródło
2
Czy możesz podać przykładowy wynik lub zrzut ekranu, aby uzupełnić pytanie?
zielony
1
Czy szukasz bardziej szczegółowych informacji 5 packets transmitted, 0 received, 100% packet loss, time 4032ms(takie informacje są drukowane po zakończeniu pingowania, samodzielnie lub przez Ctrl + C)? Czy szukasz oddzielnych danych na temat każdego pojedynczego polecenia ping?
Eliah Kagan,
1
Linux jest niesamowity i wszyscy tutaj uwielbiamy go z wielu powodów, ale ... hej czasami Windows miał rację, a Linux źle. Tak, nawet w podstawowych narzędziach CLI. Tak, nawet w podstawowych narzędziach sieciowych CLI! Jeśli nie ma łatwego sposobu na wyświetlenie komunikatu na ekranie, gdy coś pójdzie nie tak, musimy uznać go za „funkcję, której nam brakuje”. Z pewnością nie chcemy udawać, że jest to coś tak złożonego, że nie jesteśmy w stanie dowiedzieć się, o co dokładnie prosi OP (szczególnie, gdy jest to funkcja domyślnie włączona w kilku milionach urządzeń wokół nas).
ndemou
Mógłbym przysiąc, że ta funkcja była obecna we wcześniejszym pingu linuksowym. Jest także obecny w MacOS (który jest zbudowany na uniksie). To poza mną, dlaczego nie powinno tam być. Mam linię, która działa sporadycznie i aby dowiedzieć się, jaka jest długość zaciemnień, muszę przesiać dane wyjściowe w poszukiwaniu skoku, zamiast wyraźnych linii.
Silvio Levy,

Odpowiedzi:

26

Prawidłowa odpowiedź to: nie ma czegoś takiego jak „ nieudany zgubiony ping”. (Odpowiedzi na błędy, takie jak „Miejsce docelowe nieosiągalne” są zawsze drukowane, różni się to od braku odpowiedzi).

Narzędzie ping wyświetla wszystkie otrzymane odpowiedzi, nawet jeśli jedzący zdecyduje, że ten konkretny ping został utracony. Całkowicie możliwe jest otrzymywanie odpowiedzi poza kolejnością.

Nawet na moim telefonie z Androidem standardowe narzędzie ping obsługuje te 2 opcje:
-D drukuje znacznik czasu przed każdą wiadomości
-O drukuje wiadomość, gdy odpowiedź nie zostanie odebrana na czas, i jest mniej więcej tym, o co pytano .
Jednak te opcje nie wydają się być obsługiwane wszędzie (np. Debian Wheezy nie ma ich o ile wiem, podczas gdy Jessie je ma. busybox pingNie obsługuje ich).

Oto przykładowe dane wyjściowe, które udało mi się uzyskać (pominięto nieważne odpowiedzi ping):

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

Zauważ, że po raz pierwszy zgłoszono brak numeru # 130, a następnie odebrano go po numerze 131, a na koniec zgłasza się zero pakietów.


Dodatkowa uwaga na temat systemu Windows:

W systemie Windows ping wydaje się czekać dłużej na odpowiedź, a następnie zadeklarować jej brak i zignorować, jeśli pojawi się później.

Domyślnie interwał wynosi 1 sekundę, a limit czasu wynosi 4 sekundy, więc:
Przy niskim RTT pingi będą wysyłane z 1-sekundowymi interwałami.
Przy RTT> 4 pingi będą wysyłane w odstępach 4-sekundowych (lub 5, niepewny) i wszystkie będą zgłaszane jako nieudane, tak jakby serwer nie odpowiedział.

EvgEnZh
źródło
1
+1 dla -Oopcji jest obecne i działa dobrze w zaufanym systemie Ubuntu (i Linux Mint 17.2) z pakietu iputils-ping wersja 3: 20121221-4ubuntu1.1
Xen2050
11

Wyjście częściowo z odpowiedzi EvgEnZh, ale z moją własną wersją:

ping -O -q 8.8.8.8

To sprawia, że ​​drukuje wiadomość, gdy odpowiedź trwa zbyt długo lub nigdy nie wraca ( -O), i pomija wiadomości, gdy wracają ( -q). W rezultacie otrzymujesz dane wyjściowe tylko wtedy, gdy brakuje pakietów. Może to znacznie ułatwić znajdowanie sporadycznych problemów, dzięki czemu nie musisz przesiewać stosu komunikatów „zadziałało” w kilku miejscach, w których się zepsuł.

Azendale
źródło
Zauważ, że wyzwolenie -O oznacza tylko, że opóźnienie jest większe niż oczekiwano. To często wskazuje na prawdziwy problem, ale nie zawsze. Ten dziennik, który zamieściłem w odpowiedzi, został uzyskany przy słabym połączeniu GPRS i mimo że w ciągu ponad 2 minut złapałem tylko jedną odpowiedź „poza kolejnością”, pojawiło się wiele odpowiedzi „spóźnionych”. Nieudane połączenie zostało przytłoczone kilka razy, zgłoszono kilka brakujących pingów z rzędu, a potem wszystkie pojawiły się po kilku sekundach. Połączenie było nadal niezawodne (być może GPRS obsłużyło wewnętrzną retransmisję, nie wiem), tylko ekstremalny ból, którego można użyć nawet w przypadku dostępu SSH.
EvgEnZh
3

Może ping -fjest odpowiedni dla ciebie. Z instrukcji ping:

-fa

Ping powodziowy. Dla każdego wysłanego ECHO_REQUEST drukowany jest kropka „”. „”, A na zawsze otrzymany ECHO_REPLY drukowany jest backspace. Zapewnia to szybkie wyświetlenie liczby upuszczanych pakietów. Jeśli nie podano interwału, ustawia interwał na zero i wysyła pakiety tak szybko, jak wracają lub sto razy na sekundę, w zależności od tego, co jest większe. Tylko superużytkownik może korzystać z tej opcji z zerowym interwałem.

Dla 1 echo_request na sekundę to wyglądałoby ping -i 1 -f 8.8.8.8

Daniel Yuste Aroca
źródło
Nie jestem pewien, czy to nowa funkcja, czy nie, mogłem zobaczyć nieudane pingi.
王子
Jakiej opcji użyłeś, aby zgłosić nieudane pingi? Jaką wiadomość otrzymujesz za nieudany ping?
Daniel Yuste Aroca
Podczas gdy właśnie użyłem polecenia ping, komunikat wygląda tak: $ ping 172.18.1.12 PING 172.18.1.12 (172.18.1.12) 56 (84) bajtów danych. Od 172.18.1.224 icmp_seq = 1 Host docelowy nieosiągalny Od 172.18.1.224 icmp_seq = 2 Host docelowy nieosiągalny Od 172.18.1.224 icmp_seq = 3 Host docelowy nieosiągalny
王子 1986
2
„Host docelowy nieosiągalny” to nie to samo, co limit czasu pingowania
ndemou
ping -f nie jest odpowiedzią, ponieważ nie pozostawia rekordu. Potrzebny jest jeden typ linii dla udanego pingowania, a inny dla niepowodzenia, więc można natychmiast powiedzieć (w sytuacji, gdy usługa jest przerywana), jak często i jak długo są przerwy w dostawie energii.
Silvio Levy,
0

Nawet z opcją -v ping tego nie robi. Zobacz to pytanie . Ale jeśli jest to dla Ciebie naprawdę ważne (lub zabawne), możesz pobrać źródło, zmodyfikować kod, aby zawierał odpowiednie wywołanie printf. Dobrym miejscem do tego byłoby zakończenie metody „send_probe” (linia 619 na 12.10) ...

Najpierw zdobądź źródło

apt-get source iputils
cd iputils*

Wprowadź zmiany

gedit ping.c

Zbuduj i zainstaluj wygenerowany pakiet ...

apt-get install libsysfs-dev
dpkg-buildpackage
Rémi
źródło
Chciałbym to zrobić (i głosować tę odpowiedź 10 razy), ale czegoś brakuje. Pracuję pod sudo. Po edycji ping.c, jeśli spróbuję „zrobić”, dostaję błąd krytyczny: sys / capability.h: Brak takiego pliku ”. Jeśli podążę za następnymi dwoma wierszami w odpowiedzi (apt-get install i dpkg -...), nie otrzymuję żadnych błędów, ale nie mam pojęcia, gdzie znajduje się plik wykonywalny. Stary plik wykonywalny (/ bin / ping) wciąż tam jest - wiem, że jest stary od znacznika czasu i ponieważ nie zachowuje się inaczej.
Silvio Levy,
-1

Dziękuję za wszystkie odpowiedzi. Wydaje się, że najnowszy ping Ubuntu może pokazać, że ping nie powiódł się.

Dzięki jeszcze raz.

王子 1986
źródło
1
Nie, to nie jest (aż 2015-Jan przynajmniej) „Host docelowy jest nieosiągalny” nie jest taka sama jak ping timeout
ndemou
Dlaczego jest to akceptowana odpowiedź? ping -O -q 8.8.8.8jest droga.
theV0ID