Oorspronkelijk werd het in 1988 geschreven door vier medewerkers van de Network Research Group van het Lawrence Berkeley Laboratory in Californië. Het werd elf jaar later georganiseerd door Micheal Richardson en Bill Fenner in 1999, die de tcpdump-site creëerden. Tcpdump werkt op alle Unix-achtige besturingssystemen. De Windows-versie van Tcpdump heet WinDump en gebruikt WinPcap, het Windows-alternatief voor libpcap.
Gebruik de module om tcpdump te installeren:
$ sudo snap tcpdump installerenGebruik je pakketbeheerder om tcpdump te installeren:
$ sudo apt-get install tcpdump (Debian/Ubuntu)$ sudo dnf installeer tcpdump (CentOS/RHEL 6&7)
$ sudo yum install tcpdump (Fedora/CentOS/RHEL 8)
Laten we verschillende gebruiken en outputs bekijken terwijl we tcpdump verkennen!
UDP
Tcpdump kan ook UDP-pakketten dumpen. We zullen een netcat (nc) tool gebruiken om een UDP-pakket te verzenden en het vervolgens te dumpen.
$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337In de hierboven gegeven opdracht sturen we een UDP-pakket dat bestaat uit de string "tcpdumper" naar de UDP-poort 1337 via localhost. Tcpdump legt het pakket vast dat wordt verzonden via UDP-poort 1337 en geeft het weer.
We zullen dit pakket nu dumpen met tcpdump.
$ sudo tcpdump -i lo udp-poort 1337 -vvv -XDeze opdracht zal de vastgelegde gegevens van de pakketten vastleggen en weergeven in zowel ASCII- als hex-vorm.
tcpdump: luisteren op lo, link-type EN10MB (Ethernet), snapshot lengte 262144 bytes04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, offset 0, vlaggen [DF], proto UDP (17), lengte 37)
localhost.54574 > localhost.1337: [slechte udp cksum 0xfe24 -> 0xeac6!] UDP, lengte 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
Zoals we kunnen zien, is het pakket verzonden naar poort 1337, en de lengte was 9 als de string tcpdumper is 9 bytes. We kunnen ook zien dat het pakket is weergegeven in hexadecimale indeling.
DHCP
Tcpdump kan ook onderzoeken uitvoeren op DHCP-pakketten via het netwerk. DHCP gebruikt UDP-poort nr. 67 of 68, dus we zullen tcpdump definiëren en beperken voor alleen DHCP-pakketten. Stel dat we een wifi-netwerkinterface gebruiken.
Het commando dat hier wordt gebruikt is:
tcpdump: luisteren op wlan0, link-type EN10MB (Ethernet), snapshot lengte 262144 bytes
03:52:04.004356 00:11:22:33:44:55 > 00:11:22:33:44:66, ethertype IPv4 (0x0800), lengte 342: (tos 0x0, ttl 64, id 39781, offset 0, vlaggen [DF ], proto UDP (17), lengte 328)
192.168.10.21.68 > 192.168.10.1.67: [udp som ok] BOOTP/DHCP, Verzoek van 00:11:22:33:44:55, lengte 300, xid 0xfeab2d67, Vlaggen [geen] (0x0000)
Client-IP 192.168.10.16
Client-Ethernet-adres 00:11:22:33:44:55
Leverancier-rfc1048 Extensies
Magisch Koekje 0x63825363
DHCP-bericht (53), lengte 1: Vrijgeven
Server-ID (54), lengte 4: 192.168.10.1
Hostnaam (12), lengte 6: "papegaai"
EINDE (255), lengte 0
PAD (0), lengte 0, komt voor 42
DNS
DNS, ook bekend als Domain Name System, bevestigt om u te bieden wat u zoekt door de domeinnaam te matchen met het domeinadres. Om de communicatie op DNS-niveau van uw apparaat via internet te inspecteren, kunt u tcpdump op de volgende manier gebruiken:. DNS gebruikt UDP-poort 53 voor communicatie.
$ sudo tcpdump -i wlan0 udp-poort 53tcpdump: luisteren op wlan0, link-type EN10MB (Ethernet), snapshot lengte 262144 bytes
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, offset 0, vlaggen [DF], proto UDP (17), lengte 72)
192.168.10.16.45899 > een.een.een.een.domein: [udp som ok] 20852+ A? mozilla.cloudflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, offset 0, vlaggen [DF], proto UDP (17), lengte 104)
een.een.een.een.domein > 192.168.10.16.45899: [udp som ok] 20852 q: A? mozilla.cloudflare-dns.com. 2/0/0 mozilla.cloudflare-dns.com. [24s] Een 104.16.249.249, mozilla.cloudflare-dns.com. [24s] Een 104.16.248.249 (76)
04:23:48.648477 IP (tos 0x0, ttl 64, id 31446, offset 0, vlaggen [DF], proto UDP (17), lengte 66)
192.168.10.16.34043 > een.een.een.een.domein: [udp som ok] 40757+ PTR? 1.1.1.1.in-addr.arpa. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, offset 0, vlaggen [DF], proto UDP (17), lengte 95)
een.een.een.een.domein > 192.168.10.16.34043: [udp som ok] 40757 q: PTR? 1.1.1.1.in-addr.arpa. 1/0/0 1.1.1.1.in-addr.arpa. [26m53s] PTR één.een.een.een. (67)
ARP
Address Resolution Protocol wordt gebruikt voor het ontdekken van het link-layer-adres, zoals een MAC-adres. Het is gekoppeld aan een bepaald internetlaagadres, meestal een IPv4-adres.
We gebruiken tcpdump om de gegevens in de arp-pakketten vast te leggen en te lezen. De opdracht is zo simpel als:
$ sudo tcpdump -i wlan0 arp -vvvtcpdump: luisteren op wlan0, link-type EN10MB (Ethernet), snapshot lengte 262144 bytes
03:44:12.023668 ARP, Ethernet (len 6), IPv4 (len 4), Verzoek wie-heeft 192.168.10.1 vertel 192.168.10.2, lengte 28
03:44:17.140259 ARP, Ethernet (len 6), IPv4 (len 4), Verzoek wie-heeft 192.168.10.21 vertel 192.168.10.1, lengte 28
03:44:17.140276 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.21 is-om 00:11:22:33:44:55 (oui Onbekend), lengte 28
03:44:42.026393 ARP, Ethernet (len 6), IPv4 (len 4), Verzoek wie-heeft 192.168.10.1 vertel 192.168.10.2, lengte 28
ICMP
ICMP, ook wel bekend als het Internet Control Message Protocol, is een ondersteunend protocol in de internetprotocolsuite. ICMP wordt gebruikt als informatieprotocol.
Om alle ICMP-pakketten op een interface te bekijken, kunnen we dit commando gebruiken:
$ sudo tcpdump icmp -vvvtcpdump: luisteren op wlan0, link-type EN10MB (Ethernet), snapshot lengte 262144 bytes
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, offset 0, vlaggen [DF], proto ICMP (1), lengte 84)
192.168.10.16 > 192.168.10.1: ICMP-echoverzoek, id 47363, seq 1, lengte 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, offset 0, vlaggen [geen], proto ICMP (1), lengte 84)
192.168.10.1 > 192.168.10.16: ICMP echo antwoord, id 47363, seq 1, lengte 64 1,
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, offset 0, vlaggen [DF], proto ICMP (1), lengte 84)
192.168.10.16 > 192.168.10.1: ICMP-echoverzoek, id 47363, seq 2, lengte 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, offset 0, vlaggen [geen], proto ICMP (1), lengte 84)
192.168.10.1 > 192.168.10.16: ICMP echo antwoord, id 47363, seq 2, lengte 64,
NTP
NTP is een netwerkprotocol dat speciaal is ontworpen om de tijd op een netwerk van machines te synchroniseren. Om verkeer op ntp vast te leggen:
$ sudo tcpdump dst-poort 12304:31:05.547856 IP (tos 0x0, ttl 64, id 34474, offset 0, vlaggen [DF], proto UDP (17), lengte 76)
192.168.10.16.ntp > tijd-b-wwv.nist.regering.ntp: [udp som ok] NTPv4, Client, lengte 48
Leap indicator: klok niet gesynchroniseerd (192), Stratum 0 (niet gespecificeerd), poll 3 (8s), precisie -6
Wortelvertraging: 1.000000, Wortelverspreiding: 1.000000, Referentie-ID: (niet gespecificeerd)
Referentie Tijdstempel: 0.000000000
Oorspronkelijke tijdstempel: 0.000000000
Tijdstempel ontvangen: 0.000000000
Tijdstempel verzenden: 3825358265.547764155 (2021-03-21T23:31:05Z)
Initiator - Tijdstempel ontvangen: 0.000000000
Initiator - Tijdstempel verzenden: 3825358265.547764155 (2021-03-21T23:31:05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, offset 0, vlaggen [geen], proto UDP (17), lengte 76)
tijd-b-wwv.nist.regering.ntp > 192.168.10.16.ntp: [udp som ok] NTPv3, Server, lengte 48
Sprongindicator: (0), Stratum 1 (primaire referentie), poll 13 (8192s), precisie -29
Wortelvertraging: 0.000244, Wortelverspreiding: 0.000488, Referentie-ID: NIST
Referentietijdstempel: 3825358208.000000000 (2021-03-21T23:30:08Z)
Oorspronkelijke tijdstempel: 3825358265.547764155 (2021-03-21T23:31:05Z)
Tijdstempel ontvangen: 3825358275.028660181 (2021-03-21T23:31:15Z)
Tijdstempel verzenden: 3825358275.028661296 (2021-03-21T23:31:15Z)
Initiator - Ontvang tijdstempel: +9.480896026
Initiator - Tijdstempel verzenden: +9.480897141
SMTP
SMTP of Simple Mail Transfer Protocol wordt voornamelijk gebruikt voor e-mails. Tcpdump kan dit gebruiken om nuttige e-mailinformatie te extraheren. Om bijvoorbeeld ontvangers/afzenders van e-mail te extraheren:
$ sudo tcpdump -n -l poort 25 | grep -i 'MAIL VAN\|RCPT NAAR'IPv6
IPv6 is de "volgende generatie" van IP, die een breed scala aan IP-adressen biedt. IPv6 helpt de gezondheid van internet op de lange termijn te bereiken.
Om IPv6-verkeer vast te leggen, gebruikt u het ip6-filter dat de TCP- en UDP-protocollen specificeert met behulp van proto 6 en proto-17.
$ sudo tcpdump -n -i elke ip6 -vvvtcpdump: type datalink LINUX_SLL2
tcpdump: luisteren op elke, link-type LINUX_SLL2 (Linux gekookt v2), snapshot lengte 262144 bytes
04:34:31.847359 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) payload lengte: 40) ::1.49395 > ::1.49395: [slechte udp cksum 0x003b -> 0x3587!] UDP, lengte 32
04:34:31.859082 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) payload lengte: 32) ::1.49395 > ::1.49395: [slechte udp cksum 0x0033 -> 0xeaef!] UDP, lengte 24
04:34:31.860361 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) laadvermogen lengte: 40) ::1.49395 > ::1.49395: [slechte udp cksum 0x003b -> 0x7267!] UDP, lengte 32
04:34:31.871100 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) laadvermogen lengte: 944) ::1.49395 > ::1.49395: [slechte udp cksum 0x03c3 -> 0xf890!] UDP, lengte 936
4 pakketten gevangen
12 pakketten ontvangen door filter
0 pakketten gedropt door kernel
De '-c 4' biedt een pakkettelling van maximaal 4 pakketten. We kunnen het aantal pakketten tot n specificeren en n pakketten vastleggen.
HTTP
Hypertext Transfer Protocol wordt gebruikt voor het overbrengen van gegevens van een webserver naar een browser om webpagina's te bekijken. HTTP gebruikt communicatie via TCP-vorm. In het bijzonder wordt TCP-poort 80 gebruikt.
Om alle IPv4 HTTP-pakketten van en naar poort 80 af te drukken:
tcpdump: luisteren op wlan0, link-type EN10MB (Ethernet), snapshot lengte 262144 bytes03:36:00.602104 IP (tos 0x0, ttl 64, id 722, offset 0, vlaggen [DF], proto TCP (6), lengte 60)
192.168.10.21.33586 > 192.168.10.1.http: Vlaggen [S], cksum 0xa22b (correct), seq 2736960993, win 64240, opties [mss 1460,sackOK,TS val 389882294 ecr 0,nop,wscale 10], lengte 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, offset 0, vlaggen [DF], proto TCP (6), lengte 60)
192.168.10.1.http > 192.168.10.21.33586: Vlaggen [S.], cksum 0x2dcc (correct), seq 4089727666, ack 2736960994, win 14480, opties [mss 1460,sackOK,TS val 30996070 ecr 389882294,nop,wscale 3], lengte 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, offset 0, vlaggen [DF], proto TCP (6), lengte 52)
192.168.10.21.33586 > 192.168.10.1.http: Vlaggen [.], cksum 0x94e2 (correct), seq 1, ack 1, win 63, options [nop,nop,TS val 389882297 ecr 30996070], lengte 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, offset 0, vlaggen [DF], proto TCP (6), lengte 481)
HTTP-verzoeken…
192.168.10.21.33586 > 192.168.10.1.http: Vlaggen [P.], cksum 0x9e5d (correct), seq 1:430, ack 1, win 63, options [nop,nop,TS val 389882297 ecr 30996070], lengte 429: HTTP, lengte: 429GET / HTTP/1.1
Gastheer: 192.168.10.1
Gebruikersagent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/2010101 Firefox/78.0
Accepteren: text/html,application/xhtml+xml,application/xml;q=0.9, afbeelding/webp,*/*;q=0.8
Accept-Taal: en-US,en;q=0.5
Accepteren-codering: gzip, leeglopen
DNT: 1
Verbinding: keep-alive
Cookie: _TESTCOOKIESUPPORT=1; SID=c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Upgrade-onveilige-verzoeken: 1
En reacties worden ook vastgelegd
192.168.10.1.http > 192.168.10.21.33586: Vlaggen [P.], cksum 0x84f8 (correct), seq 1:523, ack 430, win 1944, options [nop,nop,TS val 30996179 ecr 389882297], lengte 522: HTTP, lengte: 522HTTP/1.1 200 OK
Server: ZTE-webserver 1.0 ZTE corp 2015.
Accept-bereiken: bytes
Verbinding: sluiten
X-Frame-opties: SAMEORIGIN
Cache-Control: geen cache, geen winkel
Inhoudslengte: 138098
Set-Cookie: _TESTCOOKIESUPPORT=1; PAD=/; Alleen HTTP
Inhoudstype: tekst/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-bescherming: 1; modus=blok
Set-Cookie: SID=;expires=Do, 01-Jan-1970 00:00:00 GMT;path=/; Alleen HTTP
TCP
Om pakketten met alleen TCP vast te leggen, zal deze opdracht al het goede doen:
$ sudo tcpdump -i wlan0 tcptcpdump: luisteren op wlan0, link-type EN10MB (Ethernet), snapshot lengte 262144 bytes
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, offset 0, vlaggen [geen], proto TCP (6), lengte 104)
tl-in-f189.1e100.netto-.https > 192.168.10.16.50272: Vlaggen [P.], cksum 0xc924 (correct), seq 1377740065:1377740117, ack 1546363399, win 300, opties [nop,nop,TS val 13149401 ecr 3051434098], lengte 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, offset 0, vlaggen [DF], proto TCP (6), lengte 52)
192.168.10.16.50272 > tl-in-f189.1e100.netto-.https: Vlaggen [.], cksum 0xf898 (correct), seq 1, ack 52, win 63, options [nop,nop,TS val 3051461952 ecr 13149401], lengte 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, offset 0, vlaggen [DF], proto TCP (6), lengte 88)
192.168.10.16.50272 > tl-in-f189.1e100.netto-.https: Vlaggen [P.], cksum 0x2531 (correct), seq 1:37, ack 52, win 63, options [nop,nop,TS val 3051463260 ecr 13149401], lengte 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, offset 0, vlaggen [DF], proto TCP (6), lengte 88)
192.168.10.16.50434 > hkg12s18-in-f14.1e100.netto-.https: Vlaggen [P.], cksum 0xb21e (correct), seq 328391782:328391818, ack 3599854191, win 63, options [nop,nop,TS val 3656137742 ecr 2564108387], lengte 36
4 pakketten gevangen
4 pakketten ontvangen door filter
0 pakketten gedropt door kernel
Normaal gesproken resulteert het vastleggen van TCP-pakketten in veel verkeer; u kunt uw vereisten in detail specificeren door filters aan de opname toe te voegen, zoals:
Haven
Specificeert de te bewaken poort
Bron IP
Pakketten van een gespecificeerde bron bekijken
Destination IP
Pakketten naar een opgegeven bestemming bekijken:
Pakketopname opslaan in bestanden
Om de pakketopname op te slaan om later te analyseren, kunnen we de -w optie van tcpdump gebruiken die een bestandsnaamparameter vereist. Deze bestanden worden opgeslagen in een pcap-bestandsindeling (pakketopname), die kan worden gebruikt om pakketopnames op te slaan of te verzenden.
Bijvoorbeeld:
$ sudo tcpdumpWe kunnen filters toevoegen om te bepalen of we TCP-, UDP- of ICMP-pakketten willen vastleggen, enz.
Pakketopname uit bestanden lezen
Helaas kunt u het opgeslagen bestand niet lezen via gewone 'lees bestand'-commando's zoals cat, enz. De uitvoer is alles behalve wartaal, en het is moeilijk te zeggen wat er in het bestand staat. '-r' wordt gebruikt om de pakketten te lezen die zijn opgeslagen in de .pcap-bestand, eerder opgeslagen door '-w' of andere software waarin pcaps is opgeslagen:
$ sudo tcpdump -rHiermee worden de gegevens die zijn verzameld van vastgelegde pakketten op het terminalscherm in een leesbaar formaat afgedrukt.
Tcpdump-spiekbriefje
Tcpdump kan worden gebruikt met andere Linux-commando's zoals grep, sed, enz., om nuttige informatie te extraheren. Hier zijn enkele nuttige combinaties en trefwoorden die zijn samengevoegd in gebruik met tcpdump om waardevolle informatie te krijgen.
HTTP-gebruikersagenten extraheren:
$ sudo tcpdump -n | grep "User-Agent:"De URL's die via HTTP worden aangevraagd, kunnen worden gecontroleerd met tcpdump, zoals:
$ sudo tcpdump -v -n | egrep -i "POST / |GET / |Host:"Je kan ook HTTP-wachtwoorden extraheren in POST-verzoeken
$ sudo tcpdump -nn -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"Server- of client-side cookies kunnen worden geëxtraheerd met behulp van:
$ sudo tcpdump -n | egrep -i 'Set-Cookie|Host:|Cookie:'Leg DNS-verzoeken en antwoorden vast met behulp van:
$ sudo tcpdump -i wlp58s0 -s0 poort 53Alle wachtwoorden in platte tekst afdrukken:
$ sudo tcpdump poort http of poort ftp of poort smtp of poort imap of poort pop3 of poort telnet -l -A | egrep -i -B5 'pass=|pwd=|log=|login=|user=|user |username=|pw=|passw=|passwd=|password=|pass:|user:|gebruikersnaam:|wachtwoord:| inloggen:|pas 'Algemene Tcpdump-filters
- -EEN Toont pakketten in ASCII-indeling.
- -c Aantal te vangen pakketten.
- -tellen Pakkettelling alleen afdrukken bij het lezen van een vastgelegd bestand.
- -e MAC-adressen en kopteksten op linkniveau afdrukken.
- -h of -help Drukt versie- en gebruiksinformatie af.
- -versie Alleen de versie-informatie weergeven.
- -ik Specificeer de netwerkinterface waarop u wilt vastleggen.
- -K Voorkom pogingen om de checksums van een pakket te verifiëren. Voegt snelheid toe.
- -m
Specificeer de te gebruiken module. - -nee Converteer geen adressen (i.e., hostadressen, poortnummers, enz.) naar namen.
- -aantal Druk een optioneel pakketnummer af aan het begin van elke regel.
- -p Verbied de interface om in promiscue modus te gaan.
- -Vraag Kies de richting voor de pakketten die moeten worden vastgelegd. Verzenden of ontvangen.
- -q Stille/snelle uitvoer. Afdrukken Minder informatie. Uitgangen zijn korter.
- -r
Wordt gebruikt om pakketten van een pcap te lezen . - -t Druk geen tijdstempel af op elke dumpregel.
- -v Drukt meer informatie af over uitvoer.
- -met wie
Schrijf de onbewerkte pakketten naar het bestand. - -X Drukt ASCII-uitvoer af.
- -X Drukt ASCII af met hex.
- -lijst-interfaces Toont alle beschikbare netwerkinterfaces waar pakketten kunnen worden vastgelegd door tcpdump.
stopzetting
Tcpdump is een zeer veelgebruikte tool die wordt gebruikt in het onderzoek en de toepassingen van beveiliging/netwerken. Het enige nadeel dat tcpdump 'Geen GUI' heeft, maar het is te mooi om uit de toplijsten te blijven. Zoals Daniel Miessler schrijft: "Protocolanalysers zoals Wireshark zijn geweldig, maar als je packet-fu echt onder de knie wilt krijgen, moet je eerst één worden met tcpdump.”