Pierwotnie został napisany w 1988 roku przez czterech pracowników grupy badawczej w Lawrence Berkeley Laboratory w Kalifornii. Został zorganizowany jedenaście lat później przez Micheala Richardsona i Billa Fennera w 1999 roku, którzy stworzyli stronę TCPDump. TCPDUMP działa na wszystkich systemach operacyjnych UNIX. Wersja TCPDUMP w systemie Windows nazywa się Windump i używa WinPCap, alternatywy Windows dla libpcap.
Użyj SNAP, aby zainstalować TCPDump:
$ sudo snap instaluj tcpdump
Użyj menedżera pakietów, aby zainstalować TCPDump:
$ sudo apt-get instaluj TCPDUMP (Debian/Ubuntu)
$ sudo dnf instaluj TCPDUMP (Centos/Rhel 6 i 7)
$ sudo yum instaluj tcpdump (Fedora/Centos/RHEL 8)
Zobaczmy różne zastosowania i wyjścia, gdy eksplorujemy TCPDUMP!
UDP
TCPDUMP może również zrzucić pakiety UDP. Użyjemy narzędzia NetCat (NC) do wysyłania pakietu UDP, a następnie zrzucania go.
$ echo -n „tcpdumper” | NC -W 1 -U Localhost 1337
W powyższym poleceniu wysyłamy pakiet UDP składający się z ciągu „TCPDUMPER” do portu UDP 1337 przez Lokalny Gospodarz. TCPDUMP przechwytuje pakiet wysyłany przez Port UDP 1337 i wyświetli go.
Teraz zrzucimy ten pakiet za pomocą TCPDump.
$ sudo tcpdump -i lo Udp port 1337 -vvv -x
To polecenie uchwyci i pokaże przechwycone dane z pakietów w ASCII, a także formę sześciokątną.
TCPDUMP: Słuchanie On LO, Link-Type EN10MB (Ethernet), długość migawki 262144 bajtów
04:39:39.072802 IP (TOS 0x0, TTL 64, ID 32650, przesunięcie 0, flagi [DF], Proto UDP (17), długość 37)
Lokalny Gospodarz.54574> LocalHost.1337: [Zły UDP CKSUM 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 widzimy, pakiet został wysłany do portu 1337, a długość wynosiła 9 jako ciąg TCPDUMPER ma 9 bajtów. Widzimy również, że pakiet został wyświetlony w formacie sześciokątnym.
DHCP
TCPDUMP może również przeprowadzić 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 używamy interfejsu sieciowego Wi -Fi.
Użyte tutaj polecenie będzie:
$ sudo tcpdump -i WLAN0 Port 67 lub port 68 -e -n -vvv
TCPDUMP: Słuchanie na WLAN0, Link-Type EN10MB (Ethernet), długość migawek 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 Flagi [DF. ], Proto UDP (17), długość 328)
192.168.10.21.68> 192.168.10.1.67: [UDP SUM 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
Client-Ethernet-Address 00: 11: 22: 33: 44: 55
Rozszerzenia dostawcy-RFC1048
Magic Cookie 0x63825363
DHCP-Message (53), długość 1: Wydanie
Server-ID (54), długość 4: 192.168.10.1
Nazwa hosta (12), długość 6: „papuga”
Koniec (255), długość 0
Podkładka (0), długość 0, występuje 42
DNS
DNS, znany również jako system nazwy domeny, potwierdza, że dostarcza ci to, czego szukasz, dopasowując nazwę domeny do adresu domeny. Aby sprawdzić komunikację na poziomie DNS 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 UDP Port 53
TCPDUMP: Słuchanie na WLAN0, Link-Type EN10MB (Ethernet), długość migawek 262144 bajtów
04:23:48.516616 IP (TOS 0x0, TTL 64, ID 31445, przesunięcie 0, flagi [DF], Proto UDP (17), długość 72)
192.168.10.16.45899> jeden.jeden.jeden.jeden.Domena: [UDP sum OK] 20852+ a? Mozilla.Cloudflare-DNS.com. (44)
04:23:48.551556 IP (TOS 0x0, TTL 60, ID 56385, przesunięcie 0, flagi [DF], Proto UDP (17), długość 104)
jeden.jeden.jeden.jeden.Domena> 192.168.10.16.45899: [UDP suma OK] 20852 P: a? Mozilla.Cloudflare-DNS.com. 2/0/0 Mozilla.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, przesunięcie 0, flagi [DF], Proto UDP (17), długość 66)
192.168.10.16.34043> jeden.jeden.jeden.jeden.Domena: [UDP sum OK] 40757+ ptr? 1.1.1.1.w addr.Arpa. (38)
04:23:48.688731 IP (TOS 0x0, TTL 60, ID 56387, przesunięcie 0, flagi [DF], Proto UDP (17), długość 95)
jeden.jeden.jeden.jeden.Domena> 192.168.10.16.34043: [UDP suma OK] 40757 P: PTR? 1.1.1.1.w addr.Arpa. 1/0/0 1.1.1.1.w addr.Arpa. [26M53S] ptr one.jeden.jeden.jeden. (67)
Arp
Protokół rozdzielczości adresu służy do odkrywania adresu warstwy linków, takiego jak adres MAC. Jest powiązany z danym adresem warstwy internetowej, zazwyczaj adresem IPv4.
Używamy TCPDump do przechwytywania i odczytania danych przenoszonych w pakietach ARP. Polecenie jest tak proste, jak:
$ sudo tcpdump -i wlan0 Arp -vvv
TCPDUMP: Słuchanie na WLAN0, Link-Type EN10MB (Ethernet), długość migawek 262144 bajtów
03:44:12.023668 ARP, Ethernet (LEN 6), IPv4 (Len 4), żądanie Who-Has 192.168.10.1 Powiedz 192.168.10.2, długość 28
03:44:17.140259 ARP, Ethernet (Len 6), IPv4 (Len 4), prośba o Who-Has 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 IS-AT 00: 11: 22: 33: 44: 55 (OUI nieznany), długość 28
03:44:42.026393 ARP, Ethernet (LEN 6), IPv4 (Len 4), żądanie Who-Has 192.168.10.1 Powiedz 192.168.10.2, długość 28
ICMP
ICMP, znany również jako protokół komunikatu sterowania Internetem, jest protokołem pomocniczym w pakiecie protokołu internetowego. ICMP jest używany jako protokół informacyjny.
Aby wyświetlić wszystkie pakiety ICMP na interfejsie, możemy użyć tego polecenia:
$ sudo tcpdump icmp -vvv
TCPDUMP: Słuchanie na WLAN0, Link-Type EN10MB (Ethernet), długość migawek 262144 bajtów
04:26:42.123902 IP (TOS 0x0, TTL 64, ID 14831, przesunięcie 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, przesunięcie 0, flagi [Brak], Proto ICMP (1), długość 84)
192.168.10.1> 192.168.10.16: Odpowiedź Echo ICMP, ID 47363, SEQ 1, długość 64
04:26:43.125599 IP (TOS 0x0, TTL 64, ID 14888, przesunięcie 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, przesunięcie 0, flagi [Brak], Proto ICMP (1), długość 84)
192.168.10.1> 192.168.10.16: Odpowiedź Echo ICMP, ID 47363, SEQ 2, długość 64
NTP
NTP to protokół sieciowy zaprojektowany specjalnie w celu synchronizacji czasu w sieci maszyn. Aby uchwycić ruch na NTP:
$ sudo tcpdump dst port 123
04:31:05.547856 IP (TOS 0x0, TTL 64, ID 34474, przesunięcie 0, flagi [DF], Proto UDP (17), długość 76)
192.168.10.16.NTP> TIME-B-WWV.nist.Gov.NTP: [UDP SUM OK] NTPV4, klient, długość 48
Wskaźnik LEAP: Zegar niezsynchronizowany (192), Stratum 0 (nieokreślony), ankieta 3 (8s), precyzja -6
Opóźnienie korzenia: 1.000000, dyspersja korzeni: 1.000000, Identyfikator referencyjny: (UNSPEC)
Znacznik czasu odniesienia: 0.000000000
Timestamper timestampa: 0.000000000
Otrzymuj znacznik czasu: 0.000000000
Treasp Timestamp: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
ANYSTYTOR - WYMAGANIE ZNACZENIA: 0.000000000
ANYSTYTOR - TYMESTAMP Transmiste: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (TOS 0x0, TTL 56, ID 234, przesunięcie 0, flagi [Brak], Proto UDP (17), długość 76)
Time-B-WWV.nist.Gov.NTP> 192.168.10.16.NTP: [UDP SUM OK] NTPV3, serwer, długość 48
Wskaźnik LEAP: (0), Stratum 1 (odniesienie pierwotne), ankieta 13 (8192S), precyzja -29
Opóźnienie korzenia: 0.000244, dyspersja korzeni: 0.000488, Identyfikator referencyjny: NIST
Znacznik czasu odniesienia: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Timestampie dla pomysłodawcy: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Zajęcie znacznika odbierania: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Timeestamp transmisji: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
ANYSTYTOR - Otrzymuj znacznik czasu: +9.480896026
ANYSTYTOR - TYMESTAMP Transmiste: +9.480897141
SMTP
SMTP lub prosty protokół transferu poczty jest używany głównie do e -maili. TCPDUMP może to użyć do wyodrębnienia przydatnych informacji e -mail. Na przykład, aby wyodrębnić odbiorców e -maila/nadawców:
$ sudo tcpdump -n -l port 25 | grep -i 'poczta od \ | rcpt do'
IPv6
IPv6 to „następna generacja” IP, zapewniając szeroką gamę adresów IP. IPv6 pomaga osiągnąć długoterminowe zdrowie Internetu.
Aby uchwycić 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 dowolne ip6 -vvv
TCPDUMP: Link danych typ Linux_Sll2
TCPDUMP: Słuchanie na dowolnym linku linux_sll2 (Linux Cooked v2), długość migawki 262144 bajtów
04:34:31.847359 lo w IP6 (FlowLabel 0xc7cb6, Hlim 64, Next Header UDP (17) Długość ładunku: 40) :: 1.49395> :: 1.49395: [Zły UDP CKSUM 0x003B -> 0x3587!] UDP, długość 32
04:34:31.859082 lo w IP6 (FlowLabel 0xc7cb6, Hlim 64, Next Header UDP (17) Długość ładunku: 32) :: 1.49395> :: 1.49395: [Zły UDP CKSUM 0x0033 -> 0xeaef!] UDP, długość 24
04:34:31.860361 lo w IP6 (FlowLabel 0xc7cb6, HLIM 64, Next Header UDP (17) Długość ładunku: 40) :: 1.49395> :: 1.49395: [Zły UDP CKSUM 0x003B -> 0x7267!] UDP, długość 32
04:34:31.871100 lo w IP6 (FlowLabel 0xc7cb6, Hlim 64, Next Header UDP (17) Długość ładunku: 944) :: 1.49395> :: 1.49395: [Zły UDP CKSUM 0x03C3 -> 0xf890!] UDP, długość 936
4 przechwycone pakiety
12 pakietów odbieranych przez filtr
0 pakietów upuszczonych przez jądro
„-C 4” zapewnia liczbę pakietów tylko do 4 pakietów. Możemy określić liczbę pakietów do N i przechwycić N pakietów.
Http
Protokół transferu hipertekstu służy do przesyłania danych z serwera internetowego do przeglądarki do wyświetlania stron internetowych. HTTP korzysta z komunikacji formularza TCP. W szczególności używany jest port 80 TCP.
Aby wydrukować wszystkie pakiety HTTP IPv4 do iz portu 80:
TCPDUMP: Słuchanie na WLAN0, Link-Type EN10MB (Ethernet), długość migawek 262144 bajtów
03:36:00.602104 IP (TOS 0x0, TTL 64, ID 722, przesunięcie 0, flagi [DF], Proto TCP (6), długość 60)
192.168.10.21.33586> 192.168.10.1.HTTP: Flagi [S], CKSUM 0XA22B (poprawne), SEQ 2736960993, WIN 64240, Opcje [MSS 1460, Sackok, TS Val 3898882294 ECR 0, NOP, WSCALE 10], długość 0, długość 0, długość 0
03:36:00.604830 IP (TOS 0x0, TTL 64, ID 0, przesunięcie 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 3898822294, NOP, WSCALE 3], długość 0
03:36:00.604893 IP (TOS 0x0, TTL 64, ID 723, przesunięcie 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, przesunięcie 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 (poprawne), SEQ 1: 430, ACK 1, Win 63, opcje [NOP, NOP, TS VAL 389882297 ECR 30996070], Długość 429: HTTP, Długość: 429
Get / http / 1.1
Gospodarz: 192.168.10.1
Agent użytkownika: Mozilla/5.0 (Windows NT 10.0; RV: 78.0) Gecko/20100101 Firefox/78.0
Zaakceptuj: Text/html, Application/Xhtml+XML, Application/Xml; Q = 0.9, image/webp,*/*; q = 0.8
Accept-Language: en-us, en; q = 0.5
Akceptowanie: gzip, deflate
DNT: 1
Połączenie: Keep-Alive
Cookie: _testCookieSupport = 1; SID = C7CCFA31CFE06065717D24FB544A5CD588760F0CDC5AE2739E746F84C469B5FD
Upgrade-Insecure-Requests: 1
Reakcje też są uchwycone
192.168.10.1.HTTP> 192.168.10.21.33586: Flagi [str.], CKSUM 0x84F8 (poprawne), SEQ 1: 523, ACK 430, Win 1944, Opcje [NOP, NOP, TS Val 30996179 ECR 389882297], długość 522: HTTP, długość: 522
HTTP/1.1 200 OK
Serwer: ZTE Web Server 1.0 Zte Corp 2015.
Akceptuj (bajty
Połączenie: Zamknij
X-frame-options: Sameorigin
Cache-Control: Bez pamięci podręcznej, bez sklepu
Długość treści: 138098
Set-Cookie: _TestCookieSupport = 1; Ścieżka =/; Httponly
Content-Type: Text/html; Charset = UTF-8
X-Content-typ-options: Nosniff
Content-Security-Policy: Rame-Access „Self” niebezpieczne „niebezpieczne”; IMG-SRC „Self” Dane:;
Protekcja X-XSS: 1; tryb = blok
Set-Cookie: sid =; wygasa = czw, 01-styl-1970 00:00:00 gmt; ścieżka =/; Httponly
TCP
Aby uchwycić pakiety wyłącznie w TCP, to polecenie zrobi wszystko dobra:
$ sudo tcpdump -i wlan0 tcp
TCPDUMP: Słuchanie na WLAN0, Link-Type EN10MB (Ethernet), długość migawek 262144 bajtów
04:35:48.892037 IP (TOS 0x0, TTL 60, ID 23987, przesunięcie 0, flagi [Brak], Proto TCP (6), długość 104)
TL-in-F189.1E100.internet.Https> 192.168.10.16.50272: flagi [str.], CKSUM 0XC924 (poprawne), SEQ 1377740065: 1377740117, ACK 15463633399, Win 300, opcje [NOP, NOP, TS VAL 13149401 ECR 3051434098], Długość 52
04:35:48.892080 IP (TOS 0x0, TTL 64, ID 20577, przesunięcie 0, flagi [DF], Proto TCP (6), długość 52)
192.168.10.16.50272> TL-in-F189.1E100.internet.HTTPS: Flagi [.], CKSUM 0XF898 (poprawne), SEQ 1, ACK 52, Win 63, Opcje [NOP, NOP, TS VAL 3051461952 ECR 13149401], długość 0
04:35:50.199754 IP (TOS 0x0, TTL 64, ID 20578, przesunięcie 0, flagi [DF], Proto TCP (6), długość 88)
192.168.10.16.50272> TL-in-F189.1E100.internet.https: flagi [p.], CKSUM 0x2531 (poprawne), SEQ 1:37, ACK 52, Win 63, opcje [NOP, NOP, TS VAL 3051463260 ECR 13149401], długość 36
04:35:50.199809 IP (TOS 0x0, TTL 64, ID 7014, przesunięcie 0, flagi [DF], Proto TCP (6), długość 88)
192.168.10.16.50434> HKG12S18-in-F14.1E100.internet.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 przechwycone pakiety
4 pakiety odbierane przez filtr
0 pakietów upuszczonych 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
$ sudo tcpdump -i Wlan0 TCP Port 2222
Źródło IP
Aby wyświetlić pakiety z określonego źródła
$ sudo tcpdump -i wlan0 tcp src 192.168.10.2
Docelowy adres IP
Aby wyświetlić pakiety do określonego miejsca docelowego
$ sudo tcpdump -i Wlan0 TCP DST 192.168.10.2
Zapisywanie przechwytywania pakietów w plikach
Aby zapisać przechwytywanie pakietów do analizy później, możemy użyć opcji -W TCPDUMP, która wymaga parametru nazwy pliku. Te pliki są zapisywane w formacie pliku PCAP (pakiet przechwytywania), którego można użyć do zapisywania lub wysyłania przechwytywania pakietów.
Na przykład:
$ sudo tcpdump-w /złapany.PCAP
Możemy dodać filtry, jeśli chcemy przechwycić pakiety TCP, UDP lub ICMP itp.
Czytanie przechwytywania pakietów z plików
Niestety nie można odczytać zapisanego pliku za pomocą wspólnych poleceń „odczytu pliku”, takich jak CAT itp. Wyjście jest prawie bełkotliwe i trudno jest powiedzieć, co jest w pliku. „-r” służy do czytania pakietów zapisanych w .Plik PCAP, przechowywany wcześniej przez „-w” lub inne oprogramowanie przechowujące PCAP:
$ sudo tcpdump -r/wyjścia.PCAP
To drukuje dane zebrane z przechwyconych pakietów na ekranie terminalu w czytelnym formacie.
TCPDUMP Kearest
TCPDUMP może być używany z innymi poleceniami Linux, takimi jak GREP, SED itp., Aby wydobyć przydatne informacje. Oto kilka przydatnych kombinacji i słów kluczowych w połączeniu z TCPDUMP, aby uzyskać cenne informacje.
Wyodrębnij agentów użytkowników HTTP:
$ sudo tcpdump -n | GREP „Agent użytkownika:”
URL wymagane przez HTTP można monitorować za pomocą TCPDUMP, takich jak:
$ sudo tcpdump -v -n | egrep -i "post / | get / | host:"
Możesz również Wyodrębnij hasła HTTP w żądaniach pocztowych
$ sudo tcpdump -nn -l | egrep -i "post /| pwd = | passwd = | hasło = | host:"
Pliki cookie po stronie serwera lub klienta można wyodrębnić za pomocą:
$ sudo tcpdump -n | egrep -i 'set -Cookie | gospodarz: | Cookie:'
Zwycięży żądania i odpowiedzi DNS za pomocą:
$ sudo tcpdump -i WLP58S0 -S0 Port 53
Wydrukuj wszystkie zwykłe hasła tekstowe:
$ sudo tcpdump port http lub port ftp lub port smtp lub port i imap lub port pop3 lub port telnet -l -a | egrep -i -b5 'pass = | pwd = | log = | login = | użytkownik = | nazwa użytkownika = | pW = | PASSW = | PASSWD = | hasło = | Pass: | User: | Nazwa użytkownika: | hasło: | Login: | Pass '
Wspólne filtry TCPDump
Zaprzestanie
TCPDUMP był bardzo szeroko stosowanym narzędziem używanym w badaniach i zastosowaniach bezpieczeństwa/sieci. Jedyna wada TCPDUMP ma „nie ma GUI”, ale jest zbyt dobrze, aby można go było trzymać z dala od najwyższych map. Jak pisze Daniel Miessler: „Analizy protokołów, takie jak Wireshark, są świetne, ale jeśli chcesz naprawdę opanować pakiet-fu, musisz najpierw stać się jednym z TCPDump."