tcpdump

TCPDUMP Nybörjarguide

TCPDUMP Nybörjarguide
Tcpdump är en gratis och öppen källkod trådlös datanätverkspaketanalysator som fungerar på kommandoradsgränssnittet. Det är det mest använda CLI-verktyget för att analysera nätverkstrafik. Tcpdump tillåter användare att se, läsa eller fånga nätverkstrafik som överförs via ett nätverk som är anslutet till datorn. Det är användbart vid systemadministration, övervakning av nätverkstrafik (för problem eller annat).

Ursprungligen skrevs den 1988 av fyra Network Research Group-arbetare vid Lawrence Berkeley Laboratory i Kalifornien. Det organiserades elva år senare av Micheal Richardson och Bill Fenner 1999, som skapade webbplatsen tcpdump. Tcpdump fungerar på alla Unix-liknande operativsystem. Windows-versionen av Tcpdump heter WinDump och använder WinPcap, Windows-alternativet för libpcap.

Använd snap för att installera tcpdump:

$ sudo snap installera tcpdump

Använd din pakethanterare för att installera tcpdump:

$ sudo apt-get install tcpdump (Debian / Ubuntu)
$ sudo dnf installera tcpdump (CentOS / RHEL 6 & 7)
$ sudo yum installera tcpdump (Fedora / CentOS / RHEL 8)

Låt oss se olika användningsområden och utgångar när vi utforskar tcpdump!

UDP

Tcpdump kan också dumpa UDP-paket. Vi använder ett netcat (nc) -verktyg för att skicka ett UDP-paket och sedan dumpa det.

$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337

I ovanstående kommando skickar vi ett UDP-paket bestående av strängen “Tcpdumper” till UDP-porten 1337 via lokal värd. Tcpdump fångar paketet som skickas över UDP-port 1337 och visar det.

Vi kommer nu att dumpa detta paket med tcpdump.

$ sudo tcpdump -i lo udp port 1337 -vvv -X

Detta kommando kommer att fånga och visa de fångade data från paketen i ASCII såväl som hex-form.

tcpdump: lyssnar på lo, länk-typ EN10MB (Ethernet), snapshot längd 262144 byte
04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, offset 0, flaggor [DF], proto UDP (17), längd 37)
lokal värd.54574> lokal värd.1337: [dålig udp cksum 0xfe24 -> 0xeac6!] UDP, längd 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 skickades paketet till port 1337 och längden var 9 som strängen tcpdumper är 9 byte. Vi kan också se att paketet har visats i hex-format.

DHCP

Tcpdump kan också utföra undersökningar av DHCP-paket via nätverket. DHCP använder UDP-port nr 67 eller 68, så vi definierar och begränsar tcpdump för endast DHCP-paket. Antag att vi använder ett wifi-nätverksgränssnitt.
Kommandot som används här kommer att vara:

$ sudo tcpdump -i wlan0 port 67 eller port 68 -e -n -vvv
tcpdump: lyssnar på wlan0, länk-typ EN10MB (Ethernet), ögonblicksbildlängd 262144 byte
03:52:04.004356 00: 11: 22: 33: 44: 55> 00: 11: 22: 33: 44: 66, etertyp IPv4 (0x0800), längd 342: (tos 0x0, ttl 64, id 39781, offset 0, flaggor [DF ], proto UDP (17), längd 328)
192.168.10.21.68> 192.168.10.1.67: [udp sum ok] BOOTP / DHCP, Begäran från 00: 11: 22: 33: 44: 55, längd 300, xid 0xfeab2d67, Flaggor [ingen] (0x0000)
Client-IP 192.168.10.16
Klient-Ethernet-adress 00: 11: 22: 33: 44: 55
Leverantör-rfc1048-tillägg
Magic Cookie 0x63825363
DHCP-meddelande (53), längd 1: Släpp
Server-ID (54), längd 4: 192.168.10.1
Värdnamn (12), längd 6: "papegoja"
SLUT (255), längd 0
PAD (0), längd 0, förekommer 42

DNS

DNS, även känt som Domain Name System, bekräftar att förse dig med det du letar efter genom att matcha domännamnet med domänadressen. För att inspektera enhetens DNS-nivåkommunikation över internet kan du använda tcpdump på följande sätt. DNS använder UDP-port 53 för kommunikation.

