Linux tcpdump exempel. Installera och använda tcpdump Tcpdump linux exempel

Linux tcpdump exempel.  Installera och använda tcpdump Tcpdump linux exempel
Linux tcpdump exempel. Installera och använda tcpdump Tcpdump linux exempel

För UNIX-system finns det många olika sniffers och trafikanalysatorer med ett bekvämt grafiskt gränssnitt och en rik uppsättning funktioner. Men ingen av dem kan jämföras i flexibilitet, mångsidighet och förekomst med den gammaldags tcpdumpen. Detta verktyg ingår i många Linux-distributioner och alla BSD-system ur lådan och kommer att kunna hjälpa dig när andra medel inte är tillgängliga.

Introduktion

Verktyget tcpdump är en nätverkspaketsniffer med ett gränssnitt kommandorad, som varken har ett grafiskt eller ett pseudografiskt gränssnitt. Det kan tyckas klumpigt och för gammaldags för nybörjare, men i kapabla händer förvandlas det till en riktig Schweizisk kniv för att öppna nätverkspaket och protokoll. Erfarna systemadministratörer rekommenderar alltid att nybörjare använder tcpdump istället för något annat verktyg på grund av klarheten och enkelheten i dess rapporter.

Tcpdump föddes för nästan 25 år sedan vid University of Berkeley, är fortfarande aktivt utvecklad och fortsätter att vara standarden bland sådana verktyg för operativ system UNIX. libpcap-paketinfångningsbiblioteket som utvecklats specifikt för det används nu av nästan alla sniffer för UNIX-system och av många liknande program för Windows.

I den här artikeln kommer vi att täcka alla aspekter av att arbeta med tcpdump, från grunderna för att arbeta med programmet till hur man använder verktyget för att upptäcka nätverksattacker, anomalier och olika typer av fel.

Ensam med konsolen

Låt oss försöka ta reda på hur tcpdump fungerar och från vilken sida det bör närma sig. Öppna en terminal och kör programmet som root (som vilken sniffer som helst måste tcpdump ha full tillgång till nätverksgränssnitt), ange namnet på nätverksgränssnittet och begränsa antalet utdatapaket till tio:

# tcpdump -i wlan0 -c 10 -n

Switchen -n inaktiverar översättningen av IP-adresser till DNS-namn. Låt oss nu försöka spåra utbytet endast med en specifik värd, till exempel med en hemrouter:

# tcpdump -i wlan0 -c 10 -n värd 192.168.0.1 och port 53

Låt oss se vad tcpdump matade ut till oss, med de två raderna som visas i skärmdumpen "DNS-fråga genom tcpdumps ögon" som exempel. Det kan lätt förstås att detta är en DNS-begäran (port 53) från värd 192.168.0.101 till värd 192.168.0.1 och det efterföljande svaret. Men vad betyder alla andra siffror och tecken?


Siffrorna 16:22:41.340105 är den tid då paketet skickades, inklusive miljondelar av en sekund (den så kallade frac). De två bokstäverna IP, som du kanske kan gissa, identifierar nätverkslagerprotokollet som används, följt av adressen: sändningsporten och adressen: destinationsporten för paketet. Allt som kommer efter kolon beror direkt på transport- eller applikationslagerprotokollet som används. tcpdump är bekant med vissa protokoll och kan dekryptera dem till en läsbar form, den lämnar andra som de är och listar helt enkelt innehållet i paketet. I det här fallet avkodade tcpdump DNS-meddelandena och returnerade strängen 49244+ A? ya.ru. (23) , vilket betyder: en begäran (A?) skickades till adressen associerad med namnet ya.ru., den totala paketlängden minus TCP/IP-huvuden var 23 byte. Den första siffran är begäran-ID.

På nästa rad ser vi svaret, vars presentationsformat nästan är detsamma som förfrågan, med den enda skillnaden att det nu efter förfrågningsidentifieraren finns information om antalet hittade poster (8/2/3) och själva posterna (A 213.180.204.3, A 77.88.21.3 , A 87.250.250.3...).

Arsenalen av tcpdump har stöd för många protokoll, tack vare vilka den kan presentera i en läsbar form information om TCP, UDP och ICMP, SMB / CIFS, NFS, AFS, AppleTalk-protokollen. Men vad händer om tcpdump inte vet något om applikationslagerprotokollet som används, eller inte kan fastställa det? I en normal situation kommer den helt enkelt att mata ut information om paketet. Det kan se ut ungefär så här:

Flaggor [.], seq 3666073194:3666074622, ack 3281095139, win 2000, options , length 1428

Detta är ett TCP-paket, informationsformatet som presenteras i tcpdump är som följer (fälten separeras med kommatecken):

  • flaggor - sätt flaggor. Betecknad med symbolerna S (SYN), F (FIN), P (PUSH) och R (RST), betyder en punkt inga flaggor satta;
  • data-seqno - beskriver data som finns i paketet i följande format: first:last, där första och sista är sekvensnumret för den första och sista byten av den överförda datan, nbytes;
  • ack - nästa sekvensnummer (ISN + 1);
  • fönster - fönsterstorlek;
  • alternativ - ytterligare information kan anges här, till exempel (maximal segmentstorlek);
  • längd - paketets längd.

All denna data kan vara mycket användbar när du studerar eller felsöker protokoll och nätverksapplikationer, men de berättar ingenting om dess innehåll. För att se innehållet i paketet i hexadecimalt format, använd flaggan -X:

# tcpdump -i wlan0 -c 10 -n -X värd 192.168.0.1 och port 80

Den här funktionen är mycket användbar för att analysera protokoll där data överförs i klartext, till exempel HTTP. För binära protokoll och protokoll med kryptering kommer det naturligtvis att vara värdelöst.
Du kan också använda flaggan -v för att få mer information om ett paket. Sedan kommer IP:n inom parentes att visas detaljerad information om IP-paket:

(tos 0x0, ttl 64, id 8339, offset 0, flaggor, proto UDP(17), längd 51)

I allmänhet är allt här ganska prosaiskt. Först kommer typen av tjänst (TOS), följt av packet time to live (TTL), paket-ID, offset från början av det första paketet i kedjan, flaggor, transportlagerprotokoll som används (TCP, UDP, ICMP), och längd.


Avancerade funktioner

Vi har redan täckt de flesta av de viktigaste funktionerna i tcpdump, men dess funktionalitet är mycket bredare. Till exempel använde vi host- och portsatserna för att ange adressen och porten vi behöver för att filtrera utdata, men tänk om vi bara vill se paket som går till angiven adress, men inte utgående från det? Du kan använda src-operatorn för detta:

# tcpdump -i wlan0 -c 10 -n src 192.168.0.1

Det finns också dess omvända version dst, utformad för att ange destinationsadressen. Som visas ovan kan alla operatörer kombineras med operatören och (övervakar nätverkstrafik, exklusive SSH-sessioner och DNS-förfrågningar):

# tcpdump -i wlan0 port inte 22 och port inte 53

Du kan också använda eller (eller) och förutom (inte). Dessutom förstår tcpdump portintervall:

# tcpdump -i wlan0 -c 10 -n portrange 21-23

Kan filtrera paket efter deras storlek:

# tcpdump -i wlan0 -c 10 -n > 32 och<= 128

Och förstår subnätmasker:

# tcpdump -i wlan0 c 10 -n src net 192.168.0.0/16 och dst net 10.0.0.0/8 eller 172.16.0.0/16

En av de mest intressanta egenskaperna hos tcpdump är möjligheten att filtrera paket baserat på innehållet i specifika bitar eller bytes i protokollhuvuden. Följande format används för detta: proto, där proto är protokollet, expr är förskjutningen i byte från början av pakethuvudet, och storlek är ett valfritt fält som anger längden på data i fråga (1 byte som standard) . Till exempel, för att filtrera endast paket med SYN-flaggan (TCP-handskakningsinitiering) inställd, skulle du använda följande post:

# tcpdump "tcp==2"

Hur det fungerar? Väldigt enkelt. De 13 byten i TCP-huvudet innehåller exakt åtta flaggor, en bit vardera. Den andra biten är reserverad för SYN-flaggan. Ovanstående post kontrollerar helt enkelt om denna bit är inställd. Förresten, en mer läsbar form av detta inlägg skulle se ut så här:

# tcpdump "tcp & tcp-syn != 0"

Praktisk användning

Verktyget tcpdump används vanligtvis för två syften: att felsöka nätverket, nätverksapplikationer och nya protokoll, och att lära ut grunderna i TCP/IP. Vi kommer att gå åt andra hållet och använda kraften i tcpdump för att upptäcka värdskanningar och nätverksattacker.

På fig. Figur 1 visar hur en klassisk TCP-portskanning gjord av Nmap ser ut i tcpdump-loggar. Du kan tydligt se hur Nmap från adressen 192.168.0.100 försöker upprätta en TCP-förbindelse med olika portar genom att skicka ett SYN-paket (S i flaggfältet). Först avsöks port 8888, ett RST-paket kommer som svar, vilket innebär att ingen tjänst lyssnar på porten, sedan sonderas port 587 med samma resultat. Slutligen skickar Nmap ett SYN-paket till port 22 (SSH) och får ett svar i form av ett SYN-ACK-paket:

192.168.0.100.43337 > 192.168.0.111.22: Flaggor [S], seq 2610024277, ... 0024278, ... 192.168.0.100. 43337 > 1902.1s, F. 192.1s. .. .

Porten är öppen och nu kan Nmap framgångsrikt stänga anslutningen genom att skicka ett RST-paket och gå vidare till nästa portar. Den gör dock något smartare: den skickar en bekräftelse på mottagandet av ACK-paketet och går omedelbart vidare till nästa portar. Detta beteende låter dig kringgå vissa system för intrångsdetektering, men du kan inte lätt lura en person beväpnad med en sniffer.

Var också uppmärksam på antalet portar som ska sorteras ut, de genereras inte slumpmässigt, utan väljs ut med hänsyn till den största prevalensen. Detta innebär att en snabb skanning utförs, eller mer specifikt, Nmap körs med största sannolikhet utan några flaggor alls.



Låt oss nu titta på en annan metod för att upptäcka öppna portar - SYN-skanning (nmap -sS). Denna typ av skanning kallas vanligtvis dold, eftersom en fullständig TCP-anslutning aldrig upprättas under den, vilket innebär att information om anslutningens faktum inte ingår i loggarna. tcpdump-utgången för denna typ av skanning visas i figur 1. 2. Den är väldigt lik loggen för en vanlig TCP-skanning, men skannerns svar på öppna portar är nu annorlunda:

192.168.0.100.48585 > 192.168.0.111.22: Flaggor [S], sekv 1679394613, ... 394614, ... 192.168.0.100. 48585 > 1.02.9 seq. 394614, .. .

Det kan ses att efter att ha tagit emot SYN-ACK-godkännandepaketet slutför skannern inte anslutningen utan avslutar den omedelbart och undviker att komma in i loggarna. På fig. 3 kan du se resultatet av UDP-skanningen. Allt är väldigt enkelt här, Nmap räknar upp portar med möjliga UDP-tjänster och skickar ett paket med noll längd till var och en av dem. Om porten är stängd skickar operativsystemet tillbaka ett ICMP-meddelande som inte går att nå:

16:41:48.798310 IP 192.168.0.100.61020 > 192.168.0.111.18869: UDP, längd 0 16:41:48.798346 IP 192.168.0.121 >. IC 168.0.121 >. 8.0.100 udp port 18869 oåtkomlig, längd 36

Annars anses hamnen vara öppen. En annan skanningsmetod är nollskanning genom att skicka paket utan flaggor (nmap -sN). Reaktionen på sådana paket kan variera beroende på operativsystem, men som du kan se från följande lista svarar Linux på dem genom att skicka RST-paket:

192.168.0.100.39132 > 192.168.0.111.256: Flaggor , vinst 3072, längd 0 192.168.0.111.256 > 192.168.0.100.39132: Flags 0.111.256

En angripare kan också använda Xmas-skanning, där paketen har FIN-, URG- och PUSH-flaggorna inställda (paketet verkar lysa med flaggor som en julgran):

192.168.0.100.35331 > 192.168.0.111.5544: Flaggor , seq 3998959601, win 4096, urg 0, length 0 0, ack 3998959602

Som du kan se är reaktionen på sådana paket identisk. En ACK-skanning (-sA) kommer att visas i tcpdump-loggarna som skickar många paket med ACK-flaggan inställd och svarar på dem genom att skicka RST-paket. Men om en brandvägg är installerad på systemet kommer det inte att finnas några svarsmeddelanden och Nmap kommer att kunna förstå om porten filtreras.

Med hjälp av tcpdump kan du även spåra olika typer av översvämningar. Till exempel kommer en klassisk ICMP-flod i loggarna att se ut så här:

16:43:06.008305 IP 192.168.0.100 > 192.168.0.111: ICMP typ-#68, längd 1032 16:43:06.008383 IP 192.168.0.100 32 16:43:06.008714 IP 192.168.0.100 > 192.168.0.111: ICMP-typ-#183, längd 1032 16:43:06.008831

Av särskild betydelse här är fältet som innehåller den tid då paketet togs emot. Ingen normal applikation kommer att skicka många ICMP-meddelanden under en tidsperiod som motsvarar en tusendels sekund. Andra typer av översvämningar (t.ex. SYN) definieras på exakt samma sätt.

Interaktion med andra program

En av de viktigaste fördelarna med tcpdump är att formatet på dess rapporter under programmets existens faktiskt har blivit standarden för alla sniffers och idag förstås det av alla mer eller mindre seriösa trafikanalysverktyg. Till exempel kan tcpdump användas för att generera en dump på en fjärrdator, sedan skicka den till den lokala maskinen och analysera den med wireshark:

$ ssh [e-postskyddad] tcpdump -w - "port !22" | wireshark -k -i -

Här använde vi alternativet -w - för att skriva dumpen till stdout och omdirigerade den till wireshark som körs på den lokala maskinen. På samma sätt kan du analysera trafiken med hjälp av snort:

$ ssh [e-postskyddad]"tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r -

