Tcpdump to polecenie używane w różnych systemach operacyjnych Linux (OS), które zbierają pakiety TCP / IP przechodzące przez kartę sieciową. Podobnie jak narzędzie sniffer pakietów, tcpdump może analizować ruch sieciowy, ale także zapisywać go w pliku.
W przeciwieństwie do niektórych poleceń dostarczanych domyślnie przez system operacyjny, może się okazać, że nie można użyć tcpdump, ponieważ nie jest on zainstalowany. Aby zainstalować tcpdump, wykonaj apt-get install tcpdump lub yum zainstaluj tcpdump, w zależności od systemu operacyjnego.
Jak działa Tcpdump
Tcpdump wypisuje nagłówki pakietów w interfejsie sieciowym pasującym do logiki Boolean wyrażenie . Można go również uruchamiać z-w flag, która powoduje zapisanie danych pakietowych w pliku do późniejszej analizy i / lub z-r flagę, która powoduje, że czyta z zapisanego pliku pakietu, a nie czyta pakiety z interfejsu sieciowego. We wszystkich przypadkach pasują tylko pakiety wyrażenie będą przetwarzane przez tcpdump .
Tcpdump będzie, jeśli nie będzie działać z-do flag, kontynuuj przechwytywanie pakietów dopóki nie zostanie przerwany przez sygnał SIGINT (generowany na przykład przez wpisanie znaku przerwania, zwykle Ctrl + C) lub sygnał SIGTERM (zwykle generowany zzabić(1) polecenie); jeśli działa z-do flagę, przechwytuje pakiety, dopóki nie zostanie przerwany sygnałem SIGINT lub SIGTERM lub gdy przetwarzana jest określona liczba pakietów.
Wymienione wyżej przełączniki zostały szczegółowo wyjaśnione w dalszej części tego artykułu.
Gdy tcpdump kończy przechwytywanie pakietów, zgłasza liczbę:
- Pakiety "odebrane przez filtr".
- Znaczenie tego zależy od systemu operacyjnego, w którym pracujesz tcpdump i być może po skonfigurowaniu systemu operacyjnego. Jeśli filtr został określony w wierszu poleceń, w niektórych systemach operacyjnych zlicza pakiety niezależnie od tego, czy zostały dopasowane przez wyrażenie filtru, a na innych zlicza tylko pakiety, które zostały dopasowane przez wyrażenie filtru i zostały przetworzone przez tcpdump.
- Pakiety "upuszczone przez jądro."
- Jest to liczba pakietów, które zostały zrzucone, z powodu braku przestrzeni buforowej, przez mechanizm przechwytywania pakietów w systemie operacyjnym, na którym tcpdump jest uruchomiony, jeśli system operacyjny przekazuje te informacje do aplikacji. Jeśli nie, zostanie to zgłoszone jako 0.
Na platformach obsługujących sygnał SIGINFO, takich jak większość BSD (Berkeley Software Distributions), będzie raportować te liczby, gdy otrzyma sygnał SIGINFO (generowany na przykład przez wpisanie znaku "status", zwykle Ctrl + T) i będzie kontynuować przechwytywanie pakietów.
Kompatybilność z Tcpdump
Odczytywanie pakietów z interfejsu sieciowego za pomocą polecenia tcpdump może wymagać specjalnych uprawnień ( czytanie zapisany plik pakietu nie wymaga takich uprawnień):
- SunOS 3.x lub 4.x z NIT lub BPF: Musisz mieć dostęp do odczytu / dev / nit lub dev / bpf * .
- Solaris z DLPI: Musisz mieć dostęp do odczytu / zapisu do pseudo urządzenia sieciowego, na przykład / dev / le . Co najmniej w niektórych wersjach systemu Solaris nie jest to jednak wystarczające tcpdump przechwycić w trybie mieszanym; w tych wersjach Solaris musisz być rootem, lub tcpdump musi zostać zainstalowany jako root, aby przechwycić w trybie mieszanym. Zauważ, że na wielu (być może wszystkich) interfejsach, jeśli nie przechwycisz w trybie mieszanym, nie zobaczysz żadnych wychodzących pakietów, więc przechwytywanie nie wykonane w trybie rozwodowym może nie być zbyt użyteczne.
- HP-UX z DLPI: Musisz być rootem lub tcpdump musi być zainstalowany jako root.
- IRIX z snoopem: Musisz być rootem lub tcpdump musi być zainstalowany jako root.
- Linux: Musisz być rootem lub tcpdump musi być zainstalowany jako root.
- Ultrix i Digital UNIX / Tru64 UNIX: Każdy użytkownik może przechwytywać ruch sieciowy za pomocą tcpdump . Jednak żaden użytkownik (nawet superużytkownik) nie może przechwytywać w trybie mieszanym w interfejsie, chyba że superużytkownik włączył tryb trybu swobodnego na tym interfejsie, używając pfconfig (8), a żaden użytkownik (nawet superużytkownik) nie może przechwytywać pojedynczego ruchu odbieranego przez lub wysyłanego przez urządzenie w interfejsie, chyba że superużytkownik włączył obsługę trybu kopiowania w tym interfejsie za pomocą pfconfig , więc przydatny przechwytywanie pakietów na interfejsie prawdopodobnie wymaga, aby w tym interfejsie był włączony albo tryb "promiscuous", albo tryb "kopiuj w trybie", albo oba tryby działania.
- BSD: Musisz mieć dostęp do odczytu / dev / bpf * .
Składnia komend Tcpdump
Podobnie jak wszystkie polecenia komputera, polecenie tcpdump działa poprawnie tylko wtedy, gdy składnia jest poprawna:
tcpdump -adeflnNOpqRStuvxX -do liczyć
-DO rozmiar pliku -FA plik
-ja berło -m moduł -r plik
-s snaplen -T rodzaj -U użytkownik -w plik
-MI algo: sekret wyrażenie
Opcje poleceń Tcpdump
Oto wszystkie opcje, których można użyć z poleceniem tcpdump:
- -za: Próba konwersji adresów sieciowych i broadcastowych na nazwy.
- -do: Wyjdź po otrzymaniu liczyć pakiety.
- -DO: Przed zapisaniem surowego pakietu do pliku składowania sprawdź, czy plik jest obecnie większy niż rozmiar pliku i jeśli tak, zamknij bieżący plik składowania i otwórz nowy.Savefiles po pierwszym pliku save będzie miał nazwę określoną przez-w flagę, z numerem po nim, zaczynając od 2 i kontynuując w górę. Jednostki rozmiar pliku to miliony bajtów (1 000 000 bajtów, a nie 1 048 576 bajtów).
- -re: Zrzuć skompilowany kod pasujący do pakietu w czytelnej formie do standardowego wyjścia i zatrzymaj.
- -dd: Zrzutu kodu pasującego do pakietu jakodo fragment programu.
- -ddd: Zrzutu kodu pasującego do pakietu jako liczby dziesiętne (poprzedzone liczbą).
- -mi: Wydrukuj nagłówek poziomu łącza na każdej linii zrzutu.
- -MI: Posługiwać się algo: sekret do odszyfrowywania pakietów ESP IPsec. Mogą to być Algorytmydes-cbc, 3des-cbc, Blowfish-cbc, rc3-cbc, cast128-cbc, lubŻaden. Wartość domyślna todes-cbc. Możliwość odszyfrowywania pakietów jest obecna tylko wtedy, gdy tcpdump został skompilowany z włączoną kryptografią. sekret tekst ASCII dla tajnego klucza ESP. W tej chwili nie możemy przyjąć arbitralnej wartości binarnej. Opcja zakłada RFC2406 ESP, a nie RFC1827 ESP. Ta opcja służy tylko do debugowania, a korzystanie z tej opcji z naprawdę "tajnym" kluczem jest odradzane. Przedstawiając tajny klucz IPsec na linii poleceń, stajesz się widoczny dla innych, przez ps (1) i inne okazje.
- -fa: Drukuj "zagraniczne" adresy internetowe numerycznie, a nie symbolicznie (opcja ta ma na celu obejście poważnych uszkodzeń mózgu na serwerze yp firmy Sun - zwykle wisi na zawsze tłumacząc nielokalne numery internetowe).
- -FA: Posługiwać się plik jako wejście dla wyrażenia filtru. Dodatkowe wyrażenie podane w wierszu poleceń jest ignorowane.
- -ja: Nasłuchiwać berło . Jeśli nie określono, tcpdump przeszukuje listę interfejsów systemowych dla najniższego numeru, skonfigurowanego interfejsu (z wyłączeniem sprzężenia zwrotnego). Krawaty są zrywane przez wybranie najwcześniejszego meczu. W systemach Linux z jądrem 2.2 lub nowszym berło Do przechwytywania pakietów ze wszystkich interfejsów można użyć argumentu "any". Zauważ, że przechwytywanie na "dowolnym" urządzeniu nie będzie wykonywane w trybie mieszanym.
- -l: Ulepsz bufor linii standardowej. Przydatne, jeśli chcesz zobaczyć dane podczas przechwytywania. Na przykład "tcpdump -l | tee dat" lub "tcpdump -l> dat & tail -f dat" ".
- -m: Załaduj definicje modułów SMI MIB z pliku moduł . Ta opcja może być używana kilka razy, aby załadować kilka modułów MIB tcpdump .
- -n: Nie konwertuj adresów hostów na nazwy. Można tego użyć, aby uniknąć wyszukiwania DNS.
- -nn: Nie konwertuj protokołów i numerów portów itp. Na nazwy.
- -N: Nie drukuj kwalifikacji nazw domen dla hostów. Na przykład, jeśli podasz tę flagę, wtedy tcpdump wyświetli "nic" zamiast "nic.ddn.mil".
- -O: Nie uruchamiaj optymalizatora pakietów zgodnego z pakietem. Jest to przydatne tylko wtedy, gdy podejrzewasz błąd w optymalizatorze.
- -p: Nie rób tego zmień interfejs w tryb mieszany. Zauważ, że interfejs może być w trybie mieszanym z innego powodu; stąd "-p" nie może być używane jako skrót od "ether host" {local-hw-addr} lub ether broadcast ".
- -q: Szybkie (ciche) wyjście. Drukuje mniej informacji o protokole, więc linie wyjściowe są krótsze.
- -R: Załóżmy, że pakiety ESP / AH mają być oparte na starej specyfikacji: od RFC1825 do RFC1829. Jeśli określono, tcpdump nie wydrukuje pola zapobiegania powtórce. Ponieważ nie ma pola wersji protokołu w specyfikacji ESP / AH, tcpdump nie można wydedukować wersji protokołu ESP / AH.
- -r: Odczytaj pakiety od plik (który został utworzony za pomocą opcji -w). Standardowe wejście jest używane, jeśli plik jest "-''.
- -S: Wydrukuj bezwzględne, a nie względne numery sekwencji TCP.
- -s: Snarf snaplen bajty danych z każdego pakietu, a nie domyślne 68; w NIT SunOS-a minimum wynosi w rzeczywistości 96. Sześćdziesiąt osiem bajtów jest odpowiednie dla IP, ICMP, TCP i UDP, ale może skracać informacje o protokole z serwera nazw i pakietów NFS (patrz poniżej). Pakiety skrócone z powodu ograniczonej migawki są oznaczone na wyjściu jako "| proto '', gdzie proto jest nazwą poziomu protokołu, w którym nastąpiło obcięcie. Zauważ, że wykonanie większych migawek zwiększa ilość czasu potrzebnego na przetworzenie pakietów i efektywnie zmniejsza ilość buforowania pakietów. Może to spowodować utratę pakietów. Powinieneś ograniczyć snaplen do najmniejszej liczby, która przechwyci informacje dotyczące protokołu, które Cię interesują. Ustawienia snaplen do 0 oznacza użycie wymaganej długości do przechwycenia całych pakietów.
- -T: Wymuś pakiety wybrane przez " wyrażenie "interpretować określone rodzaj . Obecnie znanymi typami sącnfp (Protokół Cisco NetFlow),rpc (Zdalne wywołanie procedury),rtp (Protokół aplikacji w czasie rzeczywistym),rtcp (Protokół sterowania aplikacjami w czasie rzeczywistym),snmp (Simple Network Management Protocol),faktura VAT (Narzędzie Visual Audio) iwb (rozproszony biały zarząd).
- -t: Nie rób tego wydrukuj znacznik czasu na każdej linii zrzutu.
- -tt: Wydrukuj niesformatowany znacznik czasu na każdej linii zrzutu.
- -U: Zrzuca uprawnienia roota i zmienia ID użytkownika na użytkownik i identyfikator grupy do głównej grupy użytkownik .
- Uwaga: Red Hat Linux automatycznie zrzuca uprawnienia do użytkownika "pcap", jeśli nie podano nic innego.
- -ttt: Wydrukuj deltę (w mikrosekundach) między bieżącą a poprzednią linią na każdej linii zrzutu.
- -tttt: Wydrukuj znacznik czasu w formacie domyślnym, postępując według daty na każdej linii zrzutu.
- -u: Wydrukuj niezdefiniowane uchwyty NFS.
- -v: (Nieco więcej) szczegółowe dane wyjściowe. Na przykład drukowany jest czas życia, identyfikacja, całkowita długość i opcje w pakiecie IP. Umożliwia także dodatkowe sprawdzanie integralności pakietów, takie jak weryfikacja sumy kontrolnej nagłówka IP i ICMP.
- -vv: Jeszcze bardziej szczegółowe wyniki. Na przykład dodatkowe pola są drukowane z pakietów odpowiedzi NFS, a pakiety SMB są w pełni zdekodowane.
- -vvv: Jeszcze bardziej szczegółowe wyniki. Na przykład telnetSB … SE opcje są drukowane w całości. Z -X Opcje telnetu są również drukowane w postaci szesnastkowej.
- -w: Napisz surowe pakiety do plik zamiast analizować i drukować je. Można je później wydrukować za pomocą opcji -r. Standardowe wyjście jest używane, jeśli plik jest "-''.
- -x: Wydrukuj każdy pakiet (bez nagłówka poziomu łącza) w hex. Mniejszy z całego pakietu lub snaplen bajty zostaną wydrukowane. Zauważ, że jest to cały pakiet warstwy łącza, więc dla warstw łącza, które obsługują (np. Ethernet), bajty dopełniające będą również drukowane, gdy pakiet wyższej warstwy jest krótszy niż wymagane dopełnienie.
- -X: Podczas drukowania heksadecymalnego wydrukuj także ASCII. Tak więc jeśli-x jest również ustawiony, pakiet jest drukowany w formacie hex / ascii. Jest to bardzo przydatne przy analizie nowych protokołów. Nawet jeśli-x nie jest również ustawiony, niektóre części niektórych pakietów mogą być drukowane w formacie hex / ascii.
- wyrażenie : Wybiera pakiety, które zostaną zrzucone. Jeśli nie wyrażenie jest podana, wszystkie pakiety w sieci zostaną zrzucone. W przeciwnym razie, tylko pakiety, dla których wyrażenie "true" będzie porzucone. The wyrażenie składa się z jednego lub więcej prymitywy. Prymitywy zwykle składają się z ID (imię i nazwisko) poprzedzone co najmniej jednym kwalifikatorem. Istnieją trzy różne rodzaje kwalifikatorów:
- rodzaj : Kwalifikatory mówią, do czego odnosi się nazwa lub numer identyfikacyjny. Możliwe są typygospodarz, netto, iPort- na przykład "host foo", "net 128.3", "port 20". Jeśli nie ma kwalifikatora typu,gospodarz zakłada się.
- reż : Kwalifikatory określają konkretny kierunek przesyłania do i / lub z ID . Możliwe są kierunkisrc, dst, src lub dst isrc i dst (np. "src foo", "dst net 128.3", "src lub dst port ftp-data"). Jeśli nie ma kwalifikatora kanału,src lub dst zakłada się. Dla "zerowych" warstw łącza (tj. Protokołów typu punkt-punkt, takich jak poślizg) przychodzące i wychodzące kwalifikatory mogą być używane do określenia pożądanego kierunku.
- proto : Kwalifikatory ograniczają dopasowanie do określonego protokołu. Możliwe protosy to: eter, fddi, tr, ip, ip6, Arp, rarp, decnet, tcp, iudp- na przykład "ether src foo", "arp net 128.3", "tcp port 21". Jeśli nie ma kwalifikatora proto, zakłada się wszystkie protokoły zgodne z typem. Na przykład "src foo" oznacza "(ip lub arp lub rarp) src foo" (z wyjątkiem tego, że nie ma legalnej składni), "pasek sieci" oznacza "(ip lub arp lub rarp) pasek sieci" i "port 53" oznacza "port (tcp lub udp) 53".
- 'fddi' jest tak naprawdę pseudonimem 'ether'; parser traktuje je tak samo, jak "poziom łącza danych używany w określonym interfejsie sieciowym". Nagłówki FDDI zawierają adresy źródłowe i docelowe Ethernet i często zawierają typy pakietów typu Ethernet, dzięki czemu można filtrować tylko na tych polach FDDI podobnie jak w analogicznych polach Ethernet nagłówki FDDI zawierają również inne pola, ale nie można ich jednoznacznie nazwać w wyrażeniu filtru.
- Podobnie "tr" jest aliasem dla "eteru"; oświadczenia poprzedniego akapitu dotyczące nagłówków FDDI mają również zastosowanie do nagłówków Token Ring.
Oprócz powyższych, istnieją pewne specjalne "prymitywne" słowa kluczowe, które nie podążają za wzorcem:przejście, nadawanie, mniej, większy, i arytmetyka wyrażenia. Wszystkie te zostały opisane poniżej.
Bardziej złożone wyrażenia filtru budowane są za pomocą słówi, lub, inie połączyć prymitywy - na przykład "host foo, a nie port ftp, a nie port ftp-data". Aby zapisać typowanie, identyczne listy kwalifikatorów można pominąć (np. "Tcp dst port ftp lub ftp-data lub domena" jest dokładnie takie samo jak "tcp dst port ftp lub tcp dst port ftp-data lub tcp dst port domain".)
Są to prymitywy dozwolone za pomocą polecenia tcpdump:
- dst host gospodarz
- Prawda, jeśli pole docelowe IPv4 / v6 pakietu to gospodarz , którym może być adres lub nazwisko.
- host src gospodarz
- Prawda, jeśli pole źródłowe pakietu IPv4 / v6 jest gospodarz .
- gospodarz gospodarz
- Prawda, jeśli źródłem jest IPv4 / v6 lub miejsce docelowe pakietu gospodarz . Każde z powyższych wyrażeń hosta może być poprzedzone słowami kluczowymi,ip, Arp, rarp, lubip6, jak w host ip gospodarz (co jest równoznaczne z ether proto ip i host gospodarz).
- Jeśli gospodarz to nazwa z wieloma adresami IP, każdy adres zostanie sprawdzony pod kątem zgodności.
- ether dst ehost
- Prawda, jeśli adres docelowy sieci Ethernet jest ehost . Ehost może być nazwą z / etc / ethers lub liczbą (patrz etery (3N) dla formatu liczbowego).
- ether src ehost
- Prawda, jeśli adres źródła Ethernet jest ehost .
- host ethernetowy ehost
- Prawda, jeśli źródłem jest Ethernet lub adres docelowy ehost .
- przejście gospodarz
- Prawda, jeśli pakiet został użyty gospodarz jako brama (tj. źródło Ethernet lub adres docelowy) gospodarz ale ani źródło IP, ani adres IP nie były gospodarz ).
- Gospodarz musi być nazwą i musi być znaleziony zarówno przez mechanizmy rozpoznawania adresów hosta-nazwy-adresu IP (plik nazwy hosta, DNS, NIS, itp.) jak i przez mechanizm rozpoznawania adresów hosta-adresu-sieci Ethernet (/ etc / ethers, itp.).
- Równoważne wyrażenie to host ethernetowy ehost a teraz host gospodarz , z którego można korzystać zarówno z nazwami, jak i liczbami host / ehost .) Ta składnia nie działa w tej chwili w konfiguracji z obsługą protokołu IPv6.
- dst netto netto
- Prawda, jeśli docelowy adres IPv4 / v6 pakietu ma numer sieciowy netto . Netto może być nazwą z / etc / networks lub numerem sieci (patrz sieci (4) dla szczegółów).
- src net netto
- Prawda, jeśli adres źródłowy pakietu IPv4 / v6 ma numer sieciowy netto .
- netto netto
- Prawda, jeśli źródło IPv4 / v6 lub docelowy adres pakietu ma numer sieci netto .
- netto netto maska maska sieci
- Prawda, jeśli adres IP jest zgodny netto z konkretnym maska sieci . Można kwalifikować za pomocąsrc lubdst. Zauważ, że ta składnia nie jest poprawna dla IPv6 netto .
- netto netto / len
- Prawda, jeśli adres IPv4 / v6 jest zgodny netto z maską sieci len szeroki bit. Można kwalifikować za pomocąsrc lubdst.
- port dst Port
- Prawdziwy, jeśli pakiet to ip / tcp, ip / udp, ip6 / tcp lub ip6 / udp i ma docelową wartość portu Port . The Port może być liczbą lub nazwą używaną w / etc / services (zob tcp (4P) i udp (4P)). Jeśli używana jest nazwa, sprawdzany jest zarówno numer portu, jak i protokół. Jeśli używana jest liczba lub niejednoznaczna nazwa, sprawdzany jest tylko numer portu (np.port dst 513 wydrukuje zarówno ruch tcp / login, jak i udp / who traffic orazdomena portu wyświetli zarówno ruch tcp / domain, jak i udp / domain).
- port src Port
- Prawda, jeśli pakiet ma wartość portu źródłowego Port .
- Port Port
- Prawda, jeśli jest to port źródłowy lub docelowy pakietu Port . Dowolne z powyższych wyrażeń portu może być poprzedzone słowami kluczowymi,tcp lubudp, jak w port tcp src Port , który dopasowuje tylko pakiety tcp, których port źródłowy jest Port .
- mniej długość
- Prawda, jeśli pakiet ma długość mniejszą lub równą długość . Jest to równoważne len <= Długość .
- większy długość
- Prawda, jeśli pakiet ma długość większą lub równą długość . Jest to równoważne len> = Długość .
- ip proto protokół
- Prawda, jeśli pakiet jest pakietem IP (patrz ip (4P)) typu protokołu protokół . Protokół może być liczbą lub jedną z nazw icmp , icmp6 , igmp , igrp , pima , ah , esp , vrrp , udp , lub tcp . Zauważ, że identyfikatory tcp , udp , i icmp są również słowami kluczowymi i muszą być przechwytywane przez ukośnik odwrotny (), który jest w powłoce C. Zauważ, że ten prymityw nie ściga łańcucha nagłówków protokołu.
- protokół ip6 protokół
- Prawda, jeśli pakiet jest pakietem IPv6 typu protokołu protokół . Zauważ, że ten prymityw nie ściga łańcucha nagłówków protokołu.
- protochaina ip6 protokół
- Prawda, jeśli pakiet jest pakietem IPv6 i zawiera nagłówek protokołu z typem protokół w łańcuchu nagłówków protokołu. Na przykład, protokół protokołu ipv6 6 dopasowuje dowolny pakiet IPv6 z nagłówkiem protokołu TCP w łańcuchu nagłówka protokołu. Pakiet może zawierać, na przykład, nagłówek uwierzytelniania, nagłówek routingu lub nagłówek opcji hop-by-hop, pomiędzy nagłówkiem IPv6 a nagłówkiem TCP. Kod BPF emitowany przez ten prymityw jest złożony i nie może być zoptymalizowany przez kod optymalizatora BPF tcpdump , więc może to być nieco powolne.
- protochain ip protokół
- Równoważnyprotochaina ip6 protokół , ale dotyczy to IPv4.
- transmisja ether
- Prawda, jeśli pakiet jest pakietem transmisji Ethernet. The eter słowo kluczowe jest opcjonalne.
- transmisja IP
- Prawda, jeśli pakiet jest pakietem emisji IP. Sprawdza zarówno konwencje emisji zerowych, jak i wszystkich, i wyszukuje lokalną maskę podsieci.
- ether multicast
- Prawda, jeśli pakiet jest pakietem multiemisji Ethernet. The eter słowo kluczowe jest opcjonalne. To jest skrót "ether 0 i 1! = 0'.
- multiemisja IP
- Prawda, jeśli pakiet jest pakietem multiemisji IP.
- ip multicast
- Prawda, jeśli pakiet jest pakietem multiemisji IPv6.
- ether proto protokół
- Prawda, jeśli pakiet jest typu eterowego protokół . Protokół może być liczbą lub jedną z nazw ip , ip6 , Arp , rarp , rozmowa , aarp , decnet , scać , lat , mopdl , moprc , iso , stp , ipx , lub netbeui . Zauważ, że te identyfikatory są również słowami kluczowymi i muszą być przechwytywane przez ukośnik odwrotny ().
- W przypadku FDDI (np.protokół fddi arp") i Token Ring (np."protokół tr arp'), dla większości tych protokołów, identyfikacja protokołu pochodzi z nagłówka Logical Link Control (LLC) 802.2, który jest zwykle ułożony nad nagłówkiem FDDI lub Token Ring.
- Podczas filtrowania większości identyfikatorów protokołów na FDDI lub Token Ring, tcpdump sprawdza tylko pole identyfikatora protokołu nagłówka LLC w tak zwanym formacie SNAP z identyfikatorem jednostki organizacyjnej (OUI) 0x000000 dla enkapsulowanego Ethernetu; nie sprawdza, czy pakiet jest w formacie SNAP z OUI 0x000000.
- Wyjątki są iso , dla którego sprawdza pola DSAP (Destination Service Access Point) i SSAP (Source Service Access Point) nagłówka LLC, stp i netbeui , gdzie sprawdza DSAP nagłówka LLC, oraz rozmowa , gdzie sprawdza pakiet w formacie SNAP z OUI z 0x080007 i eterem Appletalk.
- W przypadku Ethernetu tcpdump sprawdza pole typu Ethernet dla większości tych protokołów; wyjątki są iso , sok roślinny , i netbeui , dla której sprawdza ramkę 802.3, a następnie sprawdza nagłówek LLC, tak jak ma to miejsce w przypadku FDDI i Token Ring; rozmowa , gdzie sprawdza zarówno dla Appletalk etype w ramce Ethernet jak i dla pakietu formatu SNAP, tak jak robi to dla FDDI i Token Ring; aarp , gdzie sprawdza typ apletu ARPetalk w ramce Ethernet lub ramce SNAP 802.2 z OUI 0x000000; i ipx , gdzie sprawdza, czy IPX jest typu w ramce Ethernet, IPX DSAP w nagłówku LLC, 802.3 bez hermetyzacji nagłówka LLC protokołu IPX i IPX w ramce SNAP.
- decnet src gospodarz
- Prawda, jeśli adres źródłowy DECNET jest gospodarz , który może być adresem formularza "10.123" lub nazwą hosta DECNET. Obsługa nazwy hosta DECNET jest dostępna tylko w systemach Ultrix skonfigurowanych do uruchamiania DECNET.
- decnet dst gospodarz
- Prawda, jeśli adres docelowy DECNET jest gospodarz .
- host dekadera gospodarz
- Prawda, jeśli źródłem jest DECNET lub adres docelowy gospodarz .
- ip, ip6, Arp, rarp, rozmowa, aarp, decnet, iso, stp, ipx, netbeui
- Skróty dla ether proto str gdzie str jest jednym z powyższych protokołów.
- lat, moprc, mopdl
- Skróty dla ether proto str gdzie str jest jednym z powyższych protokołów. Zauważ, że tcpdump obecnie nie wie, jak przeanalizować te protokoły.
- vlan vlan_id
- Prawda, jeśli pakiet jest pakietem VLAN IEEE 802.1Q. Jeśli vlan_id jest określony, tylko true, jeśli pakiet ma określone vlan_id . Zauważ, że pierwszyvlan słowo kluczowe napotkane w wyrażenie zmienia przesunięcia dekodujące na pozostałą część wyrażenie przy założeniu, że pakiet jest pakietem VLAN.
- tcp, udp, icmp
- Skróty dla ip proto str lub protokół ip6 str gdzie str jest jednym z powyższych protokołów.
- iso proto protokół
- Prawda, jeśli pakiet jest pakietem OSI typu protokołu protokół . Protokół może być liczbą lub jedną z nazw clnp , esis , lub isis .
- clnp, esis, isis
- Skróty dla iso proto str gdzie str jest jednym z powyższych protokołów. Zauważ, że tcpdump wykonuje niekompletne zadanie przetwarzania tych protokołów.
- expr relop expr
- Prawda, jeśli relacja zachodzi, gdzie relop jest jednym z>, <,> =, <=, =,! = i expr jest wyrażeniem arytmetycznym składającym się ze stałych całkowitych (wyrażonych w standardowej składni C), normalnych operatorów binarnych +, -, *, /, &, |, operatora długości i specjalnych akcesorów danych pakietowych. Aby uzyskać dostęp do danych w pakiecie, użyj następującej składni: proto expr: size .
Proto jest jednym zeter, fddi, tr, ppp, poślizg, połączyć, ip, Arp, rarp, tcp, udp, icmp, lub ip6i wskazuje warstwę protokołu dla operacji indeksu (eter, fddi, tr, ppp, poślizg, ipołączyć wszystkie odnoszą się do warstwy łącza). Zauważ, że tcp, udp , a inne protokoły wyższej warstwy mają zastosowanie tylko do IPv4, a nie IPv6 (zostanie to naprawione w przyszłości). Przesunięcie bajtu, względem wskazanej warstwy protokołu, jest podawane przez expr . Rozmiar jest opcjonalny i wskazuje liczbę bajtów w polu zainteresowania; może to być jeden, dwa lub cztery, a domyślnie jeden. Operator długości, wskazany przez słowo kluczowelen, podaje długość pakietu.
Na przykład, 'ether 0 i 1! = 0"przechwytuje cały ruch multiemisji. Ekspresja 'ip 0 & 0xf! = 5"przechwytuje wszystkie pakiety IP z opcjami. Ekspresja 'ip 6: 2 i 0x1fff = 0"przechwytuje tylko niefragmentowane datagramy i frag zero z pofragmentowanych datagramów. Ta kontrola jest domyślnie stosowana dotcp iudp operacje indeksowe. Na przykład, tcp 0 zawsze oznacza pierwszy bajt TCP nagłówek i nigdy nie oznacza pierwszego bajtu interweniującego fragmentu.
Niektóre przesunięcia i wartości pól mogą być wyrażone jako nazwy, a nie jako wartości numeryczne. Dostępne są następujące przesunięcia pól nagłówka protokołu: icmptype (Pole typu ICMP),icmpcode (Pole kodu ICMP) oraztcpflags (Pole flag TCP).
Dostępne są następujące wartości pól typu ICMP:icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert, icmp-routerersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.
Dostępne są następujące wartości pól flag TCP:tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-urg.
Prymitywy można łączyć, stosując dowolne z poniższych:
- Nawiasowiona grupa prymitywów i operatorów (nawiasy są specjalne dla powłoki i muszą zostać usunięte)
- Negacja ("!"lub"nie')
- Konkatenacja ("&&"lub"i')
- Alternacja ("||"lub"lub')
Negacja ma najwyższy priorytet. Naprzemienność i konkatenacja mają równy priorytet i wiążą się od lewej do prawej. Zwróć uwagę, że jest to wyraźnei tokeny, a nie zestawienia, są wymagane do łączenia.
Jeśli identyfikator jest podany bez słowa kluczowego, przyjmuje się najnowsze słowo kluczowe. Na przykład, nie host vs i as jest skrótem nie host vs i hosta asa. Jednak nie należy tego mylić z nie (host vs lub as).
Argumenty wyrażenia mogą być przekazywane do tcpdump jako jeden argument lub jako wiele argumentów, w zależności od tego, która opcja jest wygodniejsza. Ogólnie rzecz biorąc, jeśli wyrażenie zawiera metaznaki powłoki, łatwiej jest przekazać je jako pojedynczy, cytowany argument. Wiele argumentów jest łączonych spacjami przed ich analizą.
Przykłady Tcpdump
Hosta tcpdump o zachodzie słońca
Powyższe polecenie tcpdump służy do drukowania wszystkich pakietów przybywających lub odlatujących zachód słońca. helios hosta tcpdump i (gorący lub as)
Ten przykład tcpdump służy do drukowania ruchu między helios i albo gorąco lub as. tcpdump ip host asem, a nie helios
Możesz użyć tej komendy tcpdump, aby wydrukować wszystkie pakiety IP pomiędzy as i dowolnego hosta z wyjątkiem helios. tcpdump net ucb-ether
W powyższym przykładzie tcpdump drukuje cały ruch między lokalnymi hostami i hostami w Berkeley. tcpdump 'gateway snup i (port ftp lub ftp-data)'
Ten przykład polecenia tcpdump służy do drukowania całego ruchu FTP przez bramę internetową Snup . Zwróć uwagę, że wyrażenie jest cytowane, aby zapobiec błędnej interpretacji nawiasów przez powłokę. tcpdump ip, a nie net localnet
W powyższym przykładzie tcpdump polecenie wypisuje ruch nie pochodzący ani pochodzący od lokalnych hostów. tcpdump 'tcp tcpflags & (tcp-syn | tcp-fin)! = 0, a nie src i dst net localnet '
W powyższym przykładzie tcpdump polecenie jest używane do drukowania początkowych i końcowych pakietów (pakietów SYN i FIN) każdej konwersacji TCP, która obejmuje nielokalny host. tcpdump 'gateway snup i ip 2: 2> 576'
Powyższe polecenie wydrukuje pakiety IP dłuższe niż 576 bajtów wysłane przez bramkę Snup. tcpdump 'ether 0 i 1 = 0 i ip 16> = 224'
Polecenie tcpdump pokazane powyżej drukuje pakiety IP broadcast lub multicast nie wysyłane przez transmisję Ethernet lub multicast. tcpdump 'icmp icmptype! = icmp-echo i icmp icmptype! = icmp-echoreply "
W tym ostatnim przykładzie tcpdump polecenie wypisuje wszystkie pakiety ICMP, które nie są żądaniami lub odpowiedziami echa (tzn. Nie wysyłają pakietów ping). Moc wyjściowa tcpdump jest zależny od protokołu. Poniżej przedstawiono krótki opis i przykłady większości formatów. Nagłówki poziomów łącza. Jeśli podano opcję "-e", nagłówek poziomu łącza jest drukowany. W sieciach Ethernet drukowane są adresy źródłowe i docelowe, protokół i długość pakietu. W sieciach FDDI przyczyną jest opcja "-e" tcpdump aby wydrukować pole "kontrola ramki", adres źródłowy i docelowy oraz długość pakietu. (Pole 'frame control' reguluje interpretację reszty pakietu.Zwykłe pakiety (takie jak te zawierające datagramy IP) są pakietami "asynchronicznymi", z wartością priorytetu między 0 a 7: na przykład, `async4". Przyjmuje się, że takie pakiety zawierają pakiet 802.2 Logical Link Control (LLC); nagłówek LLC jest drukowany, jeśli jest nie datagram ISO lub tak zwany pakiet SNAP. W sieciach Token Ring powoduje to opcja "-e" tcpdump aby wydrukować pola "kontrola dostępu" i "kontrola ramki", adresy źródłowe i docelowe oraz długość pakietu. Podobnie jak w sieciach FDDI zakłada się, że pakiety zawierają pakiet LLC. Bez względu na to, czy podano opcję "-e", informacje o routingu źródłowym są drukowane dla pakietów kierowanych źródłowo. (N.B .: Poniższy opis zakłada znajomość algorytmu kompresji SLIP opisanego w RFC-1144.) W łączach SLIP drukowany jest wskaźnik kierunku ("I" dla przychodzących, "O" dla wychodzących), typ pakietu i informacje o kompresji. Typ pakietu jest drukowany jako pierwszy. Te trzy typy to ip , utcp , i ctcp . Żadne dalsze informacje o linkach nie są drukowane ip pakiety. W przypadku pakietów TCP identyfikator połączenia jest drukowany zgodnie z typem. Jeśli pakiet jest skompresowany, jego zakodowany nagłówek zostanie wydrukowany. Przypadki specjalne są drukowane jako* S + n i* SA + n , gdzie n to liczba, o którą zmienił się numer porządkowy (lub numer kolejny i potwierdzenie). Jeśli nie jest to przypadek specjalny, drukowane są zero lub więcej zmian. Zmiana jest wskazywana przez U (wskaźnik pilny), W (okno), A (ack), S (numer kolejny) i I (identyfikator pakietu), po którym następuje delta (+ n lub -n) lub nowa wartość (= n). Na koniec drukowana jest ilość danych w pakiecie i skompresowana długość nagłówka. Na przykład poniższy wiersz pokazuje wychodzący skompresowany pakiet TCP z niejawnym identyfikatorem połączenia; wartość potwierdzenia zmieniła się o 6, numer porządkowy o 49, a identyfikator pakietu o 6; są 3 bajty danych i 6 bajtów skompresowanego nagłówka: O ctcp * A + 6 S + 49 I + 6 3 (6)
Pakiety Arp / Rarp. Wyjście Arp / rarp pokazuje typ żądania i jego argumenty. Format ma być zrozumiały. Oto krótka próbka pobrana od początku "rlogin" od gospodarza rtsg do hostowania csam : arp who-ma csam tell rtsgarp reply csam is-at CSAM
Pierwsza linia mówi, że rtsg wysłał pakiet arp pytający o adres Ethernet hosta csam. Csam odpowiada swoim adresem Ethernet (w tym przykładzie adresy Ethernet są pisane małymi literami, a adresy internetowe). Wyglądałoby to mniej zbędne, gdybyśmy to zrobili tcpdump -n : arp who-ma 128.3.254.6 powiedzieć 128.3.254.68Odpowiedź arp 128.3.254.6 is-at 02: 07: 01: 00: 01: c4
Gdybyśmy to zrobili tcpdump -e , fakt, że pierwszy pakiet jest nadawany, a drugi jest punkt-punkt, będzie widoczny: RTSG Broadcast 0806 64: arp who-ma csam tell rtsgCSAM RTSG 0806 64: arp reply csam is-at CSAM
W przypadku pierwszego pakietu, adres źródła Ethernet to RTSG, miejscem docelowym jest adres rozgłoszeniowy Ethernet, pole typu zawierało kodowanie 0806 (typ ETHER_ARP), a całkowita długość wynosi 64 bajty. Pakiety TCP (N.B.: Poniższy opis zakłada znajomość protokołu TCP opisanego w RFC-793.Jeśli nie znasz protokołu, to ani ten opis, ani tcpdump nie będą dla ciebie zbyt przydatne) . Ogólny format linii protokołu TCP: src> dst: flags data-seqno ack okno naglące opcje
Src i dst są źródłowymi i docelowymi adresami IP i portami. Flagi są kombinacją S (SYN), F (FIN), P (PUSH) lub R (RST) lub pojedynczego "." (brak flag). Dane-seqno opisuje część przestrzeni sekwencji objętej danymi w tym pakiecie (patrz przykład poniżej). Ack jest numerem kolejnym kolejnych danych oczekiwanych w innym kierunku na tym połączeniu. Okno jest liczbą bajtów bufora odbiorczego dostępną w innym kierunku na tym połączeniu. Urg wskazuje, że w pakiecie znajdują się "pilne" dane. Opcje są opcje tcp zamknięte w nawiasach ostrych (np. Src, dst, i flagi są zawsze obecni. Pozostałe pola zależą od zawartości nagłówka protokołu tcp pakietu i są wyprowadzane tylko w razie potrzeby. Oto otwierająca część rlogin od hosta rtsg do hostowania csam . rtsg.1023> csam.login: S 768512: 768512 (0) wygrywa 4096 Pierwsza linia mówi, że port TCP 1023 na rtsg wysłał pakiet do portu Zaloguj Się na csam. TheS wskazuje, że SYN flaga została ustawiona. Numer sekwencyjny pakietu to 768512 i nie zawierał żadnych danych. (Notacja jest "pierwsza: ostatnia (nbytes)", co oznacza "numery sekwencji" pierwszy do, ale nie wliczając ostatni, ubiegły, zeszły który jest nbytes bajtów danych użytkownika ".) Nie było potwierdzenia piggy-backed, dostępne okno odbioru miało 4096 bajtów, a opcja max-size-size wymagała mss 1024 bajtów. Csam odpowiada podobnym pakietem, oprócz tego, że zawiera niedopełnione potwierdzenie dla SYN rtsg. Rtsg następnie łączy się z SYN csam. "." oznacza, że nie ustawiono żadnych flag. Pakiet nie zawierał żadnych danych, więc nie ma numeru sekwencji danych. Zauważ, że numer sekwencji ack jest małą liczbą całkowitą (1). Pierwszy raz tcpdump widzi "konwersację" tcp, wypisuje numer sekwencji z pakietu. W kolejnych pakietach konwersacji drukowana jest różnica między numerem sekwencji bieżącego pakietu a tym początkowym numerem sekwencji. Oznacza to, że numery sekwencji po pierwszej mogą być interpretowane jako względne pozycje bajtów w strumieniu danych konwersacji (z pierwszym bajtem danych w każdym kierunku wynoszącym "1"). Opcja "-S" zastąpi tę funkcję, powodując wyprowadzanie oryginalnych numerów sekwencji. W szóstej linii rtsg wysyła csam 19 bajtów danych (bajty od 2 do 20 w stronie rtsg -> csam konwersacji). Flaga PUSH jest ustawiona w pakiecie. W siódmej linii csam mówi, że jest to odebrane dane wysyłane przez rtsg do bajtu, ale nie wliczając bajtu 21. Większość tych danych najwyraźniej znajduje się w buforze gniazd, ponieważ okno odbioru csam ma 19 bajtów mniejszych. Csam wysyła również jeden bajt danych do rtsg w tym pakiecie. W ósmym i dziewiątym wierszu, csam wysyła dwa bajty pilnych, przekazanych danych do rtsg. Jeśli migawka była wystarczająco mała tcpdump nie przechwycił pełnego nagłówka TCP, interpretuje tyle nagłówka, ile może, a następnie zgłasza "| tcp "", aby wskazać, że reszty nie można interpretować. Jeśli w nagłówku znajduje się fikcyjna opcja (jedna o długości zbyt małej lub poza końcem nagłówka), tcpdump zgłasza to jako " zły opt i nie interpretuje żadnych dalszych opcji (ponieważ nie można określić, od czego zaczynają). Jeśli długość nagłówka wskazuje, że opcje są obecne, ale długość datagramu IP nie jest wystarczająco długa, aby opcje faktycznie tam były, tcpdump zgłasza to jako " zła długość hdr ''. Przechwytuj pakiety z określonymi kombinacjami flag. W sekcji bitów kontrolnych nagłówka TCP znajduje się osiem bitów: CWR | ECE | URG | ACK | PSH | RST | SYN | PŁETWA Załóżmy, że chcemy oglądać pakiety używane do ustanowienia połączenia TCP. Przypomnijmy, że protokół TCP używa potrójnego protokołu uzgadniania podczas inicjowania nowego połączenia; sekwencja połączeń w odniesieniu do bitów kontrolnych TCP to: Teraz interesuje nas przechwytywanie pakietów, które mają ustawiony tylko bit SYN (krok 1). Zauważ, że nie chcemy pakietów z kroku 2 (SYN-ACK), tylko zwykły początkowy SYN. Potrzebujemy poprawnego wyrażenia filtru dla tcpdump . Przywołaj strukturę nagłówka TCP bez opcji: 0 15 31-----------------------------------------------------------------| port źródłowy | port docelowy |-----------------------------------------------------------------| numer sekwencji |-----------------------------------------------------------------| numer potwierdzenia |-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F | rozmiar okna |-----------------------------------------------------------------| Suma kontrolna TCP | pilny wskaźnik |-----------------------------------------------------------------
Nagłówek TCP zwykle zawiera 20 oktetów danych, chyba że są dostępne opcje. Pierwsza linia wykresu zawiera oktety 0-3, druga linia pokazuje oktety 4-7 itd. Zaczynając od zera, odpowiednie bity sterujące TCP są zawarte w oktecie 13: 0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F | rozmiar okna |----------------|---------------|---------------|----------------| | 13th octet | | |
Przyjrzyjmy się bliżej oktetowi nie. 13: | | |---------------| | C | E | U | A | P | R | S | F | |---------------| |7 5 3 0|
Są to bity kontrolne TCP, którymi jesteśmy zainteresowani. Ponumerowaliśmy bity w tym oktecie od 0 do 7, od prawej do lewej, więc bit PSH jest bitem numer 3, podczas gdy bit URG jest numerem 5. Przypomnijmy, że chcemy przechwytywać pakiety tylko z zestawem SYN. Zobaczmy, co stanie się z oktetem 13, jeśli nadejdzie datagram TCP z bitem SYN ustawionym w jego nagłówku: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
Patrząc na sekcję bitów kontrolnych widzimy, że ustawiony jest tylko bit numer 1 (SYN). Zakładając, że liczba oktetów 13 jest 8-bitową liczbą całkowitą bez znaku w kolejności bajtów sieciowych, wartość binarna tego oktetu jest: 00000010 Jego dziesiętne przedstawienie to: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2
Już prawie skończyliśmy, ponieważ teraz wiemy, że jeśli ustawiony jest tylko SYN, wartość 13. oktetu w nagłówku TCP, gdy zostanie zinterpretowana jako 8-bitowa liczba całkowita bez znaku w kolejności bajtów sieciowych, musi wynosić dokładnie 2. Ta relacja może być wyrażona jako tcp 13 == 2 Możemy użyć tego wyrażenia jako filtra dla tcpdump w celu oglądania pakietów, które mają tylko zestaw SYN: tcpdump -i xl0 tcp 13 == 2 Wyrażenie mówi: "niech 13. oktet datagramu TCP ma wartość dziesiętną 2", co jest dokładnie tym, czego chcemy. Teraz załóżmy, że musimy przechwytywać pakiety SYN, ale nie obchodzi nas, czy ACK, czy jakikolwiek inny bit sterujący TCP jest ustawiony w tym samym czasie. Zobacz, co dzieje się z oktetem 13, gdy nadejdzie datagram TCP z zestawem SYN-ACK: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
Bity 1 i 4 są teraz ustawione w 13 oktecie. Binarna wartość oktetu 13 to: 00010010 co przekłada się na liczbę dziesiętną: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18
Nie możemy po prostu użyć 'tcp 13 == 18' w tcpdump wyrażenie filtru, ponieważ wybrałoby tylko te pakiety, które mają zestaw SYN-ACK, ale nie te, które mają tylko zestaw SYN. Pamiętaj, że nie obchodzi nas, czy ACK lub jakikolwiek inny bit kontrolny jest ustawiony tak długo, jak długo ustawiony jest SYN. Aby osiągnąć nasz cel, musimy logicznie ORAZ binarną wartość oktetu 13 z inną wartością, aby zachować bit SYN. Wiemy, że chcemy ustawić SYN w każdym przypadku, więc będziemy logicznie ORAZ wartość w 13 oktecie z binarną wartością SYN: 00010010 SYN-ACK 00000010 SYN ORAZ 00000010 (chcemy SYN) ORAZ 00000010 (chcemy SYN) -------- -------- = 00000010 = 00000010
Widzimy, że ta operacja ORAZ dostarcza ten sam wynik niezależnie od tego, czy ustawiony jest ACK, czy inny kontrolny bit TCP. Dziesiętna reprezentacja wartości AND, jak również wynik tej operacji, wynosi 2 (binarny 00000010), więc wiemy, że dla pakietów z zestawem SYN, następująca relacja musi być prawdziwa: ((wartość oktetu 13) ORAZ (2)) == (2) To wskazuje nam na tcpdump wyrażenie filtru tcpdump -i xl0 'tcp 13 & 2 == 2' Zwróć uwagę, że w wyrażeniu należy używać pojedynczych cudzysłowów lub ukośników odwrotnych, aby ukryć znak specjalny AND ("&") przed powłoką. Pakiety UDP. Format UDP jest zilustrowany przez ten pakiet rwho: actinide.who> broadcast.who: udp 84
To mówi ten port kto na hoście aktynowca wysłał datagram udp do portu kto na hoście nadawanie , adres transmisji internetowej. Pakiet zawierał 84 bajty danych użytkownika. Niektóre usługi UDP są rozpoznawane (od numeru portu źródłowego lub docelowego) i nadawane są informacje protokołu wyższego poziomu, w szczególności żądania usługi nazwy domeny (RFC-1034/1035) i połączenia RPC Sun (RFC-1050) z NFS. Żądania serwera nazw UDP (N.B.: Poniższy opis zakłada znajomość protokołu usługi domenowej opisanego w RFC-1035. Jeśli nie znasz protokołu, poniższy opis będzie miał mały sens. Żądania serwera nazw są sformatowane jako: src> dst: id op? flag qtype qclass name (len) h2opolo.1538> helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
Gospodarz h2opolo zapytał serwer domeny helios dla rekordu adresu (qtype = A) powiązanego z nazwą ucbvax.berkeley.edu. Identyfikator zapytania to "3". "+" Oznacza pożądana rekurencja flaga została ustawiona. Długość zapytania wynosiła 37 bajtów, bez nagłówków protokołów UDP i IP. Operacja zapytania była normalna, Pytanie , więc pole op zostało pominięte. Jeśli operacja była czymkolwiek innym, byłaby wydrukowana między "3" a "+". Podobnie qklasa była normalna, C_IN i pominięte. Każda inna klasa q zostanie wydrukowana natychmiast po "A". Kilka anomalii jest sprawdzanych i może skutkować dodatkowymi polami ujętymi w nawiasy kwadratowe: Jeśli zapytanie zawiera odpowiedź, rekordy władzy lub dodatkowe rekordy, ankonta , nscount , lub arcount są drukowane jako " n a "," n n "lub" n au 'gdzie n jest odpowiednią liczbą. Jeśli któryś z bitów odpowiedzi jest ustawiony (AA, RA lub kod) lub dowolny z bitów "musi być zero" to bajty dwa i trzy, "b2 i 3 = x "jest drukowane, gdzie x jest wartością szesnastkową bajtów nagłówka dwa i trzy. Odpowiedzi serwera nazw UDP. Odpowiedzi serwera nazw są sformatowane jako: src> dst: id op rcode flags dane klasy typu a / n / au (len) helios.domain> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)helios.domain> h2opolo.1537: 2 NXDomain * 0/1/0 (97)
W pierwszym przykładzie helios odpowiada na identyfikator zapytania 3 z h2opolo z trzema rekordami odpowiedzi, trzema rekordami serwera nazw i siedmioma dodatkowymi rekordami. Pierwszym rekordem odpowiedzi jest typ A (adres), a jego dane to adres internetowy 128.32.137.3. Łączny rozmiar odpowiedzi wyniósł 273 bajty, z wyłączeniem nagłówków UDP i IP. Op (Query) i kod odpowiedzi (NoError) zostały pominięte, podobnie jak klasa (C_IN) rekordu A. W drugim przykładzie helios odpowiada na zapytanie 2 kodem odpowiedzi nieistniejącej domeny (NXDomain) bez odpowiedzi, jednego serwera nazw i rekordów uprawnień. "*" Oznacza, że autorytatywna odpowiedź bit został ustawiony. Ponieważ nie było odpowiedzi, wydrukowano typ, klasę lub dane. Inne znaki, które mogą się pojawić, to "-" (rekurencja dostępna, RA, nie zestaw) i "|" (skrócona wiadomość, TC, zestaw). Jeśli sekcja "pytanie" nie zawiera dokładnie jednego wpisu, " n q "jest drukowane. Należy zauważyć, że żądania i odpowiedzi serwera nazw są zwykle duże i domyślne snaplen 68 bajtów może nie uchwycić wystarczającej ilości pakietu do wydrukowania. Użyj-s flagę, aby zwiększyć snaplen, jeśli musisz poważnie zbadać ruch na serwerze nazw. "-s 128"działa dobrze dla mnie. Dekodowanie SMB / CIFS. tcpdump obejmuje dość obszerne dekodowanie SMB / CIFS / NBT dla danych na UDP / 137, UDP / 138 i TCP / 139. Trwa także pewne prymitywne dekodowanie danych IPX i NetBEUI SMB. Domyślnie jest wykonywany dość minimalny dekodowanie, z dużo bardziej szczegółowym dekodowaniem, jeśli użyto -v. Ostrzegamy, że z -v pojedynczy pakiet SMB może zajmować stronę lub więcej, więc używaj tylko -v, jeśli naprawdę chcesz poznać wszystkie drobne szczegóły. Jeśli dekodujesz sesje SMB zawierające ciągi znaków Unicode, możesz chcieć ustawić zmienną środowiskową USE_UNICODE na 1. Łata do automatycznego wykrywania ciągów unicode byłaby mile widziana. Aby uzyskać informacje na temat formatów pakietów SMB i tego, co oznaczają wszystkie pola, zobacz www.cifs.org lub katalog pub / samba / specs / na swojej ulubionej stronie lustrzanej samba.org. Łaty SMB zostały napisane przez Andrew Tridgella ([email protected]). Żądania i odpowiedzi NFS. Żądania i odpowiedzi Sun NFS (Network File System) są drukowane jako: src.xid> dst.nfs: len op args src.nfs> dst.xid: reply stat len op results sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10.73165wrl.nfs> sushi.6709: reply ok 40 readlink "../var"sushi.201b> wrl.nfs: 144 lookup fh 9,74 / 4096.6878 "Xcolors"wrl.nfs> sushi.201b: odpowiedź ok 128 odnośnik fh 9,74 / 4134.3150
W pierwszym wierszu host Sushi wysyła transakcję z identyfikatorem 6709 do wrl (pamiętaj, że numer następujący po hoście src jest identyfikatorem transakcji, nie port źródłowy). Żądanie miało 112 bajtów, z wyłączeniem nagłówków UDP i IP. Operacja była readlink (czytaj link symboliczny) na uchwycie pliku ( fh ) 21,24 / 10,731657119. (Jeśli ma się szczęście, tak jak w tym przypadku, uchwyt pliku może być interpretowany jako główna, drugorzędna para numerów urządzeń, po którym następuje numer i-węzła i numer generacyjny). Wrl odpowiada "ok" z zawartością linku. W trzeciej linii Sushi pyta wrl wyszukać nazwisko " Xcolors "w pliku katalogowym 9,74 / 4096.6878. Należy pamiętać, że drukowane dane zależą od rodzaju operacji. Format jest zrozumiały, jeśli czyta się go w połączeniu ze specyfikacją protokołu NFS. Jeśli podano flagę -v (verbose), drukowane są dodatkowe informacje. Na przykład: sushi.1372a> wrl.nfs: 148 przeczytaj fh 21,11 / 12,195 8192 bajtów @ 24576wrl.nfs> sushi.1372a: odpowiedź ok 1472 czytaj REG 100664 ids 417/0 sz 29388
(-v drukuje również pola TTL, ID, długości i fragmentacji nagłówka IP, które zostały pominięte w tym przykładzie.) W pierwszym wierszu Sushi pyta wrl odczytać 8192 bajtów z pliku 21,11 / 12,195, przy przesunięciu bajtu 24576. Wrl odpowiedzi "ok"; pakiet wyświetlony w drugim wierszu jest pierwszym fragmentem odpowiedzi, a zatem ma długość tylko 1472 bajtów (pozostałe bajty pojawią się w kolejnych fragmentach, ale fragmenty te nie mają nagłówków NFS lub nawet UDP, więc mogą nie zostać wydrukowane, w zależności od zastosowanego wyrażenia filtru). Ponieważ podano flagę -v, drukowane są niektóre atrybuty pliku (które są zwracane oprócz danych pliku): typ pliku ("REG", w przypadku zwykłego pliku), tryb pliku (w formacie ósemkowym), uid i gid oraz rozmiar pliku. Jeśli flaga -v jest podana więcej niż raz, drukowane są jeszcze więcej szczegółów. Zwróć uwagę, że żądania NFS są bardzo duże i wiele szczegółów nie zostanie wydrukowanych, chyba że snaplen jest zwiększony. Spróbuj użyć "-s 192", aby oglądać ruch NFS. Pakiety odpowiedzi NFS nie identyfikują jawnie operacji RPC. Zamiast, tcpdump śledzi "ostatnie" żądania i dopasowuje je do odpowiedzi za pomocą identyfikatora transakcji.Jeśli odpowiedź nie jest zgodna z odpowiednim żądaniem, może nie być możliwa do analizy. Transarch AFS (Andrew File System) wnioski i odpowiedzi. src.sport> dst.dport: typ pakietu rx src.sport> dst.dport: rx pakietowe wywołanie usługi call-name args src.sport> dst.dport: usługa pakietowa typu rx odpowiedz wywołanie nazwy wywołania elvis.7001> pike.afsfs: rx data fs call zmień nazwę starego fid 536876964/1/1 ".newsrc.new" nowy fid 536876964/1/1 ".newsrc"pike.afsfs> elvis.7001: rx data fs reply rename
W pierwszej linii host Elvis wysyła pakiet RX do szczupaka. Był to pakiet danych RX do usługi fs (serwer plików) i jest początkiem wywołania RPC.Wywołanie RPC było zmianą nazwy, ze starym identyfikatorem pliku katalogów 536876964/1/1 i starą nazwą pliku ".newsrc.new" oraz nowym plikiem katalogowym o numerze 536876964/1/1 i nową nazwą pliku ". newsrc ". Szczur hosta odpowiada odpowiedzią RPC na
Format wyjściowy Tcpdump




