Program który robi „Ping” i kilka słów o pingowaniu

Ping to banalne (z pozoru) narzędzie, które zna praktycznie każdy kto choć raz sprawdzał czy gdzieś na innym końcu kabla jest coś z podobnie skonfigurowanym interfejsem. Dzięki prostocie działania i chwytliwej nazwie stał się jedynym słusznym wyznacznikiem dostępności maszyny w sieci. Po raz pierwszy Ping został zaimplementowany w Unix’ie prawie 30 lat temu, a nazwę zawdzięcza dźwiękowi, który wydaje pracujący sonar. Metoda działania również przypomina tą z urządzenia echolokacyjnego. Do działania wykorzystuje protokół ICMP (3. warstwa modelu OSI), przeznaczonego do wysyłania komunikatów diagnostycznych w  sieciach. Zasada działania jest prosta, ping wysyła komunikat echo request z adresem IP celu, a w zamian dostaje echo reply jeżeli urządzenie jest dostępne lub komunikat błędu jeżeli nie.
Teraz trochę praktyki na przykładzie windowsowej implementacji ping’a. Sam program najlepiej odpalić spod wiersza poleceń. Wpisanie po prostu komendy ping z adresem IP lub nazwą celu odpali pingowanie na domyślnych parametrach i to zadowoli zdecydowaną większość jego użytkowników.

Pójdźmy jednak nieco dalej, ponieważ możemy jeszcze skorzystać z kilku pożytecznych przełączników, wstawiamy je pomiędzy komendą, a adresem celu:
-t – wysyła zapytania do chwili kiedy sami nie przerwiemy (CTRL + C), jeżeli chcemy podejrzeć bieżące wyniki pingowania wcisnąć możemy CTRL+Break
-a (cel określamy adresem IP) – ping spróbuje przypisać nazwę do zadanego adresu IP, przydaje się gdy chcemy dowiedzieć sie jakie urządzenie kryje się za adresem IP
-l – określamy wielkość zapytania ping. Może okazać się pomocne gdy podejrzewamy niestabilność połączenia, często wtedy małe pakiety są wysyłane bez problemu, większe natomiast nie docierają do celu. Ten przełącznik warto używać z następnym
-f – zapobiega fragmentowaniu pakietów przez routery
-i – określa maksymalną liczbę routerów przez, którą może przejść pakiet w poszukiwaniu celu
-r – określamy liczbę wysłanych zapytań
-w – określa czas przez który ping czekał będzie na odpowiedź od hosta, po jego upływie echo reply nie będzie przyjęty

Pamiętajcie jednak, że wyniki zastosowania ping’a nie służą do diagnozowania jakości połączenia sieciowego, a przynajmniej nie mogą być jedynym dowodem na problem z łączem lub w obrębie sieci. Protokół ICMP jako ten służący jedynie do diagnostyki prawie nigdy nie ma pierwszeństwa w drodze do celu, bardziej priorytetyzowany jest ruch użyteczny czyli TCP i UDP. Podczas dużego obciążenia sieci QoS potrafi odrzucać nawet 80% pakietów ICMP, aby zapewnić poprawną pracę łącza. Poza tym ustawienia takie stosuję się aby zapobiec prostym atakom DoS np. ping flood. Więc jeżeli kiedykolwiek zgłaszać będziecie problem z łączem lub połączeniem podeprzyjcie się innymi dowodami niż tylko ping testem. Jeszcze małe ostrzeżenie, gdy będziemy naprawdę upierdliwi dla naszego dostawcy lub administratora i zwracali się za każdym razem gdy czas odpowiedzi na ping wydłuży się o kilka ms, możemy spodziewać się szybkiej naprawy problemu. Protokół ICMP wyląduje na samym szczycie kolejek QoS dla naszego łącza i wtedy będziemy cieszyć się naprawdę niskimi opóźnieniami 😉 (dzięki za historię Szymon).

Czasem potrzebujemy sprawdzić dostępność urządzenia za pomocą skryptu. Można wtedy ping wywołać z wiersza poleceń i odczytać wynik, ale jest to dość nieeleganckie i niezbyt dobrze wygląda (eh te wyskakujące czarne okienka). Lepiej w takim przypadku skorzystać z WMI i użyć klasy Win32_PingStatus, która pozwala na to samo co tradycyjny ping, a wynik dostajemy w prostszej i łatwo obrabialnej postaci.

Na koniec ciekawostka z pogranicza security IT. Ping w swojej długiej karierze służył także jako narzędzie ataków DoS. Oprócz niezbyt wyszukanego ping flood, polegającego na zasypaniu celu jak największą ilością echo request, pojawiła się też bardziej finezyjna metoda  W czasach kiedy na komputerach królował Win95 i WinNT został opracowany „atak” zwany Ping of death. Opierał się na stworzeniu pakietu ICMP zawierającego więcej niż 65535 bajtów. Nie dało się wysyłać tak dużych pakietów, ale dzięki procesowi fragmentacji pakietów podczas przesyłania i ponownego ich składania na docelowym urządzeniu (dodatkowe bajty danych) niektóre urządzenia przepełniały sobie bufor i wykonywały nieoczekiwaną operację – zawieszały się, rebootowały itp. W praktyce wystarczyło wywołać komendę ping -l 65510na, którymś z wyżej wymienionych systemów, aby zawiesić docelowy system (jeżeli był podatny). Więcej o samym PoD tutaj.

Znacie jeszcze jakieś inne zastosowania pinga? Wszelkie kreatywne pomysły mile widziane.

Przeczytaj także...

4 komentarze

  1. Jacek Bułyk pisze:

    Jest coś takiego jak pingowanie w pozycjonowaniu stron, które ma przyspieszyć indeksację linków kierujących do strony pozycjonowanej – no ale to z Unixem za wiele wspólnego nie ma 🙂

  2. Łukasz Skalikow pisze:

    Nie do wiary, że da się podać więcej niż jedno zastosowanie PINGA, ale skoro kolega redaktor pyta, to oprócz sprawdzania, czy maszyna jest w sieci i wykonywania ataków DoS (100 lat temu) PING można wykorzystać do mierzenia jakości połączenia sieciowego (czas w ms lub „zgubione pingi”) (..ale to baaaardzo mylna metoda), albo do mierzenia czasu boot’owania maszyny. Jeśli maszyna wirtualna przy restarcie gubi tylko 3 pingi, a fizyczna 50, to mamy w rękach silny argument za WIRTUALIZACJĄ.

  3. Marek pisze:

    Przydałby się jakiś opis/tutorial narzędzia nping 🙂

  4. Anonim pisze:

    Przydało by się coś takiego że kasuje odrazu te które nie są dostępne

Dodaj komentarz