$ sudo tcpdump -i wlan0 udp port 53
tcpdump: lyssnar på wlan0, länk-typ EN10MB (Ethernet), ögonblicksbildlängd 262144 byte
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, offset 0, flaggor [DF], proto UDP (17), längd 72)
192.168.10.16.45899> en.ett.ett.ett.domän: [udp sum ok] 20852+ A? mozilla.cloudflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, offset 0, flaggor [DF], proto UDP (17), längd 104)
ett.ett.ett.ett.domän> 192.168.10.16.45899: [udp sum ok] 20852 q: 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, offset 0, flaggor [DF], proto UDP (17), längd 66)
192.168.10.16.34043> en.ett.ett.ett.domän: [udp sum ok] 40757+ PTR? 1.1.1.1.in-addr.arpa. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, offset 0, flaggor [DF], proto UDP (17), längd 95)
ett.ett.ett.ett.domän> 192.168.10.16.34043: [udp sum ok] 40757 q: PTR? 1.1.1.1.in-addr.arpa. 1/0/0 1.1.1.1.in-addr.arpa. [26m53s] PTR en.ett.ett.ett. (67)

ARP

Adressupplösningsprotokoll används för att upptäcka länklagrets adress, till exempel en MAC-adress. Det är associerat med en viss internetlageradress, vanligtvis en IPv4-adress.

Vi använder tcpdump för att fånga och läsa data som bärs i arp-paketen. Kommandot är så enkelt som:

$ sudo tcpdump -i wlan0 arp -vvv
tcpdump: lyssnar på wlan0, länk-typ EN10MB (Ethernet), ögonblicksbildlängd 262144 byte
03:44:12.023668 ARP, Ethernet (len 6), IPv4 (len 4), Begär vem som har 192.168.10.1 berätta 192.168.10.2, längd 28
03:44:17.140259 ARP, Ethernet (len 6), IPv4 (len 4), Begär vem som har 192.168.10.21 berätta 192.168.10.1, längd 28
03:44:17.140276 ARP, Ethernet (len 6), IPv4 (len 4), Svar 192.168.10.21 är vid 00: 11: 22: 33: 44: 55 (oui Okänd), längd 28
03:44:42.026393 ARP, Ethernet (len 6), IPv4 (len 4), Begär vem som har 192.168.10.1 berätta 192.168.10.2, längd 28

ICMP

ICMP, även känt som Internet Control Message Protocol, är ett stödprotokoll i Internet-protokollsviten. ICMP används som ett informationsprotokoll.

För att se alla ICMP-paket i ett gränssnitt kan vi använda det här kommandot:

$ sudo tcpdump icmp -vvv
tcpdump: lyssnar på wlan0, länk-typ EN10MB (Ethernet), ögonblicksbildlängd 262144 byte
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, offset 0, flaggor [DF], proto ICMP (1), längd 84)
192.168.10.16> 192.168.10.1: ICMP-ekoförfrågan, id 47363, seq 1, längd 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, offset 0, flaggor [none], proto ICMP (1), längd 84)
192.168.10.1> 192.168.10.16: ICMP-ekosvar, id 47363, seq 1, längd 64
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, offset 0, flaggor [DF], proto ICMP (1), längd 84)
192.168.10.16> 192.168.10.1: ICMP-ekoförfrågan, id 47363, seq 2, längd 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, offset 0, flaggor [none], proto ICMP (1), längd 84)
192.168.10.1> 192.168.10.16: ICMP-ekosvar, id 47363, seq 2, längd 64

NTP

NTP är ett nätverksprotokoll utformat specifikt för att synkronisera tiden i ett nätverk av maskiner. För att fånga trafik på ntp:

$ sudo tcpdump dst port 123
04:31:05.547856 IP (tos 0x0, ttl 64, id 34474, offset 0, flaggor [DF], proto UDP (17), längd 76)
192.168.10.16.ntp> time-b-wwv.nist.gov.ntp: [udp sum ok] NTPv4, klient, längd 48
Hoppindikator: klocka osynkroniserad (192), Stratum 0 (ospecificerad), omröstning 3 (8s), precision -6
Rotfördröjning: 1.000000, rotdispersion: 1.000000, referens-ID: (unspec)
Referens tidsstämpel: 0.000000000
Ursprunglig tidstämpel: 0.000000000
Ta emot tidsstämpel: 0.000000000
Sänd tidsstämpel: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Upphovsman - Få tidsstämpel: 0.000000000
Upphovsman - sänd tidsstämpel: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, offset 0, flaggor [none], proto UDP (17), längd 76)
time-b-wwv.nist.gov.ntp> 192.168.10.16.ntp: [udp sum ok] NTPv3, Server, längd 48
Hoppindikator: (0), stratum 1 (primär referens), omröstning 13 (8192s), precision -29
Rotfördröjning: 0.000244, Rotdispersion: 0.000488, Referens-ID: NIST
Referens tidsstämpel: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Ursprunglig tidstämpel: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Ta emot tidsstämpel: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Sänd tidsstämpel: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
Upphovsman - Få tidsstämpel: +9.480896026
Upphovsman - Sänd tidsstämpel: +9.480897141