Genom att omdirigera utdata från programmet till ingången av grep kan du hitta olika problem i nätverket, till exempel identifiera paket med en felaktig kontrollsumma, som kan visas med -vv-flaggan:

# tcpdump -nnvv -r dump.cap tcp | grep -v "tcp summa ok" | wc-l

Admin grejer

Möjligheten att filtrera paket baserat på data som finns i rubriken, som vi diskuterade i början av det första avsnittet, är mycket användbar för att felsöka olika protokoll och söka efter nätverksproblem. Till exempel kan vi använda den för att fånga nätverkspaket som överförs över Cisco Discovery Protocol, genom vilka Cisco-routrar utbyter information om topologi och nätverksstatus:

# tcpdump -nn -v -i eth0 -s 1500 -c 1 "eter == 0?2000"

På samma sätt kan du fånga alla paket som överförs via DHCP-protokollet (DISCOVER, REQUEST, INFORM) för att identifiera klientanslutningsproblem:

# tcpdump -i eth0 -vvv -s 1500 "((port 67 eller port 68) och (udp = 0x1))"

Eller fånga paket som skickas som en del av POP3-autentisering:

# tcpdump -i eth0 "tcp port pop3 och ip = 85 och ip = 83" -s 1500 -n

nätverk grep

tcpdump sniffern är bra för sin mångsidighet och mångfald av möjligheter, men det är inte så lätt och bekvämt att använda den för att söka efter specifik data inuti överförda paket. Denna uppgift hanteras mycket bättre av ngrep, som är utformad för att visa passerande nätverkspaket som matchar en given mask.

Till exempel, för att hitta parametrarna som skickas av metoderna GET och POST inom en HTTP-session, kan du använda följande kommando:

# ngrep -l -q -d eth0 "^GET |^POST " tcp och port 80

Hitta slackers:

# ngrep -i "game*|p0rn|adult" -W byline -d eth0 > slackers.txt

Vi analyserar SMTP-trafik på alla nätverksgränssnitt:

# ngrep -i "rcpt to|mail from" tcp port smtp

tcpdump-alternativ

En tabell över de mest intressanta och användbara tcpdump-flaggorna.

  • -i [gränssnitt] - lyssna nätverksgränssnitt, alla ska vara inställda på valfri.
  • -n Lös inte IP-adresser till DNS-namn.
  • -nn Översätt inte IP-adresser och portnummer.
  • -X - visa paketets innehåll i text och hexadecimala format.
  • -XX - samma plus innehållet i Ethernet-ramen.
  • -v, -vv, -vvv - öka mängden information och paket som visas (mer, mer, allt).
  • -c [n] Visa endast de första n paketen.
  • -s [n] - antal byte som visas för varje paket (kan minskas för läsbarhet eller ökas för mer information).
  • -S - visar absoluta TCP-sekvensnummer.
  • -e - visa ethernet-ramhuvuden.
  • -q - visa mindre information (för läsbarhet).
  • -E - dekryptera IPsec-trafik med den angivna nyckeln.
  • -w - spara programdump till fil, argument - används för att specificera stdout.

Slutsatser

I händerna på en kunnig användare förvandlas tcpdump till ett kraftfullt verktyg inte bara för felsökning utan också för avvikelseforskning. Tack vare en rik uppsättning operatörer och flaggor kan du använda den för att komma ut ur nätverksluften och utforska vad du verkligen behöver.

Därför bestämde jag mig för att skapa mitt eget cheat sheet så att det var ... För utan tcpdump är inte en admin en icke-admin

Introduktion

Mycket ofta, för att hitta problem i nätverket används nätverkstrafikanalysatorer . tcpdumpär en av representanterna för denna klass av program, den låter dig lyssna (visa / spara) och analysera nätverket på nivån för överförda nätverkspaket, ramar och andra enheter för nätverkstrafiköverföring. Beroende på nätverkskonfigurationen, tcpdump kan lyssna inte bara paket avsedda för en given MAC-adress, utan även broadcast-paket. Nätverkspaketsniffning baseras på "promiskuöst" läge nätverkskortdrift.

Beroende på den använda nätverksutrustning för att ansluta datorer till ett Ethernet-nätverk finns följande trafiklyssningsförmåga:

  • Online baserat koncentratorer all trafik från hubben är tillgänglig för alla nätverksvärdar.
  • I nätverksbaserade växlar(switchar), endast dess trafik är tillgänglig för nätverksvärden, såväl som all sändningstrafik för detta segment.
  • Vissa hanterade switchar har funktionen att kopiera trafiken från denna port till övervakningsporten ("spegling", portövervakning).
  • Vid användning av speciella medel (kopplare) ingår i gapet nätverksanslutning och vidarebefordra anslutningstrafik på en viss port, är det möjligt att lyssna på motsvarande port.
  • "Knepet" med hubben - switchporten vars trafik behöver lyssnas på slås på genom hubben genom att ansluta monitornoden till hubben också (i de flesta fall minskar nätverksanslutningens prestanda).

Så, tcpdump verktyg ingår i de flesta Unix-distributioner och låter dig fånga upp och visa/spara nätverkstrafik till en fil. Verktyget använder libpcap bibliotek. Det finns även en port för Windows. För att verktyget ska fungera är det nödvändigt. Till exempel, på Debian, installeras det med kommandot:

Debian:~# apt-get install tcpdump

Verktygen är nödvändiga för arbetet (eftersom inställningarna för nätverksgränssnittet ändras - det överförs till det "promiskuösa" läget). I allmänhet tcpdump kommandoformat har följande form:

Debian:~# tcpdump<опции> <фильтр>

tcpdump verktygsalternativ

-i gränssnitt

Anger gränssnittet från vilket trafiken ska analyseras (utan att specificera gränssnittet - "först stött på"-analys).

Inaktiverar IP till domännamn. Om -nn anges konverteras inte portnummer till protokollnamn.

De vanligaste filteralternativen för kommandot tcpdump är:

dst värd

Kontrollerar om destinationsadressen för ett IP-paket matchar det angivna värdet. Det är möjligt att ställa in både IP, subnät i formatet 10.0.0.1/24 och värdnamn.

src värd

Kontrollerar om källadressen för ett IP-paket matchar det angivna värdet. Det är möjligt att ställa in både IP, subnät i formatet 10.0.0.1/24 och värdnamn.

värd värd

Kontrollerar om avsändarens eller mottagaradressen matchar det angivna värdet. Det är möjligt att ställa in både IP, subnät i formatet 10.0.0.1/24 och värdnamn.

nätet nätverksnamn

Kontrollerar om avsändarens/mottagarens adress finns på det angivna nätverket. Det är möjligt att ange ett nätverk i CIDR-format (till exempel 10.0.0.1/22), eller att ange ett nätverksnamn som anges i .

ip | arp | rarp | tcp | utp | icmp [värd]

Kontrollerar om paketet tillhör något av de angivna protokollen och, när du anger en värdadress, kontrollerar om avsändaren/destinationsadressen matchar den givna. Det är möjligt att ställa in både IP, subnät i formatet 10.0.0.1/24 och värdnamn.

dst port port_number

Kontrollerar om paketet tillhör TCP/UDP-protokollet och om destinationsporten är lika med den angivna. Du kan ange portnumret eller namnet som anges i filen /etc/services.

src port port_number

Kontrollerar om paketet tillhör TCP/UDP-protokollet och om källporten är lika med den givna. Du kan ange portnumret eller namnet som anges i filen /etc/services.

port port_number

Kontrollerar om paketet tillhör TCP/UDP-protokollet och är lika med den angivna destinationen eller källporten. Du kan ange portnumret eller namnet som anges i filen /etc/services.

ip-sändning

Kontrollerar om IP-paketet sänds.

ether ( src | dst | host ) MAC-adress

Kontrollerar om nätverkspaketet tillhör källan, destinationen, källan eller destinationen som har den givna MAC_adressen.

eter-sändning

Kontrollerar om ARP-paketet sänds.

Exempel på användning av kommandot tcpdump

Trafikanalys på nätverksnivå (ARP, ICMP) med tcpdump

Anta att vi har 2 värdar. Värd 1 med gränssnittet eth0 och följande parametrar:

Host1:~# ip-adress visa dev eth0 5: eth0: mtu 1500 qdisc pfifo_fast state OKÄNT qlen 1000 länk/eter 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff inet 192.168.56.1/24 brd 192.12505 in global scope 6 feet 6505:8 :800:27ff:fe00:0/64 scope link valid_lft forever prefered_lft forever

Samt host2 med gränssnitt eth1

Host2:~# ip-adress visa dev eth1 3: eth1: mtu 1500 qdisc pfifo_fast state UPP qlen 1000 länk/eter 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff inet 192.168.56.33/24 scope global eth1 inet6 fe080::ffa :fefd:e5aa/64 scope link valid_lft forever prefered_lft forever

Låt oss anta att det hittills inte har förekommit någon nätverkskommunikation mellan värdar, och om du kör kommandot ip neigh show på värd 2 kommer du att se att det inte finns några poster i ARP-tabellen. Låt oss göra ett litet experiment. Låt oss köra tcpdump-verktyget på ett av de virtuella host1-gränssnitten:

Host1:~# tcpdump -ne -i eth0 tcpdump: utförlig utdata undertryckt, använd -v eller -vv för full protokollavkodningslyssning på eth0, länktyp EN10MB (Ethernet), fångststorlek 65535 byte

Värd1:~# ping -c 1 192.168.56.33 PING 192.168.56.33 (192.168.56.33) 56(84) databyte. 64 byte från 192.168.56.33: icmp_req=1 ttl=64 tid=1,06 ms --- 192.168.56.33 pingstatistik --- 1 paket överfört, 1 mottaget, 0 % paketförlust, tid 0 ms rtt min/avg/max/m = 1,067/1,067/1,067/0,000 ms

Efter det dök en post upp i ARP-tabellen för host1-systemet om IP-adressen för host2-maskinen:

Host1:~# ip neigh show dev eth0 192.168.56.33 lladdr 01:00:27:77:e5:00 HOST2

På den virtuella konsolen visade tcpdump oss följande information:

Host1:~# tcpdump -ne -i eth0 tcpdump: utförlig utdata undertryckt, använd -v eller -vv för full protokollavkodningslyssning på eth0, länktyp EN10MB (Ethernet), fångststorlek 65535 byte 12:16:29.465780 0a:00 :27:00:00:00 > ff:ff:ff:ff:ff:ff, etertyp ARP (0x0806), längd 42: Begär vem-har 192.168.56.33 tell 192.168.56.1, längd 28 12:16:289.46 :00:27:77:e5:00 > 0a:00:27:00:00:00, etertyp ARP (0x0806), längd 42: Svar 192.168.56.33 is-at 01:00:27:77:e5:00 , längd 28 12:16:29.466815 0a:00:27:00:00:00 > 01:00:27:77:e5:00, etertyp IPv4 (0x0800), längd 98: 192.168.56.1 > 6:352IC ekoförfrågan, id 5284, seq 1, längd 64 12:16:29.467934 01:00:27:77:e5:00 > 0a:00:27:00:00:00, etertyp IPv4 (0x0800), längd 98.1: 89 .56.33 > 192.168.56.1: ICMP-ekosvar, id 5284, seq 1, längd 64 ^C 4 paket fångade 4 paket mottagna av filter 0 paket som släpps av kärnan

Varje nätverkspaketpost i det här formatet innehåller pakethämtningstid, käll- och destinations-MAC-adresser, protokolltyp, paketlängd och information om innehållet i paketet. Första inspelningen beskriver en ARP-sändningsförfrågan från host1:s eth0-gränssnitts MAC-adress (" Vem har adressen 192.168.56.33, det står 192.168.56.1"). Andra posten- svar från MAC-adressen för host2-maskinen till MAC-adressen för host1-systemet (" 192.168.56.33 har MAC-adress 01:00:27:77:e5:00"). Tredje och fjärde inlägg (ICMP begäran Och ICMP-svar) är utdata från ping-kommandot på host1. Sedan avbröts tcpdump . Innan du avslutar skriver tcpdump ut löpande statistik: antalet paket som fångats, tagits emot av filtret och kasserats av kärnan

Således erhöll host1-systemet, för att skicka en standardekobegäran till host2-maskinen, först MAC-adressen för host2-maskinen med hjälp av ARP-protokollet och skrev in den i sin ARP-tabell med bindning till IP-adressen.

Analys av trafiken vid transportlagret (TCP, UDP) med tcpdump

Anta att en viss WEB-server är installerad på host2-systemet. Låt oss försöka på host1-maskinen att öppna en sida från denna webbserver med lynx-konsolens webbläsare:

Värd1:~# lodjur 192.168.56.33

På en annan konsol, kör först tcpdump med filtreringsalternativ:

Värd1:~# tcpdump -n -i eth0 värd 192.168.56.33 och port 80 tcpdump: utförlig utdata undertryckt, använd -v eller -vv för full protokollavkodningslyssning på eth0, länktyp EN10MB (Ethernet), fångststorlek 65535 byte 15 :44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flaggor [S], sekv 1209026235, vinst 5840, optioner , längd 0 15:44:137.618 IP 15:44:318.618.618.618.618. 1 92.168.56.1.41533 : Flaggor , sekv 370041518, ack 1209026236, vinst 5792, optioner , längd 0 15:44:37.838157 5: 44:37.839254 IP 192.168.56.3 > 3.156.1.315.1.815.1.315.1.315.1.315. , seq 1:222, ack 1, vinst 46, optioner , längd 221 15:44:37.839921 IP 192.168.56.33.80 > 192 .168.56.1.41533 : Flaggor [.], ack 222, vinst 1716, optioner , längd 4:315 : 4 : 415 . 37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flaggor [.], ack 446, vinst 54, optioner , längd 0 15:44:37.849738 IP 192.168.56.31.416 > 8.168.51.31.416 > 8.33.416 s, SEQ 446, ACK 222, Win 1716, Options, Length 0 15: 44: 37.850366 IP 192.168.56.1.41533> 192.168.56.33.80: Flags, SEQ 447:7, Options, SEQ 447: 7TH: 851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flaggor [.], ack 223, vinst 1716, optioner, längd 0 …

I detta exempel klienten (192.168.56.1) från TCP-port 41533 upprättar en anslutning med servern (192.168.56.33) som lyssnar på port 80, gör en begäran, tar emot nödvändig data och anslutningen avslutas.

TCP-segmenthuvud, förutom destinations- och avsändarportnummer innehåller ett antal parametrar:

  • Sekvensnummer(seq). Anger byteordningen i strömmen som skickas till nätverket (förskjutningen av den första byten i segmentet i förhållande till början av dataströmmen).
  • Bekräftat nummer(ACK). Det maximala antalet byte i det mottagna segmentet ökas med 1. Bekräftelser som skickas till avsändaren fungerar samtidigt som en begäran om en ny databit.
  • Kontroll flaggor(SYN - S, ACK, FIN -F, RST - R, PSH - P, URG)
  • Fönster(win) - antalet databytes som förväntas av avsändaren av data, med början från vars bytenummer anges i ack-fältet. För att optimera överföringen väntar avsändaren inte på en bekräftelse för varje sänt segment, utan kan skicka en grupp till segmentet till nätverket (men i byte inte mer än fönsterstorleken). Om kanalkvaliteten är dålig (många återsändningsförfrågningar, bekräftelser går förlorade) reduceras fönstret, om det är bra ökar fönstret.
  • alternativ. Används för att lösa hjälpuppgifter. Till exempel sänds MSS (Maximum segment size) - den maximala segmentstorleken.

Processen att upprätta en dubbelriktad TCP-anslutning återspeglas i de tre första tcpdump-posterna:

  • Klienten skickar ett TCP-segment till servern med SYN-flaggan inställd, det initiala "slumpmässiga" numret (1209026235) från vilket byte kommer att numreras i strömmen som den skickar, den maximala fönsterstorleken - mängden som servern får sända utan bekräftelse från klienten (5840): 15: 44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flaggor [S], seq 1209026235, vinst 5840, optioner 5840
  • Servern skickar ett TCP-segment till klienten med SYN- och ACK-flaggor inställda, det initiala "slumpmässiga" numret (370041518) från vilket bytes kommer att numreras i strömmen den skickar, och klientens maximala fönsterstorlek (5792). Detta segment är också en bekräftelse på en anslutningsbegäran från klienten: 15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 370041518, ack 261518, ack 261, 9
  • Klienten skickar ett TCP-segment till servern med ACK-flaggan inställd, vilket är en bekräftelse på mottagandet av segmentet från servern (sedan visar tcpdump de relativa värdena för seq och ask): ], ack 1, win 46, alternativ, längd

Efter det anslutningen anses upprättad.

I nästa par av poster skickar klienten en begäran om applikationslagerprotokoll (221 byte) till servern i segmentets datasektion och får en bekräftelse från servern att den har tagits emot:

15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flaggor , seq 1:222, ack 1, vinst 46, optioner , längd 221 15:434:921.8 IP 5:434:921.8 192.168.56.1 .41533: Flags [.], ack 222, win 1716, options , length 0

I detta fall används PSH (P)-flaggan för att meddela den sändande sidan att den mottagande sidan är redo att ta emot data. Därefter skickar servern data till klienten (445 byte) och får en bekräftelse på mottagandet från den:

15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flaggor , sekv 1:446, ack 222, vinst 1716, optioner , längd 445 15:841:15.841:15.841:15.841. 4 1533 > 192,168. 56.33 .80: Flaggor [.], ack 446, vinst 54, optioner, längd 0

Anslutningen avslutas sedan på initiativ av servern. Servern skickar ett paket med FIN-flaggan:

15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flaggor , seq 446, ack 222, win 1716, options , length 0

Klienten som svar skickar också ett paket med FIN-flaggan, nuvarande paket samtidigt är det en bekräftelse på mottagandet av en begäran om att avsluta anslutningen från servern:

15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flaggor , seq 222, ack 447, win 54, options , length 0

Servern behöver bara bekräfta mottagandet av FIN-segmentet från klienten:

15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flaggor [.], ack 223, vinst 1716, optioner , längd 0

tcpdumps reaktion på ett försök att ansluta till en stängd port 23/tcp:

21:56:14.381091 IP 192.168.56.1.54040 > 192.168.56.33.23: Flaggor [S], sekv 2956835311, vinst 5840, optioner , längd 0 21:56:196.138. > 192.168.56.1.54040 : Flaggor , seq 0, ack 2956835312, vinst 0, längd 0

I det här exemplet, från system 192.168.56.1, görs ett försök att ansluta till en icke-existerande TCP-tjänst på värd 192.168.56.33. Fjärrsystemet svarar genom att skicka ett segment med RST-flaggan (återställ anslutning).

tcpdumps svar på att skicka ett UDP-datagram till en stängd port 53/udp:

21:55:16.925906 IP 192.168.56.1.41979 > 192.168.56.33.53: 6561+ A? www.tut.by (28) 21:55:16.926615 IP 192.168.56.33 > 192.168.56.1: ICMP 192.168.56.33 udp-port 53 går inte att nå, längd 64

I det här exemplet gjordes ett försök att skicka ett UDP-datagram till en icke-existerande port på ett fjärrsystem. UDP svarar vanligtvis genom att skicka ett ICMP-meddelande till källnoden om att porten inte kan nås.

Andra exempel på att använda kommandot tcpdump:

# tcpdump -n -i ppp0 eter src 11:20:b3:d8:d8:2c

Skriv ut nätverksstatistik från ppp0-gränssnittet (-i ppp0) utan IP till DNS-upplösning (-n) för de ramar vars källa MAC-adress är 11:20:b3:d8:d8:2c.

# tcpdump -n -e -i vlan0 eterutsändning

Sänd ut trafik från vlan0-gränssnittet.

# tcpdump -n -i eth0 src 192.168.66.1

Nätverkspaket filtreras, i vars rubrik IP-adressen 192.168.66.1 anges i källfältet.

# tcpdump -n -i eth0 värd 192.168.66.1

Paket filtreras där denna IP-adress anges som källan eller destinationen för paketet.

# tcpdump -n -i eth0 src net 10.0.0.0 mask 255.0.0.0

Paket filtreras där värdarna för 10.0.0.0/8-nätverket anges som källa.

# tcpdump -n -i eth0 icmp

Mata endast ut ICMP-paket från gränssnittet eth0.

På detta kanske jag avslutar den aktuella artikeln. När nya exempel dyker upp kommer jag att komplettera artikeln. Jag hoppas att materialet kommer att vara användbart inte bara för mig

I artikeln användes exempel och material från intuitföreläsningar.

Med vänlig hälsning, Mc.Sim!

Om du behöver analysera eller fånga upp nätverkspaket i Linux, är det bäst att använda konsolverktyget för detta. tcpdump. Men problemet uppstår i dess ganska komplicerade hantering. Det kommer att verka för en vanlig användare att det är obekvämt att arbeta med verktyget, men detta är bara vid första anblicken. Artikeln kommer att förklara hur tcpdump fungerar, vilken syntax den har, hur man använder den, och kommer också att ge många exempel på dess användning.

Läs också: Guider för att sätta upp en internetanslutning i Ubuntu , Debian , Ubuntu Server

De flesta utvecklare av Linux-baserade operativsystem inkluderar verktyget tcpdump i listan över förinstallerade, men om det av någon anledning inte finns i din distribution kan du alltid ladda ner och installera det via "Terminal". Om ditt operativsystem är baserat på Debian, och det här är Ubuntu, Linux Mint, Kali Linux och liknande måste du köra detta kommando:

sudo apt installera tcpdump

Under installationen måste du ange ett lösenord. Observera att den inte visas när du skriver, du måste också ange en symbol för att bekräfta installationen "D" och tryck Stiga på.

Om du har Red Hat, Fedora eller CentOS, kommer installationskommandot att se ut så här:

sudo yam installera tcpdump

Efter att verktyget har installerats kan du omedelbart använda det. Detta och många andra saker kommer att diskuteras längre fram i texten.

Syntax

Som alla andra kommandon har tcpdump sin egen syntax. Genom att veta det kan du ställa in alla nödvändiga parametrar som kommer att beaktas när du utför kommandot. Syntaxen är som följer:

tcpdump options -i gränssnittsfilter

När du använder kommandot måste du ange vilket gränssnitt som ska spåras. Filter och alternativ är inga obligatoriska variabler, men de möjliggör mer anpassning.

alternativ

Även om alternativet inte behöver anges, är det fortfarande nödvändigt att lista de tillgängliga. Tabellen visar inte hela listan, utan bara de mest populära, men de räcker mer än väl för att lösa de flesta uppgifterna.

Alternativ Definition
-A Låter dig sortera paket med ASCII-format
-l Lägger till rullningsfunktion
-jag Efter inmatning måste du ange nätverksgränssnittet som ska övervakas. För att börja övervaka alla gränssnitt, skriv in ordet "vilket som helst" efter alternativet
-c Avslutar spårningsprocessen efter att ha kontrollerat det angivna antalet paket
-w genererar textfil med testrapport
-e Visar internetanslutningsnivån för datapaketet
-L Visar endast de protokoll som stöds av det angivna nätverksgränssnittet
-C Skapar en annan fil under pakethämtning om dess storlek är större än den givna
-r Öppnar en fil för läsning som skapades med alternativet -w
-j TimeStamp-format kommer att användas för att skriva paket
-J Låter dig se alla tillgängliga TimeStamp-format
-G Fungerar för att skapa en fil med loggar. Alternativet kräver också ett tillfälligt värde, varefter en ny logg skapas.
-v, -vv, -vvv Beroende på antalet tecken i alternativet kommer utmatningen av kommandot att bli mer detaljerad (ökningen är direkt proportionell mot antalet tecken)
-f Visar domännamnet för IP-adresserna i utgången
-F Tillåter att läsa information inte från nätverksgränssnittet, utan från den angivna filen
-D Visar alla nätverksgränssnitt som kan användas
-n Inaktiverar visning av domännamn
-Z Anger användaren under konto som alla filer kommer att skapas
-K Hoppa över kontrollsummaanalys
-q Kort informationsdemonstration
-H Tillåter detektering av 802.11s-rubriker
-Jag Används för att fånga paket i monitorläge

Efter att ha analyserat alternativen, lite lägre kommer vi att gå direkt till deras applikationer. Under tiden kommer filter att övervägas.

Filter

Som nämndes i början av artikeln kan du lägga till filter i tcpdump-syntaxen. Nu kommer de mest populära av dem att övervägas:

Alla ovanstående filter kan kombineras med varandra, så vid utfärdandet av ett kommando kommer du bara att se den information du vill se. För att förstå användningen av ovanstående filter mer i detalj är det värt att ge exempel.

Exempel på användning

Nu kommer den vanliga syntaxen för kommandot tcpdump att ges. Det är omöjligt att lista dem alla, eftersom det kan finnas ett oändligt antal av deras variationer.

Visa listan över gränssnitt

Det rekommenderas att varje användare först kontrollerar listan över alla sina nätverksgränssnitt som kan spåras. Från tabellen ovan vet vi att för detta måste vi använda alternativet -D, så kör följande kommando i terminalen:

Som du kan se finns det åtta gränssnitt i exemplet, som kan ses med kommandot tcpdump. Artikeln kommer att ge exempel på ppp0, du kan använda vilken annan som helst.

Normal trafikfångst

Om du behöver spåra ett nätverksgränssnitt kan du göra detta med alternativet -jag. Glöm inte att ange namnet på gränssnittet efter att ha angett det. Här är ett exempel på ett sådant kommando:

sudo tcpdump -i ppp0

Observera: före själva kommandot måste du ange "sudo", eftersom det kräver superanvändarrättigheter.

Obs: efter att ha tryckt på Enter kommer "Terminalen" kontinuerligt att visa infångade paket. För att stoppa deras flöde måste du trycka på tangentkombinationen Ctrl + C.

Om du kör kommandot utan ytterligare alternativ och filter kommer du att se följande format för att visa spårade paket:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flaggor , seq 1:595, ack 1118, vinst 6494, optioner , längd 594

Där det är markerat:

  • blå - tiden då paketet togs emot;
  • grön - avsändarens adress;
  • lila - mottagarens adress;
  • grå - ytterligare information om tcp;
  • röd - paketstorlek (visas i byte).

Denna syntax har förmågan att visas i ett fönster "Terminal" utan några ytterligare alternativ.

Fånga trafik med alternativet -v

Som bekant från tabellen, alternativet -v låter dig öka mängden information. Låt oss ta ett exempel. Låt oss kolla samma gränssnitt:

sudo tcpdump -v -i ppp0

Här kan du märka att följande rad dök upp i utgången:

IP (tos 0x0, ttl 58 , id 30675, offset 0, flaggor , proto TCP (6) , längd 52

Där det är markerat:

  • orange - protokollversion;
  • blått - protokollets livslängd;
  • grön - fälthuvudets längd;
  • lila - tcp-paketversion;
  • röd - paketstorlek.

Du kan också lägga till ett alternativ till kommandosyntaxen -vv eller -vvv, vilket ytterligare kommer att öka mängden information som visas på skärmen.

Alternativ -w och -r

Alternativtabellen nämnde möjligheten att lagra all utdata i separat fil så att du kan se dem senare. Detta är alternativet -w. Att använda det är ganska enkelt, ange bara det i kommandot och ange sedan namnet på den framtida filen med tillägget ".pcap". Låt oss ta en titt på ett exempel:

sudo tcpdump -i ppp0 -w file.pcap

Observera: när du skriver loggar till en fil visas ingen text på skärmen "Terminal".

När du vill se den inspelade utgången måste du använda alternativet -r, varefter du skriver namnet på den tidigare inspelade filen. Den tillämpas utan andra alternativ och filter:

sudo tcpdump -r file.pcap

Båda dessa alternativ är bra när du behöver lagra stora mängder text för senare analys.

Filtrering efter IP

Från filtertabellen vet vi det dst låter dig visa på konsolskärmen endast de paket som togs emot av adressen som anges i kommandosyntaxen. Därför är det mycket bekvämt att se paketen som tas emot av din dator. För att göra detta behöver du bara ange din IP-adress i kommandot:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Som du kan se, förutom dst, i kommandot registrerade vi också filtret ip. Med andra ord sa vi åt datorn att vara uppmärksam på deras IP-adress när de valde paket, och inte på andra parametrar.

Du kan också filtrera utgående paket efter IP. Låt oss ta vår IP som ett exempel. Det vill säga, nu kommer vi att spåra vilka paket som skickas från vår dator till andra adresser. För att göra detta, kör följande kommando:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Som du kan se har vi ändrat filtret i kommandosyntaxen dstsrc, och därigenom uppmanar maskinen att söka efter avsändaren via IP.

Filtrering efter HOST

I analogi med IP i kommandot kan vi ange ett filter värd att sålla bort paket med värden av intresse. Det vill säga, i syntaxen, istället för IP-adressen för avsändaren / mottagaren, måste du ange dess värd. Det ser ut så här:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

På bilden kan du se det "Terminal" endast de paket som skickades från vår IP till google.com-värden visas. Som du förstår kan du ange vilken annan som helst istället för Google-värden.

Som i fallet med filtrering efter IP, i syntaxen dst kan ersättas med src för att se paketen som skickas till din dator:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Observera: värdfiltret måste komma efter dst eller src, annars kommer kommandot att ge ett fel. Vid filtrering efter IP kommer tvärtom dst och src före ip-filtret.

Använder och och eller filtret

Om du behöver använda flera filter samtidigt i ett kommando, måste du använda filtret för detta och eller eller(beroende på fallet). Genom att ange filter i syntaxen och separera dem med dessa operatorer "får" du dem att fungera som en. Till exempel ser det ut så här:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 eller ip src 95.47.144.254

Från syntaxen för kommandot är det tydligt att vi vill visa "Terminal" alla paket som skickades till adressen 95.47.144.254 och paket som tagits emot av samma adress. Du kan också ändra några av variablerna i detta uttryck. Till exempel, istället för IP, ange HOST eller byt ut adresserna direkt.

Port och portrange filter

Filtrera hamn bra i de fall du behöver få information om paket med en specifik port. Så om du bara vill se DNS-svar eller frågor måste du ange port 53:

sudo tcpdump -vv -i ppp0 port 53

Om du vill se http-paket måste du ange port 80:

sudo tcpdump -vv -i ppp0 port 80

Det är bland annat möjligt att spåra en rad portar på en gång. För detta används ett filter. Hamnområdet:

sudo tcpdump portrange 50-80

Som du kan se, i samband med filtret Hamnområdet behöver inte specificeras ytterligare alternativ. Du behöver bara ställa in intervallet.

Protokollfiltrering

Du kan också endast visa trafik som matchar ett visst protokoll. För att göra detta, använd namnet på just detta protokoll som ett filter. Låt oss titta på ett exempel utp:

sudo tcpdump -vvv -i ppp0 udp

Som du kan se på bilden, efter att ha utfört kommandot i "Terminal" endast paket med protokollet visades utp. Följaktligen kan du filtrera efter andra, t.ex. arp:

sudo tcpdump -vvv -i ppp0 arp

eller tcp:

sudo tcpdump -vvv -i ppp0 tcp

nätfilter

Operatör netto hjälper till att filtrera bort paket baserat på deras nätverksbeteckning. Att använda det är lika enkelt som resten - du måste ange attributet i syntaxen netto, ange sedan nätverksadressen. Här är ett exempel på ett sådant kommando:

sudo tcpdump -i ppp0 net 192.168.1.1

Filtrering av paketstorlek

Vi har inte täckt ytterligare två intressanta filter: mindre Och större. Från tabellen med filter vet vi att de tjänar till att visa datapaket större ( mindre) eller mindre ( större) av den storlek som angavs efter att attributet angavs.

Låt oss säga att vi bara vill övervaka paket som inte överstiger 50-bitarsmärket, då kommer kommandot att se ut så här:

sudo tcpdump -i ppp0 mindre 50

Låt oss nu visa in "Terminal" paket större än 50 bitar:

sudo tcpdump -i ppp0 större än 50

Som du kan se tillämpas de på samma sätt, den enda skillnaden är i namnet på filtret.

Slutsats

I slutet av artikeln kan man dra slutsatsen att kommandot tcpdumpär ett utmärkt verktyg med vilket du kan spåra alla datapaket som överförs över Internet. Men för detta räcker det inte att bara skriva in själva kommandot "Terminal". Du kan uppnå det önskade resultatet endast om du använder alla typer av alternativ och filter, såväl som deras kombinationer.

Tcpdump är en extremt praktisk nätverksanalysator som hjälper mycket med båda nätverksadministratörer och säkerhetsvakterna. Naturligtvis, för att få maximal information när du arbetar med tcpdump, är det helt enkelt nödvändigt att ha en förståelse för TCP / IP-protokollstacken. För enkelhetens skull kan du använda mer bekväma och intelligenta program, till exempel, men ofta finns det situationer när det inte är möjligt att installera ytterligare tjänster på den testade maskinen, och då är tcpdump helt enkelt oersättlig, administratören, för att analysera paket , vaknar inte för att lägga på en unix-server X-Windows-teman Dessutom, på de flesta unix-system, kommer verktyget tcpdump som standard.

Att förstå TCP/IP-protokollet ger ett brett utrymme för användning av analysatorn och felsökning och felsökning av nätverket genom att analysera paket. Eftersom den optimal användning detta verktyg kräver en god förståelse nätverksprotokoll och deras arbete, det visar sig vara en rolig situation där ingenjören i alla fall behöver känna till och förstå mekanismerna för dataöverföring i nätverket. Inklusive tcpdump är användbart på alla sätt, från felsökning till självutbildning.

Nedan finns några alternativ som hjälper dig att använda det här verktyget på det mest kompletta och detaljerade sättet, särskilt eftersom alla dessa lådor och nycklar är ganska lätta att glömma, och dessa exempel är mycket användbara för att fräscha upp minnet.

Den första switchen som används är -n som förbjuder försök att konvertera adresser till domännamn, vilket ger oss rena IP-adresser med portar.

Den andra är -X som ställer in utdata för varje paket som hex ( hexadecimalt system) och ASCII-innehållet i paketet.
Och det sista alternativet är -S som ersätter utdata från relativ TCP-numrering med absolut numrering. Poängen är att med relativ numrering kan vissa problem vara dolda från din uppmärksamhet.

Du måste förstå att den största fördelen med tcpdump jämfört med andra verktyg är att det möjliggör detaljerad och manuell analys av paket. Du måste också komma ihåg att som standard använder tcpdump endast de första 68 byten av paketet, inkl. om du behöver se mer, bör du använda -s nummeromkopplaren, där nummer är antalet byte att fånga. Om numret är satt till 0 kommer en fullständig paketfångning att ske, så det är bättre att använda värdet 1514, vilket ger en fullständig infångning av standarden, för Ethernet-nätverk, paket.

Lista över de mest använda nycklarna:
-c: ställ in för att kontrollera storleken på fångstfilen före varje nästa inspelning av det fångade paketet, om storleken är större, sparas filen och inspelningen går till en ny fil
-e : skriv ut Ethernet-huvud (länklager) på varje dumprad
-i any: lyssna på alla gränssnitt, om du behöver all trafik.
-n: Inaktiverar översättning av adresser till domän- eller symbolnamn
-nn: Inaktivera översättning av adresser och portar till domän- eller symbolnamn
-q: Skriv ut information kort, till priset av att protokollinformationen minskar.
-X: mata ut både hex- och ASCII-innehåll i paketet
-v, -vv, -vvv: Ange utdata ytterligare information om infångade paket, vilket möjliggör en bredare analys.
Några exempel att använda:

# Standardpaketutmatning
tcpdump -nS
# Utökad standardutgång
tcpdump -nnvvS
# Djup paketanalys
tcpdump -nnvvXS
# Mest detaljerad trafikinformation
tcpdump -nnvvXSs 1514

Med uttryck kan du utföra mer riktade genomsökningar och definiera trafiktyper. Möjligheten att använda uttryck gör tcpdump till ett mycket produktivt verktyg i händerna på en sysadmin. Det finns tre huvudtyper av uttryck: typ, dir och proto.
Alternativen för typuttrycket är host, net och port.
För att uttrycka riktningen som ges av dir är alternativen src, dst, src eller dst, och src och dst tillgängliga.
Några standarduttryck:

host // analysera trafik baserat på IP-adress (fungerar även med symboliska namn om -n inte är inställt)
tcpdump värd 1.2.3.4

src, dst // analysera trafik endast för en specifik destination eller sändare
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6

net // fånga upp trafik som tillhör ett specifikt nätverk
tcpdump net 1.2.3.0/24

proto // fungerar med tcp, udp och icmp. Man måste komma ihåg att proto inte nämns
tcpdump icmp

port // analysera trafik från en specifik port (inkommande eller utgående)
tcpdump port 3389

src, dst port // filter baserat på inkommande eller utgående port
tcpdump src port 1025
tcpdump dst port 3389

Men det mest kraftfulla verktyget är operander, som låter dig ställa in villkor för uttryck och alternativ för mer detaljerad isolering av information om den analyserade trafiken.

OCH
och eller &&
ELLER
eller eller ||
BORTSETT FRÅN
inte eller!

TCP-trafik från resurs 10.15.123.33 med destinationsport 3379:

# tcpdump -nnvvS tcp och src 10.15.123.33 och dst port 3379

Trafik som kommer från nätverk 192.168 med destination på nätverk 10 eller 172.16:

# tcpdump -nvX src net 192.168.0.0/16 och dst net 10.0.0.0/8 eller 172.16.0.0/16

Icke-ICMP-trafik med destination 192.168.0.2 och från nätverk 172.16:

# tcpdump -nvvXSs 1514 dst 192.168.0.2 och src net 172.16.0.0/16 och inte icmp

Trafik från värdarna Eros eller Ares , men går inte till standard SSH-porten (detta uttryck kräver namnupplösning):

# tcpdump -vv src eros eller ares och inte dst port 22

Som du kan se från exemplen ovan kan vi bygga vilket uttryck som helst, för vilket syfte som helst. Med hjälp av komplex syntax kan vi också utesluta alla typer av trafik från analysen.

Tänk också på att vi kan skapa frågor som inkluderar grupper och pooler av alternativ som ges i en enda fråga. Men för att tcpdump-verktyget ska uppmärksamma dem måste de placeras inom parentes, med uttrycket i enkla citattecken:
Trafik som kommer från värd 10.0.2.4 till destinationsportar 3379 eller 22:
# tcpdump 'src 10.0.2.4 och (dst port 3379 eller 22)'

Det är också möjligt att filtrera baserat på TCP-flaggor, till exempel för att isolera SYN- eller RST-paket:

Analysera alla URG-paket:
# tcpdump 'tcp & 32 != 0'

Analysera alla ACK-paket:
# tcpdump 'tcp & 16 != 0'

Analysera alla PSH-paket:
# tcpdump 'tcp & 8 != 0'

Analysera alla RST-paket:
# tcpdump 'tcp & 4 != 0'

Analysera alla SYN-paket:
# tcpdump 'tcp & 2 != 0'

Kommandot tcpdump kallas också en paketsniffare.

Kommandot tcpdump fungerar på de flesta varianter av UNIX-operativsystemet. tcpdump låter dig spara infångade paket så att vi kan använda det infångade paketet för vidare analys. Den sparade filen kan visas med samma tcpdump-kommando. Vi kan också använda programvaraöppen källkod som Wireshark för att läsa tcpdump PCAP-filer.

I den här lektionen kommer vi att titta på några praktiska exempel på hur man använder kommandot tcpdump.

1. Fånga paket från ett specifikt Ethernet-gränssnitt med tcpdump -i

När du kör kommandot tcpdump utan något alternativ, kommer det att fånga alla paket som passerar genom alla gränssnitt. Alternativ -jag tcpdump-kommandon, låter dig filtrera efter en specifik Ethernet-gränssnitt.

$ tcpdump -i eth1 12:59:41.967250 ARP, Begär vem-har free.msk.ispsystem.net berätta gw.msk.ispsystem.net, längd 46 12:59:41.967257 ARP, Begär vem-har reserve.scoffserver. berätta gw.msk.ispsystem.net, längd 46 12:59:41..44141 > wdc-ns1.ispsystem.net.domain: 14799+ PTR? 184.48.146.82.in-addr.arpa. (44) ...

I det här exemplet fångar tcpdump alla strömpaket på gränssnittet eth1 och visar dem på standardutdata.

Notera:

Editcap-verktyget används för att välja eller ta bort specifika paket från en dumpfil och översätta dem till ett givet format.

2. Fånga endast N antal paket med tcpdump -c

Att köra kommandot tcpdump ger paket tills du avbryter kommandot tcpdump. Använder alternativet -c du kan ange antalet paket som ska hämtas.

$ tcpdump -c 2 -i eth0 lyssnar på eth0, länktyp EN10MB (Ethernet), inspelningsstorlek 65535 byte 13:01:35.165898 ARP, Begär vem-har 213.159.211.80 tell gw.msk.ispsystem 3 längd 46. :01:35..35123 > wdc-ns1.ispsystem.net.domain: 7254+ PTR? 80.211.159.213.in-addr.arpa. (45) 2 paket fångade 7 paket som tagits emot av filter 0-paket som släpps per kärna

kommandot tcpdump fångade endast 2 paket från gränssnittet eth0.

Notera:

Mergecap och TShark: Mergecap är ett paketdumpningsverktyg som slår samman flera paket till en enda dumpfil. Tshark är ett kraftfullt nätverkspaketfångstverktyg som kan användas för att analysera nätverkstrafik. Den levereras med en Wireshark nätverksdistributionsanalysator.

3. Visa infångade paket i ASCII med tcpdump -a

Följande tcpdump-syntax skriver ut ett paket i ASCII.

$ tcpdump -A -i eth0 13:03:06.516709 IP 213.132.93.178..vlsi-lm: Flags [.], ack 3120779210, vinst 254, längd 0 E..( [e-postskyddad]..].....b...%.=...O.P....... 13:03:06..35313 > wdc-ns1.ispsystem.net.domän: 13562+ PTR? 178.93.132.213.in-addr.arpa. (45) E..I9.@ [e-postskyddad]}