tcpdump je počítačový program pro analýzu paketů datové sítě. Umožňuje uživateli zobrazit síťové pakety (včetně TCP/IP), které jsou přenášeny nebo přijímány přes síť. V tomto krátkém článku ukážu, jak provést zachycení paketů pro analýzu síťového provozu pomocí tcpdump.
Seznam síťových rozhraní
Tcpdump potřebuje přístup k vaší síťové kartě, takže spusťte následující příkazy jako root (pomocí su nebo sudo ). Chcete-li vytisknout seznam síťových rozhraní dostupných v systému a na kterých může tcpdump zachytit spuštěné pakety
# tcpdump -D
V mém případě použiji ‚skutečný‘ nic, enp3s0.
Zachycování paketů
Otevřete webový prohlížeč (jen za účelem vygenerování síťového provozu) a spusťte následující příkaz:
# tcpdump -i <interface>
I bez otevřené stránky možná uvidíte nějakou síťovou aktivitu. Možná to „nějaké“ znamená hodně síťové aktivity. Ukončete pomocí ctrl-c a podívejte se na výsledky. Výstup zobrazuje paket na řádek s následujícími informacemi:
- Časové razítko
- Protokol (IP6 pro IPv6, IP pro IPv4)
- Původní hostitel (ip nebo název hostitele) a port
- Cílový hostitel (také IP nebo název hostitele) a port
- Příznaky TCP
- Pořadové číslo
- Číslo ACK
- Velikost okna
- Možnosti TCP
- Délka dat
Omezení výstupu
tcpdump -i <interface> -c <n>
Tímto příkazem se program ukončí po obdržení n pakety
Na snímku obrazovky můžete vidět spánek 2 příkaz spuštěný před tcpdump. To bylo jen proto, abych si dal 2 sekundy na načtení wikipedie do prohlížeče. Ale je to stejný typ výstupu jako předtím.
Skrýt jména
tcpdump -i <interface> -n
S přepínačem -n tcpdump nepřevede ip adresu nebo čísla portů na jména.
Filtry
Můžete instruovat tcpdump, aby zachytil pouze určité pakety. Chcete-li například zachytit pouze pakety https, nebo přesněji pakety na port 443, přidejte výraz:
tcpdump -i <interface> port <portnumber or portname>
Můžeme také zachytit pakety do nebo z nějakého hostitele pomocí následujícího výrazu
tcpdump -i <interface> host <ip address or hostname>
Nebo můžeme zachytit pakety nějakého protokolu pomocí:
tcpdump -i <interface> proto <protocol>
Kde protokol může být jeden z:icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp nebo tcp. U icmp, tcp a udp můžete klíčové slovo proto vynechat.
Můžeme také zkombinovat několik výrazů s ‚a‘ (nebo ‚&&‘), ‚nebo‘ (nebo ‚||‘) a ne (nebo ‚!‘) a seskupit je do závorek. Existuje mnohem více filtrů, které můžete vytvořit, podívejte se na manuálovou stránku pcap-filter (man pcap-filter ) pro získání nápovědy k syntaxi.
Zvýšení výřečnosti výstupu
Ke zvýšení výřečnosti použijte parametr -v. Z manuálové stránky tcpdump:
-v Při analýze a tisku vytvářejte (o něco více) podrobný výstup. Vytiskne se například doba trvání, identifikace, celková délka a možnosti v paketu IP. Umožňuje také další kontroly integrity paketů, jako je ověření kontrolního součtu IP a hlavičky ICMP.
-vv Ještě podrobnější výstup. Například z paketů odpovědí NFS se tisknou další pole a pakety SMB jsou plně dekódovány.
-vvv Ještě podrobnější výstup. Například volby telnet SB … SE jsou vytištěny v plném rozsahu. S -X Volby Telnetu jsou vytištěny také hexadecimálně.
Uložit snímek do souboru
Chcete-li zapsat pakety do souboru pro pozdější analýzu, přidejte -w do příkazového řádku:
tcpdump -i <interface> -w <filename>
Tento soubor si můžete přečíst později pomocí parametru -r
tcpdump -r <file>
Nebo můžete tento soubor otevřít později pomocí nějakého nástroje GUI, jako je wireshark.
Počkejte chvíli… wireshark může také zachytit síťové pakety, proč jsem to od začátku nepoužil?.
Je pravda, že wireshark dokáže zachytit pakety a výstup je také mnohem přehlednější a snadněji sledovatelný a čitelný. S wireshark se ani nemusím učit nazpaměť příkazový řádek nebo mít v ruce manuálovou stránku, článek na blogu nebo alespoň cheatsheet. Také pravda. Mohl jsem raději použít wireshark, než provádět analýzu síťového provozu pomocí tcpdump. Někdy ale potřebuji zaznamenat na serveru nebo routeru a v tomto druhu počítačů nechci plýtvat drahocennými cykly procesoru nebo paměťovými bity při kreslení oken, barev nebo tlačítek nebo jiných widgetů GUI.
A to je důvod, proč jsem se rozhodl provést analýzu síťového provozu pomocí tcpdump na příkazovém řádku, pokud spěchám. Nebo uložit výstup do souboru, který přenesu, abych to udělal pomocí wireshark.