SMTP

SMTP eller Simple Mail Transfer Protocol används främst för e-post. Tcpdump kan använda detta för att extrahera användbar e-postinformation. Till exempel för att extrahera e-postmottagare / avsändare:

$ sudo tcpdump -n -l port 25 | grep -i 'POST FRÅN \ | RCPT TILL'

IPv6

IPv6 är "nästa generation" av IP och tillhandahåller ett brett utbud av IP-adresser. IPv6 hjälper till att uppnå Internetns långsiktiga hälsa.

För att fånga IPv6-trafik, använd ip6-filtret som anger TCP- och UDP-protokoll med proto 6 och proto-17.

$ sudo tcpdump -n -i vilken som helst ip6 -vvv
tcpdump: datalänk typ LINUX_SLL2
tcpdump: lyssna på valfri, länk-typ LINUX_SLL2 (Linux-kokad v2), ögonblicksbildslängd 262144 byte
04:34:31.847359 lo I IP6 (flödesmärke 0xc7cb6, hlim 64, nästa rubrik UDP (17) nyttolastlängd: 40) :: 1.49395> :: 1.49395: [dålig udp cksum 0x003b -> 0x3587!] UDP, längd 32
04:34:31.859082 lo I IP6 (flödesmärke 0xc7cb6, hlim 64, nästa rubrik UDP (17) nyttolastlängd: 32) :: 1.49395> :: 1.49395: [dålig udp cksum 0x0033 -> 0xeaef!] UDP, längd 24
04:34:31.860361 lo I IP6 (flödesmärke 0xc7cb6, hlim 64, nästa rubrik UDP (17) nyttolastlängd: 40) :: 1.49395> :: 1.49395: [dålig udp cksum 0x003b -> 0x7267!] UDP, längd 32
04:34:31.871100 lo I IP6 (flödesmärke 0xc7cb6, hlim 64, nästa rubrik UDP (17) nyttolastlängd: 944) :: 1.49395> :: 1.49395: [dålig udp cksum 0x03c3 -> 0xf890!] UDP, längd 936
4 paket fångade
12 paket mottagna med filter
0 paket tappade av kärnan

'-C 4' ger endast ett paketantal på upp till 4 paket. Vi kan ange antalet paket till n och fånga n paket.

HTTP

Hypertext Transfer Protocol används för att överföra data från en webbserver till en webbläsare för att visa webbsidor. HTTP använder TCP-formulärkommunikation. Specifikt används TCP-port 80.

Så här skriver du ut alla IPv4 HTTP-paket till och från port 80:

tcpdump: lyssnar på wlan0, länk-typ EN10MB (Ethernet), ögonblicksbildlängd 262144 byte
03:36:00.602104 IP (tos 0x0, ttl 64, id 722, offset 0, flaggor [DF], proto TCP (6), längd 60)
192.168.10.21.33586> 192.168.10.1.http: Flaggor [S], cksum 0xa22b (korrekt), seq 2736960993, win 64240, optioner [mss 1460, sackOK, TS val 389882294 ecr 0, nop, wscale 10], längd 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, offset 0, flaggor [DF], proto TCP (6), längd 60)
192.168.10.1.http> 192.168.10.21.33586: Flaggor [S.], cksum 0x2dcc (korrekt), seq 4089727666, ack 2736960994, win 14480, optioner [mss 1460, sackOK, TS val 30996070 ecr 389882294, nop, wscale 3], längd 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, offset 0, flaggor [DF], proto TCP (6), längd 52)
192.168.10.21.33586> 192.168.10.1.http: Flaggor [.], cksum 0x94e2 (korrekt), seq 1, ack 1, win 63, options [nop, nop, TS val 389882297 ecr 30996070], längd 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, offset 0, flaggor [DF], proto TCP (6), längd 481)

HTTP-begäranden ..

