Opprinnelig ble den skrevet i 1988 av fire Network Research Group-arbeidere ved Lawrence Berkeley Laboratory i California. Det ble organisert elleve år senere av Micheal Richardson og Bill Fenner i 1999, som opprettet tcpdump-nettstedet. Tcpdump fungerer på alle Unix-lignende operativsystemer. Windows-versjonen av Tcpdump heter WinDump og bruker WinPcap, Windows-alternativet for libpcap.
Bruk snap for å installere tcpdump:
$ sudo snap installere tcpdumpBruk pakkebehandleren til å installere tcpdump:
$ sudo apt-get install tcpdump (Debian / Ubuntu)$ sudo dnf installere tcpdump (CentOS / RHEL 6 & 7)
$ sudo yum installere tcpdump (Fedora / CentOS / RHEL 8)
La oss se forskjellige bruksområder og utganger når vi utforsker tcpdump!
UDP
Tcpdump kan også dumpe UDP-pakker. Vi vil bruke et netcat (nc) verktøy for å sende en UDP-pakke og deretter dumpe den.
$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337I den ovennevnte kommandoen sender vi en UDP-pakke som består av strengen “Tcpdumper” til UDP-porten 1337 via lokal vert. Tcpdump fanger pakken som sendes over UDP-port 1337 og viser den.
Vi vil nå dumpe denne pakken ved hjelp av tcpdump.
$ sudo tcpdump -i lo udp port 1337 -vvv -XDenne kommandoen vil fange opp og vise innsamlede data fra pakkene i ASCII så vel som hex-form.
tcpdump: lytter på lo, link-type EN10MB (Ethernet), øyeblikksbildelengde 262144 byte04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, offset 0, flagg [DF], proto UDP (17), lengde 37)
lokal vert.54574> lokal vert.1337: [bad udp cksum 0xfe24 -> 0xeac6!] UDP, lengde 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
Som vi kan se, ble pakken sendt til port 1337, og lengden var 9 som streng tcpdumper er 9 byte. Vi kan også se at pakken har blitt vist i hex-format.
DHCP
Tcpdump kan også utføre undersøkelser på DHCP-pakker over nettverket. DHCP bruker UDP-port nr. 67 eller 68, så vi vil definere og begrense tcpdump for bare DHCP-pakker. Anta at vi bruker et wifi-nettverksgrensesnitt.
Kommandoen som brukes her vil være:
tcpdump: lytte på wlan0, lenktype EN10MB (Ethernet), øyeblikksbildelengde 262144 byte
03:52:04.004356 00: 11: 22: 33: 44: 55> 00: 11: 22: 33: 44: 66, etertype IPv4 (0x0800), lengde 342: (tos 0x0, ttl 64, id 39781, offset 0, flagg [DF ], proto UDP (17), lengde 328)
192.168.10.21.68> 192.168.10.1.67: [udp sum ok] BOOTP / DHCP, Forespørsel fra 00: 11: 22: 33: 44: 55, lengde 300, xid 0xfeab2d67, Flagg [ingen] (0x0000)
Client-IP 192.168.10.16
Klient-Ethernet-adresse 00: 11: 22: 33: 44: 55
Leverandør-rfc1048-utvidelser
Magisk informasjonskapsel 0x63825363
DHCP-melding (53), lengde 1: Slipp
Server-ID (54), lengde 4: 192.168.10.1
Vertsnavn (12), lengde 6: "papegøye"
END (255), lengde 0
PAD (0), lengde 0, forekommer 42
DNS
DNS, også kjent som Domain Name System, bekrefter å gi deg det du leter etter ved å matche domenenavnet med domeneadressen. For å inspisere enhetens DNS-nivåkommunikasjon over internett, kan du bruke tcpdump på følgende måte. DNS bruker UDP-port 53 for kommunikasjon.
$ sudo tcpdump -i wlan0 udp port 53tcpdump: lytte på wlan0, koblingstype EN10MB (Ethernet), øyeblikksbildelengde 262144 byte
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, offset 0, flags [DF], proto UDP (17), lengde 72)
192.168.10.16.45899> en.en.en.en.domene: [udp sum ok] 20852+ A? mozilla.skyflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, offset 0, flags [DF], proto UDP (17), lengde 104)
en.en.en.en.domene> 192.168.10.16.45899: [udp sum ok] 20852 q: A? mozilla.skyflare-dns.com. 2/0/0 mozilla.skyflare-dns.com. [24s] A 104.16.249.249, mozilla.skyflare-dns.com. [24s] A 104.16.248.249 (76)
04:23:48.648477 IP (tos 0x0, ttl 64, id 31446, offset 0, flags [DF], proto UDP (17), lengde 66)
192.168.10.16.34043> en.en.en.en.domene: [udp sum ok] 40757+ PTR? 1.1.1.1.i-addr.arpa. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, offset 0, flags [DF], proto UDP (17), lengde 95)
en.en.en.en.domene> 192.168.10.16.34043: [udp sum ok] 40757 q: PTR? 1.1.1.1.i-addr.arpa. 1/0/0 1.1.1.1.i-addr.arpa. [26m53s] PTR en.en.en.en. (67)
ARP
Address Resolution Protocol brukes til å oppdage koblingslagsadressen, for eksempel en MAC-adresse. Det er knyttet til en gitt internettlagsadresse, vanligvis en IPv4-adresse.
Vi bruker tcpdump for å fange opp og lese dataene som bæres i arp-pakkene. Kommandoen er så enkel som:
$ sudo tcpdump -i wlan0 arp -vvvtcpdump: lytte på wlan0, koblingstype EN10MB (Ethernet), øyeblikksbildelengde 262144 byte
03:44:12.023668 ARP, Ethernet (len 6), IPv4 (len 4), Be om hvem-har 192.168.10.1 fortelle 192.168.10.2, lengde 28
03:44:17.140259 ARP, Ethernet (len 6), IPv4 (len 4), Be om hvem som har 192.168.10.21 fortelle 192.168.10.1, lengde 28
03:44:17.140276 ARP, Ethernet (len 6), IPv4 (len 4), Svar 192.168.10.21 er-kl 00: 11: 22: 33: 44: 55 (oui Ukjent), lengde 28
03:44:42.026393 ARP, Ethernet (len 6), IPv4 (len 4), Be hvem som har 192.168.10.1 fortelle 192.168.10.2, lengde 28
ICMP
ICMP, også kjent som Internet Control Message Protocol, er en støtteprotokoll i Internet-protokollpakken. ICMP brukes som en informasjonsprotokoll.
For å se alle ICMP-pakkene på et grensesnitt, kan vi bruke denne kommandoen:
$ sudo tcpdump icmp -vvvtcpdump: lytte på wlan0, koblingstype EN10MB (Ethernet), øyeblikksbildelengde 262144 byte
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, offset 0, flagg [DF], proto ICMP (1), lengde 84)
192.168.10.16> 192.168.10.1: ICMP ekkoforespørsel, id 47363, seq 1, lengde 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, offset 0, flagg [none], proto ICMP (1), lengde 84)
192.168.10.1> 192.168.10.16: ICMP-ekkosvar, id 47363, seq 1, lengde 64
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, offset 0, flagg [DF], proto ICMP (1), lengde 84)
192.168.10.16> 192.168.10.1: ICMP ekkoforespørsel, id 47363, seq 2, lengde 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, offset 0, flagg [none], proto ICMP (1), lengde 84)
192.168.10.1> 192.168.10.16: ICMP ekkosvar, id 47363, seq 2, lengde 64
NTP
NTP er en nettverksprotokoll designet spesielt for å synkronisere tiden i et nettverk av maskiner. For å fange trafikk på ntp:
$ sudo tcpdump dst port 12304:31:05.547856 IP (tos 0x0, ttl 64, id 34474, offset 0, flags [DF], proto UDP (17), lengde 76)
192.168.10.16.ntp> tid-b-wwv.nist.Gov.ntp: [udp sum ok] NTPv4, klient, lengde 48
Sprangindikator: ur usynkronisert (192), stratum 0 (uspesifisert), avstemning 3 (8s), presisjon -6
Rotforsinkelse: 1.000000, rotdispersjon: 1.000000, referanse-ID: (unspec)
Referansetidsstempel: 0.000000000
Opprinnelig tidsstempel: 0.000000000
Motta tidsstempel: 0.000000000
Send tidsstempel: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Opphavsmann - Motta tidsstempel: 0.000000000
Opphavsmann - Send tidsstempel: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, offset 0, flagg [none], proto UDP (17), lengde 76)
tid-b-wwv.nist.Gov.ntp> 192.168.10.16.ntp: [udp sum ok] NTPv3, Server, lengde 48
Sprangindikator: (0), stratum 1 (primær referanse), avstemning 13 (8192s), presisjon -29
Rotforsinkelse: 0.000244, Rootspredning: 0.000488, Referanse-ID: NIST
Referansetidsstempel: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Opprinners tidsstempel: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Motta tidsstempel: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Send tidsstempel: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
Opphavsmann - Motta tidsstempel: +9.480896026
Opphavsmann - Send tidsstempel: +9.480897141
SMTP
SMTP eller Simple Mail Transfer Protocol brukes hovedsakelig til e-post. Tcpdump kan bruke dette til å hente ut nyttig e-postinformasjon. For eksempel for å trekke ut e-postmottakere / avsendere:
$ sudo tcpdump -n -l port 25 | grep -i 'POST FRA \ | RCPT TIL'IPv6
IPv6 er "neste generasjon" av IP, og tilbyr et bredt spekter av IP-adresser. IPv6 bidrar til å oppnå den langsiktige helsen til Internett.
For å fange IPv6-trafikk, bruk ip6-filteret som spesifiserer TCP- og UDP-protokollene ved hjelp av proto 6 og proto-17.
$ sudo tcpdump -n -i hvilken som helst ip6 -vvvtcpdump: datalink type LINUX_SLL2
tcpdump: lytte på hvilken som helst, link-type LINUX_SLL2 (Linux-kokt v2), øyeblikksbildelengde 262144 byte
04:34:31.847359 lo I IP6 (flytetikett 0xc7cb6, hlim 64, neste topptekst UDP (17) nyttelastlengde: 40) :: 1.49395> :: 1.49395: [bad udp cksum 0x003b -> 0x3587!] UDP, lengde 32
04:34:31.859082 lo I IP6 (flytetikett 0xc7cb6, hlim 64, neste topptekst UDP (17) nyttelastlengde: 32) :: 1.49395> :: 1.49395: [bad udp cksum 0x0033 -> 0xeaef!] UDP, lengde 24
04:34:31.860361 lo I IP6 (flytetikett 0xc7cb6, hlim 64, neste topptekst UDP (17) nyttelastlengde: 40) :: 1.49395> :: 1.49395: [bad udp cksum 0x003b -> 0x7267!] UDP, lengde 32
04:34:31.871100 lo I IP6 (flytetikett 0xc7cb6, hlim 64, neste topptekst UDP (17) nyttelastlengde: 944) :: 1.49395> :: 1.49395: [dårlig udp cksum 0x03c3 -> 0xf890!] UDP, lengde 936
4 pakker fanget
12 pakker mottatt av filter
0 pakker droppet av kjernen
'-C 4' gir bare en pakketelling på opptil 4 pakker. Vi kan spesifisere antall pakker som skal n og fange n pakker.
HTTP
Hypertext Transfer Protocol brukes til å overføre data fra en webserver til en nettleser for å vise websider. HTTP bruker TCP-formkommunikasjon. Spesielt brukes TCP-port 80.
Slik skriver du ut alle IPv4 HTTP-pakker til og fra port 80:
tcpdump: lytter på wlan0, lenktype EN10MB (Ethernet), øyeblikksbildelengde 262144 byte03:36:00.602104 IP (tos 0x0, ttl 64, id 722, offset 0, flagg [DF], proto TCP (6), lengde 60)
192.168.10.21.33586> 192.168.10.1.http: Flags [S], cksum 0xa22b (correct), seq 2736960993, win 64240, options [mss 1460, sackOK, TS val 389882294 ecr 0, nop, wscale 10], lengde 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, offset 0, flagg [DF], proto TCP (6), lengde 60)
192.168.10.1.http> 192.168.10.21.33586: Flagg [S.], cksum 0x2dcc (correct), seq 4089727666, ack 2736960994, win 14480, options [mss 1460, sackOK, TS val 30996070 ecr 389882294, nop, wscale 3], lengde 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, offset 0, flagg [DF], proto TCP (6), lengde 52)
192.168.10.21.33586> 192.168.10.1.http: Flagg [.], cksum 0x94e2 (korrekt), seq 1, ack 1, win 63, options [nop, nop, TS val 389882297 ecr 30996070], lengde 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, offset 0, flagg [DF], proto TCP (6), lengde 481)
HTTP-forespørsler ..
192.168.10.21.33586> 192.168.10.1.http: Flagg [s.], cksum 0x9e5d (riktig), seq 1: 430, ack 1, win 63, options [nop, nop, TS val 389882297 ecr 30996070], lengde 429: HTTP, lengde: 429GET / HTTP / 1.1
Vert: 192.168.10.1
Brukeragent: Mozilla / 5.0 (Windows NT 10.0; rv: 78.0) Gecko / 20100101 Firefox / 78.0
Godta: tekst / html, applikasjon / xhtml + xml, applikasjon / xml; q = 0.9, bilde / webside, * / *; q = 0.8
Godta-språk: no-US, en; q = 0.5
Godta-koding: gzip, deflater
DNT: 1
Tilkobling: hold deg i live
Informasjonskapsel: _TESTCOOKIESUPPORT = 1; SID = c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Oppgradering-usikker-forespørsler: 1
Og svar fanges også
192.168.10.1.http> 192.168.10.21.33586: Flagg [s.], cksum 0x84f8 (correct), seq 1: 523, ack 430, win 1944, options [nop, nop, TS val 30996179 ecr 389882297], lengde 522: HTTP, lengde: 522HTTP / 1.1200 OK
Server: ZTE webserver 1.0 ZTE corp 2015.
Aksept-områder: byte
Tilkobling: lukk
X-Frame-Options: SAMEORIGIN
Cache-kontroll: ikke-hurtigbuffer, ingen butikk
Innholdslengde: 138098
Sett-informasjonskapsel: _TESTCOOKIESUPPORT = 1; PATH = /; HttpBare
Innholdstype: tekst / html; charset = utf-8
Alternativer for X-innholdstype: nosniff
Innholdssikkerhetspolicy: ramme-forfedre 'selv' 'usikre inline' 'usikre eval'; img-src 'selv' data :;
X-XSS-beskyttelse: 1; modus = blokk
Set-Cookie: SID =; utløper = Thu, 01-Jan-1970 00:00:00 GMT; path = /; HttpBare
TCP
For å fange bare TCP-pakker, vil denne kommandoen gjøre alt godt:
$ sudo tcpdump -i wlan0 tcptcpdump: lytte på wlan0, koblingstype EN10MB (Ethernet), øyeblikksbildelengde 262144 byte
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, offset 0, flagg [none], proto TCP (6), lengde 104)
tl-in-f189.1e100.nett.https> 192.168.10.16.50272: Flagg [s.], cksum 0xc924 (correct), seq 1377740065: 1377740117, ack 1546363399, win 300, options [nop, nop, TS val 13149401 ecr 3051434098], lengde 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, offset 0, flags [DF], proto TCP (6), lengde 52)
192.168.10.16.50272> tl-in-f189.1e100.nett.https: Flagg [.], cksum 0xf898 (korrekt), seq 1, ack 52, win 63, options [nop, nop, TS val 3051461952 ecr 13149401], lengde 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, offset 0, flagg [DF], proto TCP (6), lengde 88)
192.168.10.16.50272> tl-in-f189.1e100.nett.https: Flagg [s.], cksum 0x2531 (correct), seq 1:37, ack 52, win 63, options [nop, nop, TS val 3051463260 ecr 13149401], lengde 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, offset 0, flags [DF], proto TCP (6), lengde 88)
192.168.10.16.50434> hkg12s18-in-f14.1e100.nett.https: Flagg [s.], cksum 0xb21e (correct), seq 328391782: 328391818, ack 3599854191, win 63, options [nop, nop, TS val 3656137742 ecr 2564108387], lengde 36
4 pakker fanget
4 pakker mottatt av filter
0 pakker droppet av kjernen
Normalt resulterer TCP-pakkefangst i mye trafikk; du kan spesifisere dine krav i detalj ved å legge til filtre i fangsten, for eksempel:
Havn
Spesifiserer porten som skal overvåkes
Kilde IP
For å vise pakker fra en spesifisert kilde
Destinasjon IP
For å vise pakker til et spesifisert mål
Lagrer pakkefangst i filer
For å lagre pakkefangst for å gjøre analyser senere, kan vi bruke -w-alternativet til tcpdump som krever en filnavnparameter. Disse filene lagres i et pcap-filformat (packet capture), som kan brukes til å lagre eller sende pakkefangst.
For eksempel:
$ sudo tcpdumpVi kan legge til filtre om vi vil fange TCP-, UDP- eller ICMP-pakker osv.
Lese pakkefangst fra filer
Dessverre kan du ikke lese den lagrede filen via vanlige 'lesefil'-kommandoer som katt osv. Resultatet er alt annet enn gibberish, og det er vanskelig å si hva som er i filen. '-r' brukes til å lese pakkene som er lagret i .pcap-fil, lagret tidligere av '-w' eller annen programvare som lagrer pcaps:
$ sudo tcpdump -rDette skriver ut dataene som er samlet inn fra fangede pakker på terminalskjermen i et lesbart format.
Tcpdump cheatsheet
Tcpdump kan brukes med andre Linux-kommandoer som grep, sed, etc., for å hente ut nyttig informasjon. Her er noen nyttige kombinasjoner og nøkkelord slått sammen i bruk med tcpdump for å få verdifull informasjon.
Pakk ut HTTP-brukeragenter:
$ sudo tcpdump -n | grep "Brukeragent:"URL-ene som etterspørres via HTTP kan overvåkes ved hjelp av tcpdump, for eksempel:
$ sudo tcpdump -v -n | egrep -i "POST / | GET / | Vert:"Du kan også Pakk ut HTTP-passord i POST-forespørsler
$ sudo tcpdump -nn -l | egrep -i "POST / | pwd = | passwd = | passord = | Vert:"Server- eller klientsiden informasjonskapsler kan ekstraheres ved hjelp av:
$ sudo tcpdump -n | egrep -i 'Set-Cookie | Vert: | Cookie:'Fang DNS-forespørsler og svar ved å bruke:
$ sudo tcpdump -i wlp58s0 -s0 port 53Skriv ut alle passord for ren tekst:
$ sudo tcpdump port http eller port ftp eller port smtp eller port imap eller port pop3 eller port telnet -l -A | egrep -i -B5 'pass = | pwd = | log = | login = | bruker = | bruker | brukernavn = | pw = | passw = | passwd = | passord = | pass: | bruker: | brukernavn: | passord: | pålogging: | pass 'Vanlige Tcpdump-filtre
- -EN Viser pakker i ASCII-format.
- -c Antall pakker som skal fanges.
- -telle Skriv ut antall pakker bare når du leser en fanget fil.
- -e Skriv ut MAC-adresser og overskrifter på koblingsnivå.
- -h eller -hjelp Skriver ut versjons- og bruksinformasjon.
- -versjon Vis kun versjonsinformasjonen.
- -Jeg Spesifiser nettverksgrensesnittet du vil fange på.
- -K Forhindre forsøk på å verifisere kontrollsummer for en hvilken som helst pakke. Legger til fart.
- -m
Spesifiser modulen som skal brukes. - -n Ikke konverter adresser (i.e., vertsadresser, portnumre osv.) til navnene.
- -Nummer Skriv ut et valgfritt pakkenummer i begynnelsen av hver linje.
- -s Forbud grensesnittet fra å gå i promiskuøs modus.
- -Q Velg retning for pakkene som skal fanges. Send eller motta.
- -q Stille / rask utgang. Skriver ut Mindre informasjon. Utgangene er kortere.
- -r
Brukes til å lese pakker fra en pcap . - -t Ikke skriv ut et tidsstempel på hver dumpelinje.
- -v Skriver ut mer informasjon om utdata.
- -w
Skriv de rå pakkene som skal arkiveres. - -x Skriver ut ASCII-utdata.
- -X Skriver ASCII med sekskant.
- -liste-grensesnitt Viser alle tilgjengelige nettverksgrensesnitt der pakker kan fanges opp av tcpdump.
Opphør
Tcpdump har vært et veldig mye brukt verktøy som brukes i forskning og applikasjoner av sikkerhet / nettverk. Den eneste ulempen tcpdump har 'Ingen GUI', men det er for godt til å holdes utenfor topplistene. Som Daniel Miessler skriver, “Protokollanalysatorer som Wireshark er flott, men hvis du virkelig vil mestre pakke-fu, må du først bli en med tcpdump.”