GNU/Linux >> Znalost Linux >  >> Linux

Příkaz Tcpdump v Linuxu

tcpdump je nástroj příkazového řádku, který můžete použít k zachycení a kontrole síťového provozu směřujícího do az vašeho systému. Je to nejběžněji používaný nástroj mezi správci sítě pro odstraňování problémů se sítí a testování zabezpečení.

Navzdory svému názvu s tcpdump můžete také zachytit provoz bez protokolu TCP, jako je UDP, ARP nebo ICMP. Zachycené pakety lze zapsat do souboru nebo na standardní výstup. Jedna z nejvýkonnějších funkcí tcpdump je jeho schopnost používat filtry a zachytit pouze data, která chcete analyzovat.

V tomto článku se budeme zabývat základy používání tcpdump příkaz v Linuxu.

Instalace tcpdump #

tcpdump je standardně nainstalován na většině distribucí Linuxu a macOS. Chcete-li zkontrolovat, zda tcpdump příkaz je k dispozici na vašem typu systému:

tcpdump --version

Výstup by měl vypadat nějak takto:

tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.1.1b  26 Feb 2019

Pokud tcpdump není ve vašem systému přítomen, příkaz výše vypíše „tcpdump:příkaz nenalezen“. Můžete snadno nainstalovat tcpdump pomocí správce balíčků vaší distribuce.

Instalace tcpdump na Ubuntu a Debianu #

sudo apt update && sudo apt install tcpdump

Instalace tcpdump na CentOS a Fedora #

sudo yum install tcpdump

Instalace tcpdump na Arch Linuxu #

sudo pacman -S tcpdump

Zachycování paketů pomocí tcpdump #

Obecná syntaxe pro tcpdump příkaz je následující:

tcpdump [options] [expression]
  • Příkaz options umožňují ovládat chování příkazu.
  • Filtr expression definuje, které pakety budou zachyceny.

Pouze root nebo uživatel s sudo oprávnění lze spustit tcpdump . Pokud se pokusíte spustit příkaz jako neprivilegovaný uživatel, zobrazí se chyba:„Na tomto zařízení nemáte oprávnění k zachycení“.

Nejjednodušší případ použití je vyvolat tcpdump bez jakýchkoli možností a filtrů:

sudo tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
15:47:24.248737 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
15:47:24.248785 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 108:144, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 36
15:47:24.248828 IP linuxize-host.ssh > desktop-machine.39196: Flags [P.], seq 144:252, ack 1, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108

... Long output suppressed

23116 packets captured
23300 packets received by filter
184 packets dropped by kernel

tcpdump bude pokračovat v zachycování paketů a zápisu na standardní výstup, dokud neobdrží signál přerušení. Použijte Ctrl+C kombinace kláves pro odeslání signálu přerušení a zastavení příkazu.

Pro podrobnější výstup předejte -v volba nebo -vv pro ještě podrobnější výstup:

sudo tcpdump -vv

Počet paketů, které mají být zachyceny, můžete zadat pomocí -c volba. Chcete-li například zachytit pouze deset paketů, zadejte:

sudo tcpdump -c 10

Po zachycení paketů tcpdump zastaví.

Pokud není zadáno žádné rozhraní, tcpdump používá první rozhraní, které najde, a vypíše všechny pakety procházející tímto rozhraním.

Použijte -D možnost vytisknout seznam všech dostupných síťových rozhraní, ze kterých může tcpdump sbírat pakety:

sudo tcpdump -D

Pro každé rozhraní příkaz vytiskne název rozhraní, krátký popis a přidružený index (číslo):

1.ens3 [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]

Výše uvedený výstup ukazuje, že ens3 je první rozhraní nalezené tcpdump a používá se, když příkazu není poskytnuto žádné rozhraní. Druhé rozhraní any je speciální zařízení, které vám umožní zachytit všechna aktivní rozhraní.

Chcete-li určit rozhraní, na kterém chcete zachytit provoz, vyvolejte příkaz s -i možnost následovaná názvem rozhraní nebo přidruženým indexem. Chcete-li například zachytit všechny pakety ze všech rozhraní, zadejte any rozhraní:

sudo tcpdump -i any

Ve výchozím nastavení tcpdump provádí reverzní překlad DNS na IP adresách a převádí čísla portů na názvy. Použijte -n možnost zakázat překlad:

sudo tcpdump -n

Přeskočením vyhledávání DNS se vyhnete generování provozu DNS a výstup bude čitelnější. Doporučuje se použít tuto volbu při každém vyvolání tcpdump .

Místo zobrazení výstupu na obrazovce jej můžete přesměrovat do souboru pomocí operátorů přesměrování > a >> :

sudo tcpdump -n -i any > file.out

Data můžete také sledovat při ukládání do souboru pomocí tee příkaz:

sudo tcpdump -n -l | tee file.out