192.168.10.21.33586> 192.168.10.1.http: Flaggor [s.], cksum 0x9e5d (korrekt), seq 1: 430, ack 1, win 63, optioner [nop, nop, TS val 389882297 ecr 30996070], längd 429: HTTP, längd: 429
GET / HTTP / 1.1
Värd: 192.168.10.1
Användaragent: Mozilla / 5.0 (Windows NT 10.0; rv: 78.0) Gecko / 20100101 Firefox / 78.0
Acceptera: text / html, application / xhtml + xml, application / xml; q = 0.9, bild / webp, * / *; q = 0.8
Acceptera-språk: en-US, en; q = 0.5
Acceptera-kodning: gzip, tömma
DNT: 1
Anslutning: hålla vid liv
Cookie: _TESTCOOKIESUPPORT = 1; SID = c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Uppgradera-osäkra begäranden: 1

Och svar fångas också

192.168.10.1.http> 192.168.10.21.33586: Flaggor [s.], cksum 0x84f8 (korrekt), seq 1: 523, ack 430, win 1944, optioner [nop, nop, TS val 30996179 ecr 389882297], längd 522: HTTP, längd: 522
HTTP / 1.1 200 OK
Server: ZTE-webbserver 1.0 ZTE corp 2015.
Acceptera intervall: byte
Anslutning: stäng
X-Frame-alternativ: SAMEORIGIN
Cache-Control: no-cache, no-store
Innehållslängd: 138098
Set-Cookie: _TESTCOOKIESUPPORT = 1; PATH = /; HttpBara
Innehållstyp: text / html; charset = utf-8
X-innehåll-typ-alternativ: nosniff
Innehållssäkerhetspolicy: ramförfäder 'själv' 'osäker inline' 'osäker eval'; img-src 'själv' data :;
X-XSS-skydd: 1; läge = blockera
Set-Cookie: SID =; upphör att gälla = Tor, 1-jan-1970 00:00:00 GMT; sökväg = /; HttpBara

TCP

För att fånga TCP-endast paket kommer det här kommandot att göra allt bra:

$ sudo tcpdump -i wlan0 tcp
tcpdump: lyssnar på wlan0, länk-typ EN10MB (Ethernet), ögonblicksbildlängd 262144 byte
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, offset 0, flaggor [none], proto TCP (6), längd 104)
tl-in-f189.1e100.netto.https> 192.168.10.16.50272: Flaggor [s.], cksum 0xc924 (korrekt), seq 1377740065: 1377740117, ack 1546363399, win 300, optioner [nop, nop, TS val 13149401 ecr 3051434098], längd 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, offset 0, flaggor [DF], proto TCP (6), längd 52)
192.168.10.16.50272> tl-in-f189.1e100.netto.https: Flaggor [.], cksum 0xf898 (korrekt), seq 1, ack 52, win 63, options [nop, nop, TS val 3051461952 ecr 13149401], längd 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, offset 0, flaggor [DF], proto TCP (6), längd 88)
192.168.10.16.50272> tl-in-f189.1e100.netto.https: Flaggor [s.], cksum 0x2531 (korrekt), se 1:37, ack 52, win 63, optioner [nop, nop, TS val 3051463260 ecr 13149401], längd 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, offset 0, flaggor [DF], proto TCP (6), längd 88)
192.168.10.16.50434> hkg12s18-in-f14.1e100.netto.https: Flaggor [s.], cksum 0xb21e (korrekt), seq 328391782: 328391818, ack 3599854191, win 63, optioner [nop, nop, TS val 3656137742 ecr 2564108387], längd 36
4 paket fångade
4 paket mottagna med filter
0 paket tappade av kärnan

Normalt resulterar TCP-paketupptagning i mycket trafik; Du kan specificera dina krav i detalj genom att lägga till filter i fångsten, till exempel:

Hamn
Anger porten som ska övervakas

$ sudo tcpdump -i wlan0 tcp-port 2222

Källa IP
För att visa paket från en angiven källa

$ sudo tcpdump -i wlan0 tcp src 192.168.10.2

Destination IP
För att visa paket till en angiven destination

$ sudo tcpdump -i wlan0 tcp dst 192.168.10.2

Sparar paketfångst i filer

För att spara paketupptagningen för att göra analys senare kan vi använda -w-alternativet för tcpdump som kräver en filnamnsparameter. Dessa filer sparas i ett pcap-filformat (packet capture), som kan användas för att spara eller skicka paketfångar.

