PING(8) iputils PING(8) NAZWA ping - wysyla pakiety ICMP ECHO_REQUEST do stacji sieciowych SKLADNIA ping [-aAbBdCDfhHLnOqrRUvV46] [-c liczba] [-e identyfikator] [-F etykieta-przeplywu] [-i interwal] [-I interfejs] [-l liczba-pakietow] [-m znacznik] [-M opcja-pmtudisc] [-N opcja-nodeinfo] [-w limit] [-W czas-oczekiwania] [-p wzorzec] [-Q tos] [-s rozmiar-pakietu] [-S sndbuf] [-t ttl] [-T opcja-znacznika-czasu] [hop...] {cel} OPIS Program ping uzywa obowiazkowego datagramu protokolu ICMP o nazwie ECHO_REQUEST, wywolujacego ICMP ECHO_RESPONSE od stacji lub bramy sieciowej. Datagramy ECHO_REQUEST (,,pingi") skladaja sie z naglowka IP oraz ICMP, za ktorymi nastepuje struct timeval oraz okreslona liczba bajtow wypelnienia, uzywanych do wypelnienia pakietu. ping dziala z IPv4 oraz IPv6. Mozna wymusic uzywanie jednego z nich opcja -4 lub -6. ping moze wysylac rowniez Node Information Queries (RFC4620) IPv6. Niedozwolone moga byc przeskoki, poniewaz trasowanie zrodel IPv6 zostalo oznaczone jako przestarzale (RFC5095). OPCJE -4 Uzywa wylacznie IPv4. -6 Uzywa wylacznie IPv6. -a Ping dzwiekowy. -A Ping adaptowalny. Interwaly pomiedzy poszczegolnymi pakietami dostosowuja sie do czasu krazenia w sieci, dzieki czemu w sieci nie pojawi sie efektywnie wiecej niz jeden pakiet, na ktory nie udzielono odpowiedzi (lub wiecej, jesli ustawiono liczbe-pakietow). Minimalny interwal wynosi 2 milisekundy; wiecej informacji w opisie opcji -i. W przypadku sieci z niskim RTT jest to de facto odpowiednik szybkiego pingowania. -b Pozwala na wysylanie pingow na adresy rozgloszeniowe. -B Nie pozwala programowi ping zmieniac zrodlowego adresu wysylanych pakietow. Adres jest przypisywany do wyboru dokonanego przy starcie programu. -c liczba Konczy po wyslaniu liczby pakietow ECHO_REQUEST. Z podanym limitem program ping czeka na liczbe pakietow ECHO_RESPONSE, az do czasu uplyniecia limitu. -C Wywoluje wywolanie systemowe connect() po utworzeniu gniazda. -d Ustawia opcje SO_DEBUG na uzywanym gniezdzie. Ta opcja gniazda nie jest uzywana przez jadro Linux. -D Wypisuje znacznik czasowy (w czasie uniksa + mikrosekundy jak w gettimeofday) przed kazdym wierszem. -e identyfikator Ustawia pole identyfikacyjne ECHO_REQUEST. Wartosc 0 wymusza uzycie surowych gniazd (nieobslugiwane w gniazdach datagramowych ICMP). Wartosc pola mozna wypisac przy uzyciu opcji -v. -f Tryb szybkiego pingowania (,,zalania" pakietami). Dla kazdego wyslanego ECHO_REQUEST wypisywana jest kropka ,,.", a dla kazdego odebranego ECHO_REPLY jedna kropka jest kasowana. Daje to dynamiczny obraz zmian liczby opuszczonych pakietow. Jesli nie podano interwalu, jest on ustawiany na zero i pakiety sa wysylane tak szybko, jak powracaja lub 100 razy na sekunde, w zaleznosci od tego, ktora opcja produkuje wiecej pakietow. Tylko uzytkownik z uprawnieniami administratora moze jej uzywac z zerowym interwalem. -F etykieta-przeplywu Tylko IPv6. Przypisuje i ustawia 20-bitowa etykiete przeplywu (szesnastkowo) w pakietach zadania odpowiedzi. Jesli wartosc wynosi zero, jadro przypisuje losowa etykiete przeplywu. -h Wyswietla pomoc. -H Wymusza translacje nazw DNS dla wyjscia. Przydatne przy celach numerycznych lub z opcja -f, ktora domyslnie go nie przeprowadza. Przeslania ustawiona wczesniej opcje -n. -i interwal Czeka interwal sekund pomiedzy wyslaniem kolejnych pakietow. Dozwolona jest liczba rzeczywista, z kropka jako znakiem oddzielajacym czesc dziesietna (niezaleznie od ustawien jezykowych). Domyslnie czeka sie jedna sekunde lub - w trybie szybkiego pingowania - wcale. Jedynie uzytkownik z uprawnieniami administratora moze ustawic interwal mniejszy niz 0.2 ms. Ping grupowy (multicast) i rozgloszeniowy (broadcast) ma jeszcze scislejszy limit dla zwyklego uzytkownika: 1 sekunda. -I interfejs Interfejs moze byc adresem, nazwa interfejsu lub nazwa VRF (ang. Virtual Routing and Forwarding). Jesli interfejs jest adresem, ustawia sie w ten sposob adres zrodlowy okreslonego adresu interfejsu. Jesli interfejs jest nazwa interfejsu, ustawia interfejs zrodlowy na podany interfejs. Jesli interfejs jest nazwa VRF, kazdy pakiet jest trasowany za pomoca odpowiadajacej tabeli trasowania, w takim przypadku mozna podac opcje -I wielokrotnie, aby okreslic adres zrodlowy. UWAGA: W przypadku IPv6, przy wykonywaniu pinga do adresu segmentowego (ang. link-local), mozna okreslic lacza (notacja ,,%" w celu lub ta opcja), lecz nie jest to juz obecnie wymagane. -L liczba-pakietow Jesli podana jest liczba-pakietow, ping wysyla tyle pakietow, nie czekajac na odpowiedz, po czym przechodzi do normalnego trybu dzialania. Tylko uzytkownik z uprawnieniami administratora moze wybrac wiecej niz 3 pakiety. -L Uniemozliwia powracanie zapetlonych pakietow grupowych (multicast). Opcja ta ma znaczenie jedynie gdy adresem docelowym jest adres grupowy. -m znacznik Uzywa znacznika do oznaczenia wychodzacych pakietow. Jest to przydatne w wielu przypadkach dotyczacych jadra, takich jak uzywanie zasad trasowania do wybrania okreslonego przetwarzania danych wychodzacych. -M opcja-pmtudisc Wybiera strategie Path MTU Discovery (badania MTU sciezki). opcja-pmtudisc moze byc jedna z nastepujacych: do (ustawia flage flage DF, ale jest przedmiotem sprawdzen PMTU jadra, zbyt duze pakiety beda odmawiane), want (wykonuje badanie MTU sciezki, nastepuje lokalna fragmentacja gdy rozmiary pakietow sa znaczne) probe (ustawia flage DF i pomija sprawdzenia PMTU, przydatne przy sondowaniu) lub dont (nie ustawia flagi DF). -N opcja-nodeinfo Tylko IPv6. Wysyla IPv6 Node Information Queries (RFC4620), zamiast Echo Request. Wymagany jest przywilej (ang. capability) CAP_NET_RAW. help Pokazuje pomoc do obslugi NI. nazwa Zapytania nazw wezlow. ipv6 Zapytania adresow IPv6. Istnieje kilka flag dotyczacych wylacznie IPv6. ipv6-global Zadania adresow globalnych IPv6. ipv6-sitelocal Zadania adresow lokalnych IPv6. ipv6-linklocal Zadania adresow segmentowych dla lacza IPv6. ipv6-all Zadanie adresow IPv6 na innych interfejsach. ipv4 Zadanie adresow IPv4. Istnieje jedna flaga dotyczaca wylacznie IPv4. ipv4-all Zadanie adresow IPv4 na innych interfejsach. subject-ipv6=adres-ipv6 Przedmiotowy adres IPv6. subject-ipv4=adres-ipv4 Przedmiotowy adres IPv4. subject-name=nazwa-wezla Przedmiotowa nazwa. Jesli zawiera wiecej niz jedna kropke, zaklada sie ze jest to pelna, jednoznaczna nazwa domenowa (FQDN). subject-fqdn=nazwa-wezla Przedmiotowa nazwa. Zawsze zaklada sie ze jest to pelna, jednoznaczna nazwa domenowa (FQDN). -n Tylko wyjscie numeryczne. Nie beda dokonywane proby odczytania nazw symbolicznych adresow stacji (brak odwrotnej translacji DNS). Jest to zachowanie domyslne dla celow numerycznych oraz z opcja -f. Przeslania zdefiniowana wczesniej opcje -H. -O Zglasza biezaca odpowiedz ICMP ECHO przed wysylaniem nastepnego pakietu. Jest to przydatne razem ze znacznikiem czasu -D do zapisywania wyniku programu do pliku diagnostycznego w celu wyszukania brakujacych odpowiedzi. -p wzorzec Mozna podac do 16 bajtow ,,wypelnienia" wysylanego pakietu. Jest to przydatne do diagnozowania w sieci problemow zwiazanych z danymi. Np. -p ff spowoduje wysylanie pakietu wypelnionego jedynkami. -q Ciche wyjscie. Poza wierszami podsumowania na starcie/koncu nic nie jest wyswietlane. -Q tos Ustawia bity zwiazane z funkcja Quality of Service (jakosc uslugi). tos moze byc liczba dziesietna (tylko ping) lub szesnastkowa. W RFC2474, pola te sa interpretowane jako osmiobitowe Differentiated Service (DS), skladajace sie z : bitow 0-1 (2 najnizsze bity) oddzielnych danych i bity 2-7 (najwyzsze 6 bitow) Differentiated Services Codepoint (DSCP). W RFC2481 i RFC3168 bity 0-1 sa uzywane do ECN. Historycznie (RFC1349, zastapione przez RFC2474) byly one interpretowane jako: bit 0 (najnizszy) - zarezerwowany (obecnie: kontrola ograniczenia przesylu), 1-4 jako Type of Service (typ uslugi), a bity 5-7 (najwyzsze) jako Precedence (pierwszenstwo). -r Pomija normalne tabele trasowania i wysyla pakiety bezposrednio do stacji w przylaczonej sieci. Jesli stacja nie jest w sieci podlaczonej bezposrednio, zwracany jest blad. Opcja ta moze byc uzywana do pingowania stacji lokalnej poprzez interfejs, przez ktory nie ma trasy, o ile uzyto rowniez opcji -I. -R Tylko program ping. Nagrywa trase. Zawiera w pakiecie ECHO_REQUEST opcje RECORD_ROUTE i wyswietla bufor trasy zwroconych pakietow. Prosze zauwazyc, ze naglowek IP wystarcza jedynie na 9 takich tras. Wiele stacji ignoruje lub zarzuca te opcje. -s rozmiar-pakietu Okresla liczbe wysylanych bajtow danych. Domyslna wartoscia jest 56, co tlumaczy sie na 64 bajty ICMP po polaczeniu z 8 bajtami naglowka ICMP. -S sndbuf Ustawia sndbuf (bufor wysylania) gniazda. Jesli nie okreslono dokladniej, buforowany jest nie wiecej niz jeden pakiet. -t ttl Tylko ping. Ustawia TTL (IP Time to Live). -T opcja-znacznika-czasu Ustawia specjalne opcje znacznika czasu IP. Opcja-znacznika-czasu moze przyjac jedna z nastepujacych wartosci: tsonly (tylko znaczniki czasu), tsandaddr (znaczniki czasu i adresy) lub tsprespec stacja1 [stacja2 [stacja3 [stacja4]]] (wstepnie okreslone przeskoki znacznika czasu). -U Wypisuje pelne opoznienie uzytkownik-uzytkownik (stare zachowanie). ping wypisuje zwykle czas podrozy pakietu w sieci, ktory moze sie roznic np. ze wzgledu na bledy DNS. -v Wyjscie szczegolowe. Nie wstrzymuje odpowiedzi DUP przy pingowaniu adresow grupowych (multicast). -V Wyswietla informacje o wersji i konczy dzialanie. -w limit Okresla czas (w sekundach) po jakim ping zakonczy prace niezaleznie od liczby wyslanych czy odebranych pakietow. W takim przypadku ping nie wychodzi po liczbie wyslanych pakietow - czeka albo na miniecie limitu albo na liczbe otrzymanych odpowiedzi lub tez na jakis sygnal o bledzie z sieci. -W czas-oczekiwania Czas oczekiwania na odpowiedz, w sekundach. Opcja ta wplywa wylacznie na czas oczekiwania w razie braku jakiejkolwiek odpowiedzi, w przeciwnym razie ping czeka na dwa RTT. Dozwolona jest liczba rzeczywista, z kropka jako znakiem oddzielajacym czesc dziesietna (niezaleznie od ustawien jezykowych). 0 oznacza czas nieograniczony. Przy uzywaniu pinga do izolowania bledow, nalezy go najpierw uruchomic na komputerze lokalnym, by sprawdzic czy lokalny interfejs sieciowy jest wlaczony i czy dziala. Potem nalezy ,,pingowac" coraz to dalsze stacje i bramki. Obliczane sa czasy podrozy i statystyki utraty pakietow. Jesli odbierane sa pakiety zduplikowane, nie sa one wlaczane do obliczen strat pakietow, choc ich czas podrozy jest uzywany do obliczania minimalnego/sredniego/maksymalnego czasu podrozy. Standardowe odchylenie populacji (mdev) to przecietna wartosc, o jaka kazdy ping RTT rozni sie od sredniego RTT. Im wyzsze jest mdev, tym bardziej zmienne jest RTT (w czasie). Przy duzej zmiennosci RTT beda wystepowac problemy szybkosci przy duzych transferach (beda zajmowaly wiecej czasu, niz jest to scisle potrzebne, jako ze zmiennosc doprowadzi w koncu do koniecznosci oczekiwania przez wysylajacego na potwierdzenia) oraz jakosc rozmow VoIP bedzie przecietna do miernej. Po wyslaniu (i otrzymaniu) podanej liczby pakietow lub po przerwaniu programem SIGINT, wyswietlane jest zwiezle podsumowanie. Mozna tez pozyskac biezace statystyki z krotszego okresu, bez przerywania procesu, sygnalem SIGQUIT. Program ten jest przeznaczony do testowania sieci, pomiarow i zarzadzania. Z powodu obciazenia, jakie moze wywolac w sieci, niemadre jest uzywanie pinga podczas normalnych operacji z zautomatyzowanych skryptow. STATUS ZAKONCZENIA Jesli ping nie otrzyma w ogole pakietow odpowiedzi zakonczy sie z kodem 1. Jesli podano liczbe pakietow oraz limit i sa one mniejsze niz liczba pakietow otrzymanych po osiagnieciu limitu kodem zakonczenia rowniez bedzie 1. W przypadku innego bledu program wychodzi z kodem 2. W przeciwnym wypadku konczy sie z kodem 0. W ten sposob mozna na podstawie kodu zakonczenia sprawdzic czy stacja odpowiada, czy tez nie. CELE ADRESOW SEGMENTOWYCH IPV6 Przy IPv6, gdy adresem docelowym jest adres segmentowy (ang. link-local) i ping uzywa gniazd datagramowych ICMP, konieczne jest podanie interfejsu wyjsciowego. Gdy ping uzywa gniazd surowych, nie jest scisle konieczne podanie interfejsu wyjsciowego, ale powinno sie to zrobic, aby uniknac wieloznacznosci, gdy wystepuje wiele mozliwych interfejsow wyjsciowych. Istnieja dwa sposoby okreslenia interfejsu wyjsciowego: o uzywajac notacji % Po adresie docelowym dolacza sie % i nazwe interfejsu wyjsciowego lub indeks interfejsu (ifindex), przykladowo: ping fe80::5054:ff:fe70:67bc%eth0 ping fe80::5054:ff:fe70:67bc%2 o za pomoca opcji -I Stosujac gniazda datagramowe ICMP, metoda ta jest obslugiwana od nastepujacych wersji jadra: 5.17, 5.15.19, 5.10.96, 5.4.176, 4.19.228, 4.14.265. Nie jest jednak obslugiwana w bilbiotece libc musl. SZCZEGOLY PAKIETU ICMP Naglowek IP bez opcji ma 20 bajtow. Pakiet ICMP ECHO_REQUEST zawiera dodatkowych 8 bajtow naglowka ICMP, za ktorymi nastepuje okreslona ilosc danych. Gdy podany jest rozmiar-pakietu, to okresla on rozmiar dodatkowego blokow danych (domyslnie 56). Tak wiec ilosc danych znajdujacych sie wewnatrz pakietu IP typu ICMP ECHO_REPLY jest zawsze 8 bajtow wieksza niz zadana ilosc danych (naglowek ICMP). Jesli rozmiar danych ma wielkosc przynajmniej struktury timeval, ping uzywa pierwszych 8 bajtow do wlaczania znacznika czasowego, ktorego uzywa do obliczen czasow podrozy. Jesli podano mniej niz 8 bajtow wypelnienia, nie sa podawane czasy podrozy. ZDUPLIKOWANE I USZKODZONE PAKIETY Program ping zglasza pakiety uszkodzone i zduplikowane. Pakiety zduplikowane nigdy nie powinny sie pojawiac i prawdopodobnie sa powodowane przez nieprawidlowe retransmisje poziomu polaczenia (link-level). Moga sie one pojawiac w wielu sytuacjach i rzadko sa dobrym znakiem, choc obecnosc niskiej liczby duplikatow nie musi byc zawsze powodem alarmu. Pakiety uszkodzone sa oczywiscie powazna przyczyna alarmu i czesto wskazuja na uszkodzenie sprzetu na drodze pakietu ping (w sieci lub w komputerze). KOLIZJE IDENTYFIKATOROW W przeciwienstwie do TCP i UDP unikatowo identyfikujacych odbiorce do dostarczenia danych, ICMP uzywa pola identyfikatora (ID) do celow identyfikacji. Z tego wzgledu, jesli na tym samym komputerze, w tym samym czasie, istnieja dwa procesy ping uzywajace tego samego ID, odpowiedz echo moze trafic do niewlasciwego odbiorcy. To znany problem, ze wzgledu na ograniczony rozmiar 16-bitowego pola ID. Jest to historyczne ograniczenie protokolu, ktorego nie da sie w tym momencie naprawic, chyba ze ID zostalby zakodowany we fragmencie payload pakietu ping. ping wypisuje blad DIFFERENT ADDRESS i utrata pakietow jest ujemna. ping uzywa identyfikatora procesu (PID) do pozyskania unikatowego numeru. Domyslna wartoscia /proc/sys/kernel/pid_max jest 32768. W systemach intensywnie korzystajacych z programu ping, oraz przy pid_max wiekszym od 65535 kolizje sa nieuniknione. UZYWANIE ROZNYCH WZORCOW DANYCH Poziom (inter)sieci nigdy nie powinien traktowac pakietow odmiennie w zaleznosci od danych zawartych w czesci danych. Niestety, problemy zalezne od danych, czasem pojawiaja sie w sieciach i pozostaja dlugo niezauwazane. W wielu przypadkach konkretny wzorzec powodujacy problemy jest czyms, co nie posiada wystarczajacej liczby ,,zmian", np. jest samymi jedynkami lub samymi zerami, lub wzorcem na samym krancu, prawie wypelnionym zerami. Niekoniecznie jednak musi wystarczyc podanie wzorca z samymi zerami w wierszu polecen, gdyz interesujacy wzorzec jest na poziomie polaczenia i zwiazek miedzy tym co sie wpisze, a tym co transmituje kontroler moze byc zlozony. Znaczy to, ze jesli wystepuje problem zalezny od danych, to bedzie to wymagalo wielu testow do jego izolacji. Jesli ma sie szczescie, mozna znalezc plik, ktory nie moze byc przeslany przez siec lub ktory wymaga duzo wiecej czasu do przeslania niz inne podobnej dlugosci pliki. Mozna nastepnie taki plik przetestowac w poszukiwaniu powtarzalnych wzorcow z uzyciem opcji -p programu ping. SZCZEGOLY TTL Wartosc TTL pakietu IP reprezentuje maksymalna liczbe routerow IP, ktora pakiet moze minac nim zostanie wyrzucony. W obecnej sytuacji, mozna oczekiwac ze kazdy router internetowy obnizy wartosc TTL o jeden. Pole TTL pakietu TCP moze przyjac rozne wartosci. Maksymalna mozliwa wartosc tego pola wynosi 255, a zalecana poczatkowa: 64. Wiecej informacji znajduje sie w rozdziale ,,TCP/Lower-Level Interface" w RFC9293. W normalnym dzialaniu, ping wypisuje wartosci TTL odbieranych pakietow. Gdy system zdalny otrzymuje pakiet ping, moze on zrobic jedna z trzech rzeczy z polem TTL: o Nie zmienic go; jest to wlasciwosc systemow Berkeley Unix przed wydaniem 4.3BSD Tahoe. W tym wypadku wartosc TTL odebranego pakietu wyniesie 255 minus liczba routerow na trasie podrozy. o Ustawic ja na 255: jest to wlasciwosc obecnego Berkeley Unix. W tym wypadku wartosc TTL odebranego pakietu wyniesie 255 minus liczbe routerow na trasie od systemu zdalnego do stacji pingujacej. o Ustawic na inna wartosc. Niektore komputery uzywaja dla pakietow ICMP tej samej wartosci co dla pakietow TCP, np. 30 lub 60. Inne moga uzywac jeszcze bardziej abstrakcyjnych wartosci. USTERKI o Wiele stacji i bram ignoruje opcje RECORD_ROUTE. o Maksymalna dlugosc naglowka IP jest zbyt mala dla calkowitej uzytecznosci opcji w rodzaju RECORD_ROUTE. Jednak nie mozna z tym praktycznie nic zrobic. o Szybkie pingowanie nie jest ogolnie zalecanie, a w szczegolnosci pingowanie adresu rozgloszeniowego powinno byc wykonywane w scisle kontrolowanych warunkach. ZOBACZ TAKZE ip(8), ss(8). HISTORIA Komenda ping pojawila sie w 4.3BSD. Niniejsza wersja jest jej nastepca charakterystycznym dla Linuksa. Wedlug stanu na wersje s20150815, plik binarny ping6 juz nie istnieje. Zostal zlaczony z ping. Utworzenie dowiazania symbolicznego nazwanego ping6 wskazujacego na ping zapewni te sama funkcjonalnosc jak wczesniej. BEZPIECZENSTWO ping wymaga do wykonania przywileju (ang. capability) CAP_NET_RAW 1) jesli program jest uzywany do zapytan innych niz echo (zob. opcje -N) lub jesli pole identyfikacyjne ustawiono na 0 do ECHO_REQUEST (zob. -e) albo 2) jesli jadro nie obsluguje gniazd datagramowych IMMP albo 3) jesli uzytkownik nie moze tworzyc gniazda echo ICMP. Program moze byc uzywany z ustawieniem ID roota podczas wykonania (suid). DOSTEPNOSC ping jest czescia pakietu iputils. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . iputils 20240117 PING(8)