GNU/Linux >> Znalost Linux >  >> Linux

Linuxový příkaz tcpdump

tcpdump je nástroj příkazového řádku, který nám umožňuje zachytit a analyzovat síťový provoz procházející naším systémem. V závislosti na možnostech filtrování můžeme tento nástroj použít k efektivnímu řešení jakýchkoli problémů se sítí. Je to velmi často používaný nástroj systémovými inženýry pro tyto funkce.

V tomto tutoriálu analyzujeme některé způsoby použití tcpdump , ale ne všechny. Je to proto, že tento příkaz obsahuje příliš mnoho možností filtrování a není možné je všechny pokrýt. Zde se podíváme pouze na některé běžně používané možnosti. Zbytek najdete na manuálové stránce.

Instalace příkazu tcpdump

Můžete zkontrolovat, zda váš systém obsahuje tcpdump příkaz, zadáním

tcpdump --version

Pokud výstup ukazuje, že není nainstalován, můžete jej získat přímo pomocí systémového správce balíčků.

POZNÁMKA :Protože budeme zachycovat pakety, potřebujeme zvýšená oprávnění. (sudo je požadováno). Všemu tcpdump přidáme předponu příkazy pomocí sudo v důsledku toho.

Seznam rozhraní pro zachycení paketů

Před aktivním zachycováním paketů se podíváme na dostupná rozhraní protcpdump .

Seznam rozhraní můžeme vypsat pomocí -D (Zobrazení).

sudo tcpdump -D

Získáte seznam všech dostupných rozhraní na vašem počítači. To bude záviset od systému k systému, takže můj má některá další rozhraní, jako je Docker , protože služba Docker je spuštěna, kromě typických síťových rozhraní.

Speciální rozhraní jakékoli umožňuje snímání v jakémkoli aktivní rozhraní.

Nyní, když známe dostupná rozhraní na našem počítači, začněme zachycovat pakety!

Zachycení paketů pomocí tcpdump

Zachyťte všechny pakety v jakémkoli rozhraní spuštěním tohoto příkazu:

sudo tcpdump -i any

Tím určíte, že rozhraní bude libovolné , speciální rozhraní zmíněné výše.

tcpdump pokračuje v zachycování paketů, dokud neobdrží přerušení signál. Nahrávání můžete přerušit stisknutím Ctrl+C .

Výstup zobrazí seznam všech zachycených paketů, dokud nebude přijat signál přerušení k ukončení tcpdump .

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:49:32.841984 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132693749:4132693857, ack 3344962610, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 108
10:49:32.842057 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
10:49:32.842101 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 144:260, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 116
10:49:32.842135 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 260:296, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
...
...
^C
264 packets captured
361 packets received by filter
91 packets dropped by kernel

Jak můžete vidět, tcpdump zachytil 264 paketů. Například, protože jsem připojen k tomuto serveru pomocí ssh , tcpdump zachytil všechny tyto pakety.

Omezit počet zachycených paketů

Chcete-li omezit počet zachycených paketů a zastavit tcpdump , použijte -c (limit zachycení) možnost:

sudo tcpdump -i any -c 2

To způsobí, že příkaz tcpdump automaticky zastaví zachytávání po 2 paketech. V tomto případě nemusíme nutně použít signál přerušení k ručnímu ukončení.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:57:31.284198 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132754245:4132754353, ack 3344963698, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 108
10:57:31.284275 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 36
2 packets captured
16 packets received by filter
8 packets dropped by kernel

Tato možnost může být docela užitečná při monitorování síťových připojení pro řešení jakéhokoli problému, pokud se vyskytnou problémy se sítí.

Zakázat rozlišení názvu a portu

Ve výchozím nastavení tcpdump příkaz přeloží adresy IP a porty na názvy (například vultr.com.ssh , který provádí překlad názvů z ​​IP adres a portů).

Při odstraňování problémů se sítí je často jednodušší použít adresy IP a čísla portů; Překlad názvů můžeme zakázat pomocí volby -n a rozlišení portu pomocí -nn .

sudo tcpdump -i any -c 2 -nn

Výše uvedený příkaz zachytí 2 pakety na libovolném rozhraní, přičemž deaktivuje rozlišení portu.