-l volba v příkazu výše říká tcpdump aby byl výstupní řádek vyrovnávací paměti. Není-li tato možnost použita, výstup se při vygenerování nového řádku nezapíše na obrazovku.

Vysvětlení tcpdump Výstup #

tcpdump vypíše informace pro každý zachycený paket na novém řádku. Každý řádek obsahuje časové razítko a informace o tomto paketu v závislosti na protokolu.

Typický formát linky protokolu TCP je následující:

[Timestamp] [Protocol] [Src IP].[Src Port] > [Dst IP].[Dst Port]: [Flags], [Seq], [Ack], [Win Size], [Options], [Data Length]

Pojďme pole po poli a vysvětleme následující řádek:

15:47:24.248737 IP 192.168.1.185.22 > 192.168.1.150.37445: Flags [P.], seq 201747193:201747301, ack 1226568763, win 402, options [nop,nop,TS val 1051794587 ecr 2679218230], length 108
  • 15:47:24.248737 – Časové razítko zachyceného paketu je v místním čase a používá následující formát:hours:minutes:seconds.frac , kde frac je zlomek sekundy od půlnoci.

  • IP - Paketový protokol. V tomto případě IP znamená internetový protokol verze 4 (IPv4).

  • 192.168.1.185.22 – Zdrojová IP adresa a port oddělené tečkou (. ).

  • 192.168.1.150.37445 – Cílová IP adresa a port oddělené tečkou (. ).

  • Flags [P.] - Pole TCP Flags. V tomto příkladu [P.] znamená Push Acknowledgment paket, který se používá k potvrzení předchozího paketu a odeslání dat. Další typické hodnoty pole příznaku jsou následující:

    • [.] - ACK (Potvrzení)
    • [S] – SYN (Zahájit připojení)
    • [P] – PSH (Push Data)
    • [F] – FIN (Dokončit připojení)
    • [R] – RST (Resetovat připojení)
    • [S.] – SYN-ACK (paket SynAcK)
  • seq 201747193:201747301 - Pořadové číslo je v first:last notový zápis. Ukazuje počet dat obsažených v paketu. Kromě prvního paketu v datovém toku, kde jsou tato čísla absolutní, všechny následující pakety používají jako relativní pozice bajtů. V tomto příkladu je číslo 201747193:201747301 , což znamená, že tento paket obsahuje bajty 201747193 až 201747301 datového toku. Použijte -S možnost tisku absolutních pořadových čísel.

  • ack 1226568763 Číslo potvrzení je pořadové číslo dalších dat očekávaných na druhém konci tohoto připojení.

  • win 402 - Číslo okna je počet dostupných bajtů v přijímací vyrovnávací paměti.

  • options [nop,nop,TS val 1051794587 ecr 2679218230] - Možnosti TCP. nop , nebo „žádná operace“ je výplň používaná k tomu, aby hlavička TCP byla násobkem 4 bajtů. TS val je časové razítko TCP a ecr znamená echo odpověď. Další informace o možnostech TCP naleznete v dokumentaci IANA.

  • length 108 - Délka dat užitečného zatížení

tcpdump Filtry #

Když tcpdump je vyvolán bez filtrů, zachycuje veškerý provoz a vytváří obrovské množství výstupu, což velmi ztěžuje nalezení a analýzu zájmových paketů.

Filtry jsou jednou z nejvýkonnějších funkcí tcpdump příkaz. Protože vám umožňují zachytit pouze ty pakety, které odpovídají výrazu. Například při odstraňování problémů souvisejících s webovým serverem můžete použít filtry k získání pouze HTTP provozu.

tcpdump používá syntaxi Berkeley Packet Filter (BPF) k filtrování zachycených paketů pomocí různých parametrů obrábění, jako jsou protokoly, zdrojové a cílové IP adresy a porty atd.

V tomto článku se podíváme na některé z nejběžnějších filtrů. Seznam všech dostupných filtrů naleznete na stránce pcap-filtermanpage.

Filtrování podle protokolu č.

Chcete-li omezit sběr na konkrétní protokol, zadejte protokol jako filtr. Chcete-li například zachytit pouze provoz UDP, spustili byste:

sudo tcpdump -n udp

Dalším způsobem, jak definovat protokol, je použít proto kvalifikátor následovaný číslem protokolu. Následující příkaz vyfiltruje protokol číslo 17 a vytvoří stejný výsledek jako výše:

sudo tcpdump -n proto 17

Další informace o číslech naleznete v seznamu čísel protokolu IP.

Filtrování podle hostitele #

Chcete-li zachytit pouze pakety související s konkrétním hostitelem, použijte host kvalifikátor:

sudo tcpdump -n host 192.168.1.185

Hostitel může být IP adresa nebo jméno.

Můžete také filtrovat výstup na daný rozsah IP pomocí net kvalifikátor. Chcete-li například vypsat pouze pakety související s 10.10.0.0/16 byste použili:

sudo tcpdump -n net 10.10

Filtrování podle portu #

