ping (narzędzie sieciowe) - ping (networking utility)
Pierwotny autor (autorzy) | Mike Muuss |
---|---|
Deweloper(zy) | Różne open-source i komercyjnych deweloperów |
Pierwsze wydanie | 1983 |
Platforma | Wieloplatformowy |
Rodzaj | Komenda |
Licencja | Domena publiczna , BSD , GPL , MIT |
Ping to narzędzie programowe do administrowania siecią komputerową, używane do testowania osiągalności hosta w sieci z protokołem internetowym (IP). Jest dostępny dla praktycznie wszystkich systemów operacyjnych, które mają możliwość pracy w sieci, w tym dla większości wbudowanego oprogramowania do administrowania siecią.
Ping mierzy czas podróży w obie strony dla wiadomości wysłanych z hosta źródłowego do komputera docelowego, które są wysyłane z powrotem do źródła. Nazwa pochodzi od terminologii sonaru aktywnego, który wysyła impuls dźwiękowy i nasłuchuje echa w celu wykrycia obiektów pod wodą.
Ping działa poprzez wysyłanie pakietów żądań echa protokołu ICMP ( Internet Control Message Protocol ) do hosta docelowego i oczekiwanie na odpowiedź ICMP echo. Program zgłasza błędy, utratę pakietów i statystyczne podsumowanie wyników, zazwyczaj zawierające minimum, maksimum, średnie czasy podróży w obie strony i odchylenie standardowe średniej.
Te opcje wiersza polecenia z narzędzia ping i jego wyjścia różnią się między licznymi wdrożeniami. Opcje mogą obejmować rozmiar ładunku, liczbę testów, limity liczby przeskoków sieci ( TTL ), które przemierzają sondy, odstęp między żądaniami i czas oczekiwania na odpowiedź. Wiele systemów udostępnia narzędzie towarzyszące ping6 do testowania w sieciach protokołu internetowego w wersji 6 (IPv6), które implementują ICMPv6 .
Historia
Narzędzie ping zostało napisane przez Mike'a Muussa w grudniu 1983 roku podczas jego pracy w Ballistic Research Laboratory , obecnie w US Army Research Laboratory . Uwaga Davida Millsa dotycząca używania pakietów ICMP echo do diagnostyki i pomiarów sieci IP skłoniła Muussa do stworzenia narzędzia do rozwiązywania problemów z siecią. Autor nazwał go od dźwięku, który wydaje sonar , ponieważ jego metodologia jest analogiczna do lokalizacji echa sonaru. Backronym pakietu internetowego Groper dla PING został wykorzystany przez ponad 30 lat, a mimo Muuss mówi, że z jego punktu widzenia ping nie został pomyślany jako skrót, on potwierdził ekspansję Mills' nazwy. Pierwsza wydana wersja była oprogramowaniem domeny publicznej ; wszystkie kolejne wersje zostały objęte licencją BSD . Ping został po raz pierwszy zawarty w 4.3BSD . Wersja FreeDOS została opracowana przez Ericka Engelke i jest na licencji GPL . Tim Crawford opracował wersję ReactOS . Jest licencjonowany na podstawie licencji MIT .
RFC 1122 określa, że każdy host musi przetwarzać żądania echa ICMP i w zamian wysyłać odpowiedzi na echo.
Przykład wywołania
Poniżej przedstawiono wynik uruchomienia polecenia ping w systemie Linux w celu wysłania pięciu sond (domyślnie 1 sekundowy interwał, konfigurowany za pomocą opcji -i) do hosta docelowego www.example.com :
$ ping -c 5 www.example.com
PING www.example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.632 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.726 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=10.683 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=9.674 ms
64 bytes from 93.184.216.34: icmp_seq=4 ttl=56 time=11.127 ms
--- www.example.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 9.674/10.968/11.726/0.748 ms
Dane wyjściowe wymieniają każdy komunikat sondy i uzyskane wyniki. Wreszcie zawiera statystyki całego testu. W tym przykładzie najkrótszy czas podróży w obie strony wynosił 9,674 ms, średnia 10,968 ms, a wartość maksymalna 11,726 ms. Pomiar miał odchylenie standardowe 0,748 ms.
Wskazania błędów
W przypadku braku odpowiedzi z hosta docelowego większość implementacji nie wyświetla nic lub okresowo wyświetla powiadomienia o przekroczeniu limitu czasu. Możliwe wyniki ping wskazujące na problem to:
- H, !N lub !P – host, sieć lub protokół nieosiągalny
- S – trasa źródłowa nie powiodła się
- F – potrzebna fragmentacja
- U lub !W – sieć docelowa/host nieznany
- I – host źródłowy jest izolowany
- A – komunikacja z siecią docelową zabroniona administracyjnie
- Z – komunikacja z hostem docelowym zabroniona administracyjnie
- Q – dla tego ToS sieć docelowa jest nieosiągalna
- T – dla tego ToS host docelowy jest nieosiągalny
- X – komunikacja zabroniona administracyjnie
- V – naruszenie pierwszeństwa hosta
- C – obowiązuje odcięcie pierwszeństwa
W przypadku błędu host docelowy lub router pośredni wysyła z powrotem komunikat o błędzie ICMP, na przykład „host nieosiągalny” lub „przekroczono czas TTL podczas przesyłania”. Ponadto wiadomości te zawierają pierwsze osiem bajtów oryginalnej wiadomości (w tym przypadku nagłówek żądania echa ICMP, w tym wartość wygaszenia), dzięki czemu narzędzie ping może dopasować odpowiedzi na zapytania inicjujące.
Format wiadomości
Pakiet ICMP
Bity 0–7 | Bity 8–15 | Bity 16–23 | Bity 24-31 | |
---|---|---|---|---|
Nagłówek (20 bajtów) |
Wersja/MPH | Rodzaj usługi (ToS) | Długość | |
Identyfikacja | flagi i offset | |||
Czas życia (TTL) | Protokół | Suma kontrolna nagłówka | ||
Źródłowy adres IP | ||||
Docelowy adres IP | ||||
Nagłówek ICMP (8 bajtów) |
Rodzaj wiadomości | Kod | Suma kontrolna | |
Dane nagłówka | ||||
Ładunek ICMP ( opcjonalnie ) |
Dane ładunku |
Bity 0–3 | Bity 4–7 | Bity 8–11 | Bity 12–15 | Bity 16–23 | Bity 24-31 | |
---|---|---|---|---|---|---|
Nagłówek (40 bajtów) |
Wersja | Klasa ruchu | Etykieta przepływu | |||
Długość ładunku | Następny nagłówek | Limit przeskoków | ||||
Adres źródłowy | ||||||
Adres przeznaczenia | ||||||
Nagłówek ICMP6 (8 bajtów) |
Rodzaj wiadomości | Kod | Suma kontrolna | |||
Dane nagłówka | ||||||
Ładunek ICMP6 ( opcjonalnie ) |
Dane ładunku |
Ogólny skład pakietu ICMP:
- Nagłówek IPv4 (na niebiesko): protokół ustawiony na 1 (ICMP) i typ usługi ustawiony na 0.
- Nagłówek IPv6 (na niebiesko): Następny nagłówek ustawiony na 58 (ICMP6)
- Nagłówek ICMP (na czerwono):
- Typ komunikatu ICMP (8 bitów)
- Kod (8 bitów)
- Suma kontrolna (16 bitów), 16-bitowe uzupełnienie do jedności w pakiecie. W przypadku IPv4 jest to obliczane na podstawie komunikatu ICMP rozpoczynającego się od pola Type ( nagłówek IP nie jest uwzględniony). W przypadku IPv6 jest to obliczane na podstawie komunikatu ICMP, poprzedzonego „pseudo-nagłówkiem” IPv6.
- Pole Header Data (32 bity), które w tym przypadku (żądanie ICMP i odpowiedzi echa) będzie składało się z identyfikatora (16 bitów) i numeru sekwencyjnego (16 bitów).
- ICMP Payload: ładunek dla różnych rodzajów odpowiedzi; może mieć dowolną długość, pozostawioną szczegółom implementacji. Jednak pakiet zawierający nagłówki IP i ICMP musi być mniejszy niż maksymalna jednostka transmisji sieci, w przeciwnym razie istnieje ryzyko fragmentacji .
Prośba o echo
Żądanie echo ( "ping") jest ICMP / ICMP6 wiadomość.
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Typ = 8(IPv4, ICMP) 128(IPv6,ICMP6) | Kod = 0 | Suma kontrolna | |||||||||||||||||||||||||||||
Identyfikator | Numer sekwencji | ||||||||||||||||||||||||||||||
Ładunek |
Klient może wykorzystać identyfikator i numer kolejny do dopasowania odpowiedzi do żądania, które spowodowało odpowiedź. W praktyce większość systemów Linux używa unikalnego identyfikatora dla każdego procesu pingowania, a numer sekwencyjny jest rosnącą liczbą w ramach tego procesu. System Windows używa stałego identyfikatora, który różni się w zależności od wersji systemu Windows, oraz numeru sekwencyjnego, który jest resetowany tylko podczas rozruchu.
Echo odpowiedź
Odpowiedź echa jest komunikatem ICMP generowanym w odpowiedzi na żądanie echa; jest to obowiązkowe dla wszystkich hostów i musi zawierać dokładny ładunek otrzymany w żądaniu.
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Typ = 0(IPv4,ICMP) 129(IPv6,ICMP6) | Kod = 0 | Suma kontrolna | |||||||||||||||||||||||||||||
Identyfikator | Numer sekwencji | ||||||||||||||||||||||||||||||
Ładunek |
- Identyfikator i numer sekwencyjny może być używany przez klienta skojarzyć każde żądanie echa z replice.
Ładunek
Ładunek pakietu jest zazwyczaj wypełniony znakami ASCII , co pokazuje wynik narzędzia tcpdump w ostatnich 32 bajtach poniższego przykładu (po ośmiobajtowym nagłówku ICMP zaczynającym się od 0x0800 ):
16:24:47.966461 IP (tos 0x0, ttl 128, id 15103, offset 0, flagi [brak], proto: ICMP (1), długość: 60) 192.168.146.22 > 192.168.144.5: żądanie echa ICMP, id 1, seq 38, długość 40 0x0000: 4500 003c 3aff 0000 8001 5c55 c0a8 9216 E..<:.....\U.... 0x0010: c0a8 9005 0800 4d35 0001 0026 6162 6364 ......M5...&abcd 0x0020: 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst 0x0030: 7576 7761 6263 6465 6667 6869 uvwabcdefghi
Ładunek może zawierać znacznik czasu wskazujący czas transmisji i numer sekwencji, których nie ma w tym przykładzie. Pozwala to pingowi obliczyć czas podróży w obie strony w sposób bezstanowy bez konieczności rejestrowania czasu transmisji każdego pakietu.
Ładunek może również zawierać magiczny pakiet dla protokołu Wake-on-LAN , ale w tym przypadku minimalny ładunek jest dłuższy niż pokazany. Echo Prośba zwykle nie otrzyma żadnej odpowiedzi, jeśli gospodarz spał w stan hibernacji, ale gospodarz wciąż budzi się ze stanu uśpienia, jeśli jego interfejs jest skonfigurowany do akceptowania budzenia żądań. Jeśli host jest już aktywny i skonfigurowany tak, aby zezwalać na odpowiedzi na przychodzące pakiety ICMP Echo Request , zwrócona odpowiedź powinna zawierać ten sam ładunek. Można to wykorzystać do wykrycia, że zdalny host został skutecznie wybudzony, poprzez powtórzenie nowego żądania z pewnym opóźnieniem, aby umożliwić hostowi wznowienie usług sieciowych. Jeśli host po prostu spał w stanie niskiego poboru mocy, pojedyncze żądanie obudzi tego hosta na tyle, aby usługa Echo Reply mogła natychmiast odpowiedzieć, jeśli ta usługa została włączona. Host nie musi całkowicie wybudzać wszystkich urządzeń i po krótkim opóźnieniu może powrócić do trybu niskiego zużycia energii. Taka konfiguracja może być wykorzystana do uniknięcia przejścia hosta w stan hibernacji, ze znacznie dłuższym opóźnieniem wybudzenia, po pewnym czasie w trybie niskiego poboru mocy.
Luki bezpieczeństwa
Aby przeprowadzić atak typu „odmowa usługi” , osoba atakująca może jak najszybciej wysłać żądania ping, prawdopodobnie przytłaczając ofiarę żądaniami echa ICMP. Ta technika nazywana jest ping flood .
Żądania ping do wielu adresów, ping sweeps , mogą być użyte do uzyskania listy wszystkich hostów w sieci.
Zobacz też
Bibliografia
Dalsza lektura
- Dyson, Peter (1995). Opanowanie systemu OS/2 Warp . Sybex . Numer ISBN 978-0782116632.
- Jan Paweł Mueller (2007). Administracja Windows w wierszu poleceń dla Windows Vista, Windows 2003, Windows XP i Windows 2000 . John Wiley i Synowie . Numer ISBN 978-0470165799.
- McElhearna, Kirka (2006). Wiersz poleceń systemu Mac OS X: Unix pod maską . John Wiley i Synowie . Numer ISBN 978-0470113851.
Zewnętrzne linki
- Instrukcja obsługi poleceń administracyjnych systemu Solaris 10 –
- Podręcznik menedżera systemu FreeBSD –
- Linux programisty Podręcznik - Administracja i uprzywilejowane Polecenia -
- ping | Dokumenty Microsoft