Till exempel:

$ sudo tcpdump -w /fångad.pcap

Vi kan lägga till filter om vi vill fånga TCP-, UDP- eller ICMP-paket osv.

Läser paketfångst från filer

Tyvärr kan du inte läsa den sparade filen via vanliga "läsfil" -kommandon som katt, etc. Utdata är allt annat än gibberish, och det är svårt att säga vad som finns i filen. '-r' används för att läsa paketen som sparats i .pcap-fil, lagrad tidigare av '-w' eller annan programvara som lagrar pcaps:

$ sudo tcpdump -r / utgångar.pcap

Detta skriver ut data som samlats in från fångade paket på terminalskärmen i ett läsbart format.

Tcpdump cheatsheet

Tcpdump kan användas med andra Linux-kommandon som grep, sed, etc., för att extrahera användbar information. Här är några användbara kombinationer och nyckelord som är sammanslagna vid användning med tcpdump för att få värdefull information.

Extrahera HTTP-användaragenter:

$ sudo tcpdump -n | grep "User-Agent:"

Webbadresserna som begärs via HTTP kan övervakas med tcpdump som:

$ sudo tcpdump -v -n | egrep -i "POST / | GET / | Värd:"

Du kan också Extrahera HTTP-lösenord i POST-förfrågningar

$ sudo tcpdump -nn -l | egrep -i "POST / | pwd = | passwd = | lösenord = | Värd:"

Server- eller klientkakor kan extraheras med:

$ sudo tcpdump -n | egrep -i 'Set-Cookie | Värd: | Cookie:'

Fånga DNS-förfrågningar och svar med:

$ sudo tcpdump -i wlp58s0 -s0 port 53

Skriv ut alla lösenord för vanlig text:

$ 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 = | användare = | användare | användarnamn = | pw = | passw = | passwd = | lösenord = | pass: | användare: | användarnamn: | lösenord: | inloggning: passera

Vanliga Tcpdump-filter

  • -A Visar paket i ASCII-format.
  • -c Antal paket att fånga.
  • -räkna Skriv ut paketantal endast när du läser en inspelad fil.
  • -e Skriv ut MAC-adresser och rubriker på länknivå.
  • -h eller -hjälp Skriver ut version och användningsinformation.
  • -version Visa endast versionsinformationen.
  • -i Ange nätverksgränssnittet att fånga på.
  • -K Förhindra försök att verifiera kontrollsummor för alla paket. Lägger till hastighet.
  • -m Ange modul som ska användas.
  • -n Konvertera inte adresser (i.e., värdadresser, portnummer osv.) till namn.
  • -siffra Skriv ut ett valfritt paketnummer i början av varje rad.
  • -sid Förbjud gränssnittet från att gå i promiskuöst läge.
  • -F Välj riktning för paketen som ska fångas. Skicka eller ta emot.
  • -q Tyst / snabb utgång. Skriver ut Mindre information. Utgångarna är kortare.
  • -r Används för att läsa paket från en pcap .
  • -t Skriv inte ut en tidsstämpel på varje soptipp.
  • -v Skriver ut mer information om utdata.
  • -w Skriv de råa paketen som ska arkiveras.
  • -x Skriver ut ASCII-utdata.
  • -X Skriver ut ASCII med hex.
  • -lista-gränssnitt Visar alla tillgängliga nätverksgränssnitt där paket kan fångas av tcpdump.

Upphörande

Tcpdump har varit ett mycket använt verktyg som används i forskning och tillämpningar av säkerhet / nätverk. Den enda nackdelen med tcpdump har 'No GUI', men det är för bra för att hållas utanför topplistorna. Som Daniel Miessler skriver, ”Protokollanalysatorer som Wireshark är jättebra, men om du verkligen vill behärska paket-fu måste du först bli en med tcpdump.”

Hur man visar OSD-överlägg i helskärms Linux-appar och -spel
Att spela helskärmsspel eller använda appar i distraktionsfritt helskärmsläge kan avskärma dig från relevant systeminformation som syns i en panel ell...
Topp 5 spelinspelningskort
Vi har alla sett och älskat streaming av spel på YouTube. PewDiePie, Jakesepticye och Markiplier är bara några av de bästa spelarna som har tjänat mil...
Hur man utvecklar ett spel på Linux
För ett decennium sedan skulle inte många Linux-användare förutsäga att deras favoritoperativsystem en dag skulle vara en populär spelplattform för ko...