Takže výstup nyní zastaví jakýkoli překlad názvů a jednoduše vrátí IP adresy a čísla portů.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108
11:00:36.459982 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 36
2 packets captured
8 packets received by filter
0 packets dropped by kernel

Zde se podívejme na řádek výstupu.

11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108

Toto je typický TCP zachycení paketů. Další protokolové pakety a formáty jsou uvedeny na manuálové stránce příkazu tcpdump.

První pole, 11:00:36.459922 , představuje časové razítko přijatého paketu podle místních hodin.

Dále IP představuje protokol síťové vrstvy – v tomto případě IPv4 . Pro IPv6 pakety, hodnota je IP6 .

Další pole, 111.11.111.11.22 , je zdrojová IP adresa a port. Následuje cílová IP adresa a port, reprezentovaný 123.45.678.90.48006 .

Nyní, když víme, jaký je základní výstupní formát, pojďme analyzovat některé možnosti filtrování pro tcpdump

Filtrování paketů

Jeden z tcpdump nejvýkonnější funkcí příkazu je jeho schopnost filtrovat zachycené pakety pomocí různých parametrů, jako jsou zdrojové a cílové IP adresy, porty, protokoly atd. Podívejme se na některé z nejběžnějších.

Filtr založený na protokolu

Chcete-li filtrovat pakety na základě protokolu, musíme v příkazu specifikovat protokol.

Chcete-li zachytit ICMP pouze pakety, můžeme filtrovat na základě ICMP protokol.

sudo tcpdump -i any -c 5 icmp

Od ping používá ICMP pakety, můžeme analyzovat příchozí pakety kvůli ping z jiného stroje.

Odešleme příkaz ping na náš aktuální počítač a zachytíme příchozí pakety ping.

Otevřete terminálovou relaci na jiném počítači a zadejte

ping IP_ADDRESS_MACHINE_1

Nyní v našem tcpdump terminálovou relaci, nyní vidíme, že zachycuje pakety odpovědí ICMP ping.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:18:47.947475 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 1, length 64
11:18:47.947554 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 1, length 64
11:18:48.947669 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 2, length 64
11:18:48.947752 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 2, length 64
11:18:49.947853 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 3, length 64
5 packets captured
6 packets received by filter
0 packets dropped by kernel

Zde 123.45.678.90 je IP adresa stroje (Machine 2), který odešle ping našemu tcpdump systému a 111.11.111.11 je IP adresa stroje pro filtrování paketů (Machine 1).

Protože jsem používal ssh pro odeslání požadavků ping existuje rozlišení domény (ale žádné rozlišení názvu) na vultr.com .

Filtr na základě hostitele

Chcete-li omezit zachycování pouze na pakety související s konkrétním hostitelem, můžeme použít host filtr

sudo tcpdump -i any -c5 -nn host 192.168.1.2

V tomto příkladu tcpdump zachycuje a zobrazuje pouze pakety do az hostitele 192.168.1.2 .

Filtr na základě portu

Chcete-li filtrovat pakety na základě požadované služby nebo portu, použijte port filtr. Pomocí tohoto příkazu můžete například zachytit pakety související s relací ssh (port 22 filtrování):

sudo tcpdump -i any -c5 -nn port 22

Filtr na základě zdrojové IP/názvu hostitele

Pakety můžete také filtrovat na základě zdrojové nebo cílové IP adresy nebo názvu hostitele. Například k zachycení paketů z hostitele 192.168.1.2

sudo tcpdump -i any -c 5 -nn src 192.168.1.2

Můžeme použít dst filtrovat také podle cílové IP/názvu hostitele.

sudo tcpdump -i any -c 5 -nn src 172.168.1.2

Uložit zachycení paketů

Výsledky zachycení paketů můžeme uložit do souboru pro pozdější analýzu.

Chcete-li pakety uložit do souboru místo jejich zobrazení na obrazovce, použijte volbu -w :

sudo tcpdump -i any -c 5 -nn -w sample.pcap port 22

Tento příkaz uloží výstup do souboru s názvem sample.pcap . .pcap přípona znamená „packet capture“ a je konvencí pro tento formát souboru.

Závěr

V tomto tutoriálu jsme se naučili, jak můžeme provádět zachycování a filtrování paketů na základě různých možností pomocí tcpdump příkaz.


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