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
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
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í.
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.
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
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.
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:
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é.
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:
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:
Tato syntaxe má možnost vystupovat v okně "Terminál" bez použití dalších možností.
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:
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:
Také v syntaxi příkazu můžete zadat možnost -vv nebo -vvv , což dále zvýší množství informací zobrazených na obrazovce.
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:
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:
Obě tyto možnosti jsou perfektní, když potřebujete uložit velké množství textu pro pozdější analýzu.
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:
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:
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.
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:
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.
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:
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é.
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:
Pokud chcete zobrazit http pakety, musíte zadat port 80:
sudo tcpdump -vv -i ppp0 port 80
Příklad:
Mimo jiné je možné sledovat rozsah portů najednou. Pro tento účel se používá portrange filter:
sudo tcpdump portrange 50-80
Jak vidíte, není nutné specifikovat další možnosti ve spojení s filtrem portrange . Stačí nastavit rozsah.
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:
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íť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:
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:
Nyní se zobrazí v balících "Terminal", které jsou větší než 50 bitů:
sudo tcpdump -i ppp0 greater 50
Příklad:
Jak vidíte, jsou aplikovány stejně, rozdíl je pouze v názvu filtru.
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.