Pierwotnie został napisany w 1988 roku przez czterech pracowników Network Research Group w Lawrence Berkeley Laboratory w Kalifornii. Została zorganizowana jedenaście lat później przez Micheala Richardsona i Billa Fennera w 1999 roku, którzy stworzyli stronę tcpdump. Tcpdump działa na wszystkich uniksopodobnych systemach operacyjnych. Wersja Tcpdump dla systemu Windows nazywa się WinDump i używa WinPcap, alternatywy dla systemu Windows dla libpcap.
Użyj przystawki, aby zainstalować tcpdump:
$ sudo snap zainstalować tcpdumpUżyj swojego menedżera pakietów, aby zainstalować tcpdump:
$ sudo apt-get install tcpdump (Debian/Ubuntu)$ sudo dnf zainstaluj tcpdump (CentOS/RHEL 6&7)
$ sudo yum zainstaluj tcpdump (Fedora/CentOS/RHEL 8)
Zobaczmy różne zastosowania i wyniki, gdy będziemy badać tcpdump!
UDP
Tcpdump może również zrzucać pakiety UDP. Użyjemy narzędzia netcat (nc), aby wysłać pakiet UDP, a następnie go zrzucić.
$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337W powyższym poleceniu wysyłamy pakiet UDP składający się z napisu „tcpdumper” do portu UDP 1337 przez Lokalny Gospodarz. Tcpdump przechwytuje pakiet wysyłany przez port UDP 1337 i wyświetla go.
Teraz zrzucimy ten pakiet za pomocą tcpdump.
$ sudo tcpdump -i lo port udp 1337 -vvv -XTo polecenie przechwyci i wyświetli przechwycone dane z pakietów w ASCII, a także w postaci szesnastkowej.
tcpdump: nasłuchiwanie na lo, link-type EN10MB (Ethernet), długość migawki 262144 bajtów04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, offset 0, flagi [DF], proto UDP (17), długość 37)
Lokalny Gospodarz.54574 > lokalny host.1337: [nieprawidłowa suma udp cks 0xfe24 -> 0xeac6!] UDP, długość 9
0x0000: 4500 0025 7f8a 4000 4011 bd3b 7f00 0001 E… %… @.@… ;…
0x0010: 7f00 0001 d52e 0539 0011 fe24 7463 7064… 9… $tcpd
0x0020: 756d 7065 72 umper
Jak widać, pakiet został wysłany na port 1337, a jego długość to 9 jako ciąg tcpdumper ma 9 bajtów. Widzimy również, że pakiet został wyświetlony w formacie szesnastkowym.
DHCP
Tcpdump może również przeprowadzać badania pakietów DHCP w sieci. DHCP używa portu UDP nr 67 lub 68, więc zdefiniujemy i ograniczymy tcpdump tylko dla pakietów DHCP. Załóżmy, że korzystamy z interfejsu sieci Wi-Fi.
Użyte tutaj polecenie to:
tcpdump: nasłuch na wlan0, link-type EN10MB (Ethernet), długość migawki 262144 bajtów
03:52:04.004356 00:11:22:33:44:55 > 00:11:22:33:44:66, ethertype IPv4 (0x0800), długość 342: (tos 0x0, ttl 64, id 39781, offset 0, flagi [DF ], proto UDP (17), długość 328)
192.168.10.21.68 > 192.168.10.1.67: [suma udp ok] BOOTP/DHCP, Żądanie od 00:11:22:33:44:55, długość 300, xid 0xfeab2d67, Flagi [brak] (0x0000)
Klient-IP 192.168.10.16
Klient-Ethernet-Adres 00:11:22:33:44:55
Rozszerzenia dostawcy-rfc1048
Magiczne Ciastko 0x63825363
Komunikat DHCP (53), długość 1: Wydanie
Identyfikator serwera (54), długość 4: 192.168.10.1
Nazwa hosta (12), długość 6: „papuga”
KONIEC (255), długość 0
PAD (0), długość 0, występuje 42
DNS
DNS, znany również jako system nazw domen, potwierdza, że dostarcza ci to, czego szukasz, dopasowując nazwę domeny do adresu domeny. Aby sprawdzić komunikację na poziomie DNS urządzenia przez Internet, możesz użyć tcpdump w następujący sposób. DNS używa portu UDP 53 do komunikacji.
$ sudo tcpdump -i wlan0 port udp 53tcpdump: nasłuch na wlan0, link-type EN10MB (Ethernet), długość migawki 262144 bajtów
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, offset 0, flagi [DF], proto UDP (17), długość 72)
192.168.10.16.45899 > jeden.jeden.jeden.jeden.domena: [suma udp ok] 20852+ A? mozilla.cloudflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, offset 0, flagi [DF], proto UDP (17), długość 104)
jeden.jeden.jeden.jeden.domena > 192.168.10.16.45899: [suma udp ok] 20852 q: A? mozilla.cloudflare-dns.com. Mozilla 2/0/0.cloudflare-dns.com. [24s] A 104.16.249.249, mozilla.cloudflare-dns.com. [24s] A 104.16.248.249 (76)
04:23:48.648477 IP (tos 0x0, ttl 64, id 31446, offset 0, flagi [DF], proto UDP (17), długość 66)
192.168.10.16.34043 > jeden.jeden.jeden.jeden.domena: [suma udp ok] 40757+ PTR? 1.1.1.1.w adresie.arpa. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, offset 0, flagi [DF], proto UDP (17), długość 95)
jeden.jeden.jeden.jeden.domena > 192.168.10.16.34043: [suma udp ok] 40757 q: PTR? 1.1.1.1.w adresie.arpa. 1/0/0 1.1.1.1.w adresie.arpa. [26m53s] PTR jeden.jeden.jeden.jeden. (67)
ARP
Protokół rozpoznawania adresów służy do wykrywania adresu warstwy łącza, takiego jak adres MAC. Jest powiązany z danym adresem warstwy internetowej, zazwyczaj adresem IPv4.
Używamy tcpdump do przechwytywania i odczytywania danych przenoszonych w pakietach arp. Polecenie jest tak proste, jak:
$ sudo tcpdump -i wlan0 arp -vvvtcpdump: nasłuch na wlan0, link-type EN10MB (Ethernet), długość migawki 262144 bajtów
03:44:12.023668 ARP, Ethernet (len 6), IPv4 (len 4), Zapytanie kto ma 192.168.10.1 powiedz 192.168.10.2, długość 28
03:44:17.140259 ARP, Ethernet (len 6), IPv4 (len 4), zapytanie kto ma 192.168.10.21 powiedz 192.168.10.1, długość 28
03:44:17.140276 ARP, Ethernet (len 6), IPv4 (len 4), odpowiedź 192.168.10.21 jest o 00:11:22:33:44:55 (oui nieznany), długość 28
03:44:42.026393 ARP, Ethernet (len 6), IPv4 (len 4), Zapytanie kto ma 192.168.10.1 powiedz 192.168.10.2, długość 28
ICMP
ICMP, znany również jako Internet Control Message Protocol, jest protokołem pomocniczym w pakiecie protokołów internetowych. ICMP jest używany jako protokół informacyjny.
Aby wyświetlić wszystkie pakiety ICMP na interfejsie, możemy użyć tego polecenia:
$ sudo tcpdump icmp -vvvtcpdump: nasłuch na wlan0, link-type EN10MB (Ethernet), długość migawki 262144 bajtów
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, offset 0, flagi [DF], proto ICMP (1), długość 84)
192.168.10.16 > 192.168.10.1: żądanie echa ICMP, id 47363, seq 1, długość 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, offset 0, flagi [brak], proto ICMP (1), długość 84)
192.168.10.1 > 192.168.10.16: odpowiedź echa ICMP, id 47363, sekw. 1, długość 64
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, offset 0, flagi [DF], proto ICMP (1), długość 84)
192.168.10.16 > 192.168.10.1: żądanie echa ICMP, id 47363, seq 2, długość 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, offset 0, flagi [brak], proto ICMP (1), długość 84)
192.168.10.1 > 192.168.10.16: odpowiedź echa ICMP, id 47363, sekw. 2, długość 64
NTP
NTP to protokół sieciowy zaprojektowany specjalnie do synchronizacji czasu w sieci maszyn. Aby przechwytywać ruch na ntp:
$ sudo tcpdump port dst 12304:31:05.547856 IP (tos 0x0, ttl 64, id 34474, offset 0, flagi [DF], proto UDP (17), długość 76)
192.168.10.16.ntp > czas-b-wwv.Nist.rząd.ntp: [udp sum ok] NTPv4, Klient, długość 48
Wskaźnik przeskoku: niezsynchronizowany zegar (192), warstwa 0 (nieokreślona), sonda 3 (8s), precyzja -6
Opóźnienie korzenia: 1.000000, dyspersja korzeni: 1.000000, identyfikator referencyjny: (nieokreślony)
Znacznik czasu odniesienia: 0.00000000
Znacznik czasu twórcy: 0.00000000
Odbierz znacznik czasu: 0.00000000
Znacznik czasu transmisji: 3825358265.547764155 (2021-03-21T23:31:05Z)
Zleceniodawca - Znacznik czasu odbioru: 0.00000000
Inicjator — znacznik czasu transmisji: 3825358265.547764155 (2021-03-21T23:31:05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, offset 0, flagi [brak], proto UDP (17), długość 76)
czas-b-wwv.Nist.rząd.ntp > 192.168.10.16.ntp: [udp sum ok] NTPv3, serwer, długość 48
Wskaźnik przeskoku: (0), Warstwa 1 (podstawowa referencja), ankieta 13 (8192s), precyzja -29
Opóźnienie korzenia: 0.000244, dyspersja korzeni: 0.000488, identyfikator referencyjny: NIST
Znacznik czasu odniesienia: 3825358208.00000000 (2021-03-21T23:30:08Z)
Znacznik czasu twórcy: 3825358265.547764155 (2021-03-21T23:31:05Z)
Odbierz sygnaturę czasową: 3825358275.028660181 (2021-03-21T23:31:15Z)
Znacznik czasu transmisji: 3825358275.028661296 (2021-03-21T23:31:15Z)
Zleceniodawca - Znacznik czasu odbioru: +9.480896026
Inicjator - Znacznik czasu transmisji: +9.480897141
SMTP
Protokół SMTP lub Simple Mail Transfer Protocol jest używany głównie do e-maili. Tcpdump może to wykorzystać do wyodrębnienia przydatnych informacji e-mail. Na przykład, aby wyodrębnić odbiorców/nadawcę wiadomości e-mail:
$ sudo tcpdump -n -l port 25 | grep -i 'POCZTA OD\|RCPT DO'IPv6
IPv6 to „następna generacja” IP, zapewniająca szeroki zakres adresów IP. IPv6 pomaga osiągnąć długoterminową kondycję Internetu.
Aby przechwycić ruch IPv6, użyj filtra ip6 określającego protokoły TCP i UDP za pomocą proto 6 i proto-17.
$ sudo tcpdump -n -i dowolny ip6 -vvvtcpdump: typ łącza danych LINUX_SLL2
tcpdump: nasłuchiwanie na dowolnym, LINUX_SLL2 typu łącza (Linux gotowane v2), długość migawki 262144 bajtów
04:34:31.847359 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) długość ładunku: 40) ::1.49395 > ::1.49395: [zła suma cks udp 0x003b -> 0x3587!] UDP, długość 32
04:34:31.859082 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) długość ładunku: 32) ::1.49395 > ::1.49395: [nieprawidłowa suma udp 0x0033 -> 0xeaef!] UDP, długość 24
04:34:31.860361 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) długość ładunku: 40) ::1.49395 > ::1.49395: [zła suma cks udp 0x003b -> 0x7267!] UDP, długość 32
04:34:31.871100 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) długość ładunku: 944) ::1.49395 > ::1.49395: [zła suma cks udp 0x03c3 -> 0xf890!] UDP, długość 936
4 pakiety przechwycone
12 pakietów odebranych przez filtr
0 pakietów porzuconych przez jądro
'-c 4' zapewnia liczbę pakietów do 4 pakietów. Możemy określić liczbę pakietów do n i przechwycić n pakietów.
HTTP
Hypertext Transfer Protocol służy do przesyłania danych z serwera internetowego do przeglądarki w celu przeglądania stron internetowych. HTTP używa komunikacji w formie TCP TCP. W szczególności używany jest port TCP 80.
Aby wydrukować wszystkie pakiety IPv4 HTTP do iz portu 80:
tcpdump: nasłuch na wlan0, link-type EN10MB (Ethernet), długość migawki 262144 bajtów03:36:00.602104 IP (tos 0x0, ttl 64, id 722, offset 0, flagi [DF], proto TCP (6), długość 60)
192.168.10.21.33586 > 192.168.10.1.http: Flags [S], cksum 0xa22b (poprawne), seq 2736960993, win 64240, opcje [mss 1460,sackOK,TS val 389882294 ecr 0,nop,wscale 10], długość 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, offset 0, flagi [DF], proto TCP (6), długość 60)
192.168.10.1.http > 192.168.10.21.33586: Flagi [S.], cksum 0x2dcc (poprawne), seq 4089727666, ack 2736960994, win 14480, opcje [mss 1460,sackOK,TS val 30996070 ecr 389882294,nop,wscale 3], długość 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, offset 0, flagi [DF], proto TCP (6), długość 52)
192.168.10.21.33586 > 192.168.10.1.http: Flagi [.], cksum 0x94e2 (poprawne), seq 1, ack 1, win 63, opcje [nop,nop,TS val 389882297 ecr 30996070], długość 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, offset 0, flagi [DF], proto TCP (6), długość 481)
Żądania HTTP…
192.168.10.21.33586 > 192.168.10.1.http: Flagi [P.], cksum 0x9e5d (poprawna), seq 1:430, ack 1, win 63, options [nop,nop,TS val 389882297 ecr 30996070], długość 429: HTTP, długość: 429POBIERZ / HTTP/1.1
Gospodarz: 192.168.10.1
Klient użytkownika: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Akceptuj: text/html,application/xhtml+xml,application/xml;q=0.9,obraz/strona internetowa,*/*;q=0.8
Akceptuj-Język: en-US,en;q=0.5
Akceptuj-kodowanie: gzip, deflate
DNT: 1
Połączenie: utrzymuj przy życiu
Plik cookie: _TESTCOOKIESUPPORT=1; SID=c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Żądania aktualizacji-niezabezpieczone-żądania: 1
Przechwytywane są też odpowiedzi
192.168.10.1.http > 192.168.10.21.33586: Flagi [P.], cksum 0x84f8 (poprawne), seq 1:523, ack 430, win 1944, opcje [nop,nop,TS val 30996179 ecr 389882297], długość 522: HTTP, długość: 522HTTP/1.1 200 OK
Serwer: serwer WWW ZTE 1.0 Korpus ZTE 2015.
Zakresy akceptacji: bajty
Połączenie: zamknij
X-Frame-Opcje: SAMEORIGIN
Kontrola pamięci podręcznej: bez pamięci podręcznej, bez sklepu;
Długość treści: 138098
Set-Cookie: _TESTCOOKIESUPPORT=1; ŚCIEŻKA=/; Tylko HTTP
Content-Type: text/html; charset=utf-8
X-Content-Type-Options: nosniff
Content-Security-Policy: frame-ancestors 'self' 'unsafe-inline' 'unsafe-eval';img-src 'self' data:;
X-XSS-Ochrona: 1; tryb=blok
Set-Cookie: SID=;expires=Czw, 01-Jan-1970 00:00:00 GMT;path=/; Tylko HTTP
TCP
Aby przechwycić pakiety tylko TCP, to polecenie zrobi wszystko dobrze:
$ sudo tcpdump -i wlan0 tcptcpdump: nasłuch na wlan0, link-type EN10MB (Ethernet), długość migawki 262144 bajtów
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, offset 0, flagi [brak], proto TCP (6), długość 104)
tl-w-f189.1e100.netto.https > 192.168.10.16.50272: Flagi [P.], cksum 0xc924 (poprawna), seq 1377740065:1377740117, ack 1546363399, win 300, opcje [nop,nop,TS val 13149401 ecr 3051434098], długość 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, offset 0, flagi [DF], proto TCP (6), długość 52)
192.168.10.16.50272 > tl-w-f189.1e100.netto.https: Flagi [.], cksum 0xf898 (poprawne), seq 1, ack 52, win 63, opcje [nop,nop,TS val 3051461952 ecr 13149401], length 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, offset 0, flagi [DF], proto TCP (6), długość 88)
192.168.10.16.50272 > tl-w-f189.1e100.netto.https: Flagi [P.], cksum 0x2531 (poprawne), seq 1:37, ack 52, win 63, opcje [nop,nop,TS val 3051463260 ecr 13149401], length 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, offset 0, flagi [DF], proto TCP (6), długość 88)
192.168.10.16.50434 > hkg12s18-w-f14.1e100.netto.https: Flagi [P.], cksum 0xb21e (poprawne), seq 328391782:328391818, ack 3599854191, win 63, opcje [nop,nop,TS val 3656137742 ecr 2564108387], długość 36
4 pakiety przechwycone
4 pakiety odebrane przez filtr
0 pakietów porzuconych przez jądro
Zwykle przechwytywanie pakietów TCP powoduje duży ruch; możesz szczegółowo określić swoje wymagania, dodając filtry do przechwytywania, takie jak:
Port
Określa port do monitorowania
Źródłowy adres IP
Aby wyświetlić pakiety z określonego źródła
Docelowy adres IP
Aby wyświetlić pakiety do określonego miejsca docelowego
Zapisywanie przechwytywania pakietów w plikach
Aby zapisać przechwycony pakiet do późniejszej analizy, możemy użyć opcji -w tcpdump, która wymaga parametru nazwy pliku. Pliki te są zapisywane w formacie pliku pcap (przechwytywanie pakietów), który można wykorzystać do zapisywania lub wysyłania przechwyconych pakietów.
Na przykład:
$ sudo tcpdumpMożemy dodać filtry określające, czy chcemy przechwytywać pakiety TCP, UDP, ICMP itp.
Odczytywanie przechwytywania pakietów z plików
Niestety, nie możesz odczytać zapisanego pliku za pomocą typowych poleceń „odczytaj plik”, takich jak cat itp. Dane wyjściowe są prawie bezsensowne i trudno powiedzieć, co jest w pliku. '-r' służy do odczytywania pakietów zapisanych w .plik pcap, zapisany wcześniej przez '-w' lub inne oprogramowanie przechowujące pcaps:
$ sudo tcpdump -rSpowoduje to wydrukowanie danych zebranych z przechwyconych pakietów na ekranie terminala w czytelnym formacie.
Ściągawka Tcpdump
Tcpdump może być używany z innymi poleceniami Linuksa, takimi jak grep, sed itp., wydobyć przydatne informacje. Oto kilka przydatnych kombinacji i słów kluczowych w połączeniu z tcpdump w celu uzyskania cennych informacji.
Wyodrębnij agenty użytkownika HTTP:
$ sudo tcpdump -n | grep "Agent użytkownika:"Adresy URL żądane przez HTTP mogą być monitorowane za pomocą tcpdump, takiego jak:
$ sudo tcpdump -v -n | egrep -i "POST / |GET / |Host:"Możesz też Wyodrębnij hasła HTTP w żądaniach POST
$ sudo tcpdump -nn -l | egrep -i "POST /|pwd=|hasło=|hasło=|Host:"Pliki cookie po stronie serwera lub klienta można wyodrębnić za pomocą:
$ sudo tcpdump -n | egrep -i 'Ustaw-Cookie|Host:|Cookie:'Przechwytuj żądania i odpowiedzi DNS za pomocą:
$ sudo tcpdump -i wlp58s0 -s0 port 53Wydrukuj wszystkie hasła w postaci zwykłego tekstu:
$ sudo tcpdump port http lub port ftp lub port smtp lub port imap lub port pop3 lub port telnet -l -A | egrep -i -B5 'hasło=|hasło=|log=|login=|użytkownik=|użytkownik |nazwa_użytkownika=|pw=|hasło=|hasło=|hasło=|hasło:|użytkownik:|nazwa użytkownika:|hasło:| login:|przepustka 'Typowe filtry Tcpdump
- -ZA Pokazuje pakiety w formacie ASCII.
- -do Liczba pakietów do przechwycenia.
- -liczyć Drukuj liczbę pakietów tylko podczas odczytu przechwyconego pliku.
- -mi Drukuj adresy MAC i nagłówki na poziomie łącza.
- -h lub -pomoc Wersja druku i informacje o użytkowaniu.
- -wersja Pokaż tylko informacje o wersji.
- -ja Określ interfejs sieciowy do przechwytywania.
- -K Zapobiegaj próbom weryfikacji sum kontrolnych dowolnego pakietu. Dodaje prędkość.
- -mi
Określ moduł do użycia. - -nie Nie konwertuj adresów (i.mi., adresy hostów, numery portów itp.) do imion.
- -numer Wydrukuj opcjonalny numer pakietu na początku każdej linii.
- -p Zabroń interfejsowi przechodzenia w tryb rozwiązły.
- -Q Wybierz kierunek przechwytywania pakietów. Wyślij lub odbierz.
- -q Cichy/szybki wydruk. Drukuje Mniej informacji. Wyjścia są krótsze.
- -r
Używany do odczytywania pakietów z pcap . - -t Nie drukuj znacznika czasu w każdym wierszu zrzutu.
- -v Drukuje więcej informacji dotyczących danych wyjściowych.
- -w
Zapisz surowe pakiety do pliku. - -x Drukuje wyjście ASCII.
- -X Drukuje ASCII z hex.
- -interfejsy listy Pokazuje wszystkie dostępne interfejsy sieciowe, w których pakiety mogą być przechwytywane przez tcpdump.
Zaprzestanie
Tcpdump jest bardzo szeroko stosowanym narzędziem wykorzystywanym w badaniach i zastosowaniach Security/Networking. Jedyną wadą tcpdump jest „Brak GUI”, ale jest zbyt dobry, aby trzymać go z dala od najlepszych list przebojów. Jak pisze Daniel Miessler: „Analizatory protokołów, takie jak Wireshark, są świetne, ale jeśli chcesz naprawdę opanować pakietowe fu, musisz najpierw stać się jednością z tcpdump.”