Pokud potřebujete analyzovat nebo zachytit síťové pakety v Linuxu, je nejlepší použít konzolovou utilitu tcpdump . Problém nastává v jeho poměrně složitém řízení. Obvyklý uživatel zjistí, že práce s nástrojem je nepohodlná, ale je to jen na první pohled. Článek vám řekne, jak je tcpdump strukturován, jaká syntaxe má, jak ji používat, a také uvádí řadu příkladů jeho použití.

Přečtěte si také: Příručky pro nastavení připojení k internetu v systému Windows Ubuntu , Debian , Ubuntu Server

Instalace

Většina vývojářů operačních systémů založených na Linuxu obsahuje nástroj tcpdump v předinstalovaném seznamu, ale pokud z nějakého důvodu není ve vaší distribuci, můžete ho kdykoli stáhnout a nainstalovat přes "Terminal" . Pokud je váš operační systém založen na Debianu, a to je Ubuntu, Linux Mint, Kali Linux a podobně, musíte spustit tento příkaz:

sudo apt install tcpdump

Při instalaci je třeba zadat heslo. Všimněte si, že při psaní se nezobrazuje a musíte zadat znak "D" a stisknutím klávesy Enter potvrdit instalaci.

Pokud máte Red Hat, Fedora nebo CentOS, příkaz pro instalaci bude vypadat takto:

sudo yam install tcpdump

Po instalaci utility je možné ji použít ihned. O tomto a mnohem více se bude diskutovat dále v textu.

Čtěte také: Instalační příručka pro server Ubuntu

Syntaxe

Jako každý jiný příkaz, tcpdump má vlastní syntaxi. Když je znáte, můžete nastavit všechny potřebné parametry, které budou vzaty v úvahu při provádění příkazu. Syntaxe je následující:

tcpdump опции -i интерфейс фильтры

Při použití příkazu musíte zadat rozhraní pro sledování. Filtry a možnosti nejsou povinnými proměnnými, ale umožňují flexibilnější přizpůsobení.

Možnosti

Přestože nemusíte zadávat nějakou možnost, je třeba uvést dostupné možnosti. Tabulka zobrazuje ne všechny jejich seznamy, ale pouze ty nejoblíbenější, ale jsou více než dostatečné k vyřešení většiny úkolů.

Možnost Definice
-A Umožňuje třídit pakety ve formátu ASCII
-l Přidá funkci posouvání
-i Po zadání musíte zadat síťové rozhraní, které bude sledováno. Chcete-li začít sledovat všechna rozhraní, zadejte po volbě slovo "libovolné"
-c Ukončí proces sledování po ověření zadaného počtu paketů
-w Generuje textový soubor s ověřovacím protokolem
-e Označuje úroveň připojení k Internetu datového paketu
-L Výstup pouze těch protokolů, které podporují zadané síťové rozhraní
-C Vytvoří jiný soubor během psaní balíčku, je-li jeho velikost větší než zadaný
-r Otevře soubor čtení, který byl vytvořen pomocí volby -w
-j Pro záznam paketů bude použit formát TimeStamp
-J Umožňuje zobrazit všechny dostupné formáty TimeStamp
-G Slouží k vytvoření souboru s protokoly. Možnost také vyžaduje dočasnou hodnotu, po které bude vytvořen nový protokol
-v, -vv, -vvv V závislosti na počtu znaků ve volbě bude výstup příkazu podrobnější (zvýšení je přímo úměrné počtu znaků)
-f Výstup zobrazuje název domény IP adresy
-F Umožňuje číst informace nejen ze síťového rozhraní, ale z určeného souboru
-D Demonstrace všech síťových rozhraní, které můžete použít
-n Deaktivuje zobrazení názvů domén
-Z Určuje uživatele, jehož účet vytvoří všechny soubory
-K Chybí analýza kontrolního součtu
-q Demonstrace stručných informací
-H Detekuje záhlaví zařízení 802.11
-I Používá se při zachycování paketů v režimu monitoru

Po rozbalení možností, těsně níže, půjdeme přímo do jejich aplikací. Zatím budou filtre zváženy.

Filtry

Jak bylo zmíněno na samém začátku článku, můžete do syntaxe tcpdump přidat filtry. Nyní bude nejoblíbenější z nich zvažováno:

Filtr Definice
host Určuje název hostitele
netto Určuje podsíť a síť IP
ip Slouží pro adresu protokolu
src Zobrazuje pakety odeslané z zadané adresy
dst Zobrazí pakety, které byly přijaty zadanou adresou
arp, udp, tcp Filtrování podle jednoho z protokolů
port Zobrazuje informace týkající se konkrétního portu
a nebo Používá se ke sloučení několika filtrů do příkazu
méně, větší Výstup paketů menší nebo větší než zadaná velikost

Všechny výše uvedené filtry lze vzájemně kombinovat, takže při zadání příkazu uvidíte pouze informace, které chcete vidět. Abychom lépe pochopili použití výše uvedených filtrů, stojí za to uvést příklady.

Čtěte také: Nejčastěji používané příkazy v "Terminálu" Linuxu

Příklady použití

Běžně používané možnosti syntaxe pro příkaz tcpdump jsou nyní uvedeny v seznamu. Všechny z nich nemohou být uvedeny, protože jejich variace mohou být nekonečné číslo.

Zobrazte seznam rozhraní

Doporučuje se, aby každý uživatel nejprve zkontroloval seznam všech síťových rozhraní, které lze sledovat. Z výše uvedené tabulky víme, že potřebujete použít volbu -D , takže spusťte následující příkaz v terminálu:

sudo tcpdump -D

Příklad:

Spuštění příkazu tcpdump s volbou d v linuxu

Jak vidíte, v příkladu je osm rozhraní, které můžete zobrazit příkazem tcpdump. Článek vám dá příklady s ppp0 , můžete použít jiné.

Normální provozní zachycení

Pokud potřebujete vysledovat jedno síťové rozhraní, můžete to provést pomocí volby -i . Nezapomeňte zadat název rozhraní po jeho zadání. Zde je příklad provedení příkazu:

sudo tcpdump -i ppp0

Poznámka: před samotným příkazem musíte zadat "sudo", protože to vyžaduje superuserovo právo.

Příklad:

příklad mapování provozu síťového rozhraní pomocí příkazu tcpdump bez použití možností a filtrů

Poznámka: po stisknutí klávesy Enter v "Terminálu" se budou zachycené pakety průběžně zobrazovat. Chcete-li zastavit jejich tok, musíte stisknout kombinaci kláves Ctrl + C.

Pokud spustíte příkaz bez dalších možností a filtrů, uvidíte následující formát pro zobrazení sledovaných paketů:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594

Kde je zvýrazněna barva:

  • modrá - doba přijetí balíčku;
  • oranžová - protokolová verze;
  • zelená - adresa odesílatele;
  • fialová - adresa příjemce;
  • šedá - další informace o tcp;
  • červená - velikost paketu (zobrazuje se v bajtech).

Tato syntaxe má možnost vystupovat v okně "Terminál" bez použití dalších možností.

Zachyťte provoz pomocí volby -v

Jak víte z tabulky, volba -v umožňuje zvýšit množství informací. Budeme analyzovat příklad. Podívejme se na stejné rozhraní:

sudo tcpdump -v -i ppp0

Příklad:

příklad mapování provozu síťového rozhraní pomocí příkazu tcpdump pomocí volby -v v linuxu

Zde vidíte, že ve výstupu se objevil následující řádek:

IP (tos 0x0, ttl 58 , id 30675, offset 0, flags [DF] , proto TCP (6) , length 52

Kde je zvýrazněna barva:

  • oranžová - protokolová verze;
  • modrá - délka života v protokolu;
  • zelená - délka pole záhlaví;
  • fialová - verze balíčku tcp;
  • červená - velikost balení.

Také v syntaxi příkazu můžete zadat možnost -vv nebo -vvv , což dále zvýší množství informací zobrazených na obrazovce.

Možnosti -w a -r

Tabulka možností uvedla možnost uložit všechna výstupní data do samostatného souboru, aby bylo možné je zobrazit později. Volba -w je za to zodpovědná. Chcete-li ji použít, je to poměrně jednoduché, stačí jej uvést na příkaz a potom zadat název budoucího souboru s příponou ".pcap" . Přemýšleme o příkladu:

sudo tcpdump -i ppp0 -w file.pcap

Příklad:

příklad volby -w v příkazu tcpdump v linuxu

Upozornění: během nahrávání záznamů se v souboru na obrazovce "Terminál" nezobrazuje žádný text.

Chcete-li zobrazit zaznamenaný výstup, musíte použít volbu -r , po které zapsat název dříve nahraného souboru. Používá se bez dalších možností a filtrů:

sudo tcpdump -r file.pcap

Příklad:

Příklad zobrazení dříve uloženého příkazového souboru tcpdump s volbou w

Obě tyto možnosti jsou perfektní, když potřebujete uložit velké množství textu pro pozdější analýzu.

IP filtrování

Z tabulky filtrů víme, že dst umožňuje zobrazovat pouze ty balíčky, které byly přijaty na adrese na obrazovce konzoly, jak je uvedeno v syntaxi příkazu. Proto je velmi výhodné prohlížet pakety přijaté v počítači. Chcete-li to provést, stačí zadat svou IP adresu v týmu:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Příklad:

příklad použití filtru dst a ip v příkazu tcpdump v linuxu

Jak vidíte, kromě dst jsme v týmu také napsali ip filtr. Jinými slovy jsme počítaču řekli, že při výběru balíčků bude věnovat pozornost své IP adrese, nikoliv dalším parametrům.

Pomocí protokolu IP můžete filtrovat a odesílat pakety. V příkladu vrátíme IP. Teď už budeme sledovat, které pakety jsou odesílány z našeho počítače na jiné adresy. Chcete-li to provést, spusťte následující příkaz:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Příklad:

příklad použití filtru src a ip v příkazu tcpdump v linuxu

Jak je vidět, v syntaxi příkazu jsme změnili dst filtr na src , čímž řekneme zařízení, aby hledal odesílatele podle IP.

Filtrování podle HOSTu

Analogicky s přístupem IP v příkazu můžeme specifikovat hostitelský filtr pro vyloučení paketů s hostitelem zájmu. To znamená, že v syntaxi místo IP adresy odesílatele / přijímače bude nutné určit jeho hostitele. Vypadá to takto:

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

Příklad:

Příklad použití filtru dst a hostitele v příkazu tcpdump v linuxu

Na obrázku je vidět, že v "Terminálu" jsou zobrazeny pouze ty pakety odeslané z naší IP adresy do domény google.com. Jak můžete vidět, místo hostitele google můžete zadat další.

Stejně jako u filtrování IP lze syntaxi dst nahradit src a zobrazit balíčky, které jsou odeslány do vašeho počítače:

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

Poznámka: hostitelský filtr musí být nastaven po dst nebo src, jinak bude příkaz generovat chybu. V případě filtrování IP, naopak dst a src jsou před filtrem ip.

Použijte a a filtr

Pokud potřebujete použít více filtrů najednou ve stejném příkazu, musíte použít filtr a / nebo filtr (v závislosti na případu). Specifikováním filtrů v syntaxi a jejich oddělením od tohoto operátora je "vynucuje", aby fungovalo jako jeden. Například to vypadá takto:

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

Příklad:

příklad použití a filtru v příkazu tcpdump v linuxu

Ze syntaxe příkazu je zřejmé, že chceme na obrazovce "Terminal" zobrazit všechny pakety, které byly odeslány na adresu 95.47.144.254 a pakety přijaté stejnou adresou. V tomto výrazu můžete také změnit některé proměnné. Například namísto IP zadejte HOST nebo nahradte adresy samotné.

Port a portrange filter

Filtr portů je ideální, když potřebujete získat informace o paketů s určitým portem. Pokud potřebujete pouze odpovědi nebo dotazy DNS, musíte zadat port 53:

sudo tcpdump -vv -i ppp0 port 53

Příklad:

příklad použití port filtru v příkazu tcpdump v Linuxu

Pokud chcete zobrazit http pakety, musíte zadat port 80:

sudo tcpdump -vv -i ppp0 port 80

Příklad:

příklad použití port filtru v příkazu tcpdump v Linuxu

Mimo jiné je možné sledovat rozsah portů najednou. Pro tento účel se používá portrange filter:

sudo tcpdump portrange 50-80

příklad použití filtru portrange v syntaxi příkazu tcpdump v linuxu

Jak vidíte, není nutné specifikovat další možnosti ve spojení s filtrem portrange . Stačí nastavit rozsah.

Filtrování podle protokolů

Můžete také zobrazit pouze provoz, který odpovídá jakémukoli protokolu. Chcete-li to provést, musíte použít název tohoto protokolu jako filtr. Podívejme se na příklad udp :

sudo tcpdump -vvv -i ppp0 udp

Příklad:

příklad filtrování příkazu tcpdump podle protokolu v linuxu

Jak je vidět na obrázku, po provedení příkazu byly v "Terminálu" zobrazeny pouze pakety s protokolem udp . Proto můžete provádět filtrování na jiných, například arp :

sudo tcpdump -vvv -i ppp0 arp

nebo tcp :

sudo tcpdump -vvv -i ppp0 tcp

Síť filtru

Síťový operátor pomáhá filtrovat pakety s ohledem na označení jejich sítě. Chcete-li ji použít stejně snadno jako ostatní - musíte zadat atribut net v syntaxi a zadejte síťovou adresu. Zde je příklad takového příkazu:

sudo tcpdump -i ppp0 net 192.168.1.1

Příklad:

příklad filtrování příkazu tcpdump označením sítě v linuxu

Filtrování podle velikosti paketu

Nezajímali jsme o dva další zajímavé filtry: čím dál tím víc . Z tabulky s filtry víme, že slouží k výstupu datových paketů větší ( menší ) nebo menší ( větší ) velikosti zadané po zadání atributu.

Předpokládejme, že chceme sledovat pouze pakety, které nepřesahují značku 50 bitů, pak příkaz vypadá takto:

sudo tcpdump -i ppp0 less 50

Příklad:

filtrují pakety podle velikosti filtru méně v příkazu tcpdump v linuxu

Nyní se zobrazí v balících "Terminal", které jsou větší než 50 bitů:

sudo tcpdump -i ppp0 greater 50

Příklad:

filtrování paketů podle filtru velikosti větší v příkazu tcpdump v linuxu

Jak vidíte, jsou aplikovány stejně, rozdíl je pouze v názvu filtru.

Závěr

Na konci článku můžete vyvodit závěr, že příkaz tcpdump je skvělý nástroj, pomocí něhož můžete sledovat jakýkoli datový paket odesílaný přes internet. Ale za to nestačí jen vstoupit do týmu v "Terminálu" . Dosažení požadovaného výsledku bude dosaženo, pouze pokud používáte nejrůznější možnosti a filtry, stejně jako jejich kombinace.