Chcete-li omezit zachycování pouze na pakety z nebo na konkrétní port, použijte port kvalifikátor. Níže uvedený příkaz zachycuje pakety související se službou SSH (port 22) pomocí tohoto příkazu:

sudo tcpdump -n port 23

portrange kvalifikátor umožňuje zachytit provoz v řadě portů:

sudo tcpdump -n portrange 110-150

Filtrování podle zdroje a cíle #

Pakety můžete také filtrovat na základě zdrojového nebo cílového portu nebo hostitele pomocí src , dst , src and dst a src or dst kvalifikátory.

Následující příkaz zachycuje přicházející pakety od hostitele s IP 192.168.1.185:

sudo tcpdump -n src host 192.168.1.185

Chcete-li najít provoz přicházející z jakéhokoli zdroje na port 80, použijte:

sudo tcpdump -n dst port 80

Komplexní filtry #

Filtry lze kombinovat pomocí and (&& ), or (|| ) a nop (! ) operátory.

Například pro zachycení veškerého HTTP provozu přicházejícího ze zdrojové IP adresy 192.168.1.185 byste použili tento příkaz:

sudo tcpdump -n src 192.168.1.185 and tcp port 80

K seskupování a vytváření složitějších filtrů můžete také použít závorky:

sudo tcpdump -n 'host 192.168.1.185 and (tcp port 80 or tcp port 443)'

Chcete-li se vyhnout chybám analýzy při použití speciálních znaků, uzavřete filtry do jednoduchých uvozovek.

Zde je další příklad příkazu pro zachycení veškerého provozu kromě SSH ze zdrojové IP adresy 192.168.1.185:

sudo tcpdump -n src 192.168.1.185 and not dst port 22

Kontrola paketů #

Ve výchozím nastavení tcpdump , zachycuje pouze hlavičky paketů. Někdy však může být nutné zkontrolovat obsah paketů.

tcpdump umožňuje tisknout obsah paketů v ASCII a HEX.

-A volba říká tcpdump vytisknout každý paket v ASCII a -x v HEX:

sudo tcpdump -n -A

Chcete-li zobrazit obsah paketu v HEX i ASCII, použijte -X možnost:

sudo tcpdump -n -X

Čtení a zápis snímků do souboru #

Další užitečná funkce tcpdump je zapsat pakety do souboru. To je užitečné, když zachycujete velké množství paketů nebo zachycujete pakety pro pozdější analýzu.

Chcete-li zahájit zápis do souboru, použijte -w možnost následovaná výstupním zachyceným souborem:

sudo tcpdump -n -w data.pcap

Tento příkaz výše uloží zachycení do souboru s názvem data.pcap . Soubor můžete pojmenovat, jak chcete, ale je běžnou konvencí používat .pcap rozšíření (zachycení paketů).

Když -w Pokud je použita volba, výstup se na obrazovce nezobrazí. tcpdump zapisuje nezpracované pakety a vytváří binární soubor, který nelze přečíst běžným textovým editorem.

Chcete-li zkontrolovat obsah souboru, vyvolejte tcpdump pomocí -r možnost:

sudo tcpdump -r data.pcap

Pokud chcete spustit tcpdump na pozadí přidejte symbol ampersand (& ) na konci příkazu.

Zachycený soubor lze také zkontrolovat pomocí jiných nástrojů pro analýzu paketů, jako je Wireshark.

Při zachycování paketů po dlouhou dobu můžete povolit rotaci souborů. tcpdump umožňuje vytvářet nové soubory a otáčet soubor výpisu v zadaném časovém intervalu nebo pevné velikosti. Následující příkaz vytvoří až deset 200 MB souborů s názvem file.pcap0 , file.pcap1 a tak dále:před přepsáním starších souborů.

sudo tcpdump -n -W 10 -C 200 -w /tmp/file.pcap

Po vygenerování deseti souborů budou starší soubory přepsány.

Pamatujte, že byste měli spouštět pouze tcpdump pouze při odstraňování problémů.

Pokud chcete spustit tcpdump v určitý čas můžete použít cronjob. tcpdump nemá možnost po určité době odejít. Můžete použít timeout příkaz k zastavení tcpdump po určité době. Například pro ukončení po 5 minutách byste použili:

sudo timeout 300 tcpdump -n -w data.pcap

Závěr č.

tcpdump je nástroj příkazového řádku pro analýzu a řešení problémů souvisejících se sítí.

Tento článek vás seznámil se základy tcpdump použití a syntaxe. Pro podrobnější dokumentaci navštivte webovou stránku tcpdump.

Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.


Linux
  1. Linuxový příkaz mv

  2. Linux du command

  3. Linuxový ip příkaz

  1. Jak zachytit a analyzovat pakety pomocí příkazu tcpdump v systému Linux

  2. Linux příkaz ifconfig

  3. Linux cd příkaz

  1. Linux Time Command

  2. Příkaz Ping v Linuxu

  3. Linux Watch Command