Základy sledovače paketů pro řešení problémů se sítí

Provádění zachycení paketů pomocí sledovače může být extrémně účinnou metodou diagnostiky složitých problémů. Když selže vše ostatní, je často užitečné zobrazit nezpracovaná data odesílaná po drátě. Pakety nelžou a analýza provozu vaší aplikace na nízké úrovni může odhalit hlubší příznaky problému (nebo odhalit problém, o kterém jste ani nevěděli, že existuje).

V tomto článku jsme Pokryjeme některé základy používání nástroje tcpdump založeného na CLI.

Základy Sniffer

Takže nejprve věci první: Co máme na mysli, když řekneme „packet sniffer?“ Packet sniffer je jednoduše software, který umožňuje zachytit pakety ve vaší síti. Tcpdump a Wireshark jsou příklady paketových sniffů. Tcpdump poskytuje čtečku paketů CLI a Wireshark poskytuje GUI bohaté na funkce pro čichání a analýzu paketů.

Ve výchozím nastavení tcpdump pracuje v promiskuitním režimu. To jednoduše znamená, že všechny pakety přicházející k hostiteli budou odeslány ke kontrole na tcpdump. Toto nastavení dokonce zahrnuje provoz, který nebyl určen pro konkrétního hostitele, na kterém zachycujete, jako je všesměrový a vícesměrový provoz. Samozřejmě, tcpdump není žádný kouzelný software: Může zachytit pouze ty pakety, které nějakým způsobem dosáhnou jednoho z fyzických rozhraní vašeho počítače.

Instalace tcpdump je jednoduchý. Je k dispozici ve standardních úložištích balíků ve vašem systému Red Hat a můžete jej nainstalovat podle názvu:

Běžné scénáře čichání paketů

Zachycení veškerého provozu přicházejícího do vašeho stroje může znít koncepčně skvěle, ale také to zní poměrně nízko pro mnoho činností, které provádíme při každodenní práci jako administrátoři. Kdy byste tedy použili nástroj pro zachycování paketů? Když řeším problém se síťovými aplikacemi, obvykle se obrátím na sniffer paketů a vyčerpal jsem všechny ostatní možnosti. Často jsem již provedl základní řešení potíží se sítí a zkontroloval všechny soubory protokolu aplikace, ale stále se nemohu dostat na konec problému. V tomto okamžiku může být poučení vyděrače paketů pro sledování skutečných dat odesílaných po drátu poučné.

Další skvělý případ použití vyděračů paketů je pedagogický. Sledování paketů zapojených do výměny aplikací může jít dlouhou cestu k lepšímu porozumění základním protokolům. Může být například neocenitelné sledovat úplný tok paketů rekurzivního dotazu DNS, když se snažíte pochopit, jak funguje DNS.

Provádění základních zachycení paketů

Nejlepší způsob, jak se to naučit, je pouhým ponorem, takže pojďme začít s některými základními zachyceními paketů. Nejprve vyzkoušíme tcpdump bez zvláštních možností. Všimněte si, že pro zachycování paketů musíte být superuživatelem (technicky je můžete spustit z běžného účtu se speciálními schopnostmi, ale je obvykle snazší jej spustit jako root). Použijte Ctrl + C nebo odešlete SIGTERM na tcpdump ID procesu (PID) a zastavte zachycení.

Výchozí tcpdump

Komu podívejte se na výchozí výstup tcpdump, jednoduše zadejte příkaz:

Poznámka: Místo toho, abyste před stisknutím Ctrl + C měli mnoho výstupů, můžete zadat kolik paketů chcete vidět s příznakem -c. Výše uvedený příkaz by místo toho mohl být tcpdump -c 6 pro získání stejných výsledků (zachyceno šest paketů).

Výstup z tcpdump může být zpočátku trochu skličující, ale zvyknete se na to dívat poté, co jste tento nástroj několikrát použili. Rozdělme pole zleva doprava:

Čichání konkrétního rozhraní

Všimněte si, že horní část výstupu z předchozího příkladu ukazuje rozhraní, které tcpdump začne snímat na (eth0) a spodní část zachycení obsahuje souhrnné statistiky o zachycených paketech.

První věc, kterou pravděpodobně budete chtít udělat při použití tcpdump je určit konkrétní rozhraní pro provádění zachycení. Ve výchozím nastavení tcpdump vybere nejnižší očíslované rozhraní, které je „nahoru“. Mnoho serverů má více rozhraní a budete chtít jasně uvést, jaké rozhraní používáte k zachycení. Kromě toho se na začátek seznamu mohou vznášet některé „speciální“ typy rozhraní, například rozhraní netfilter. Toto chování může způsobit zmatek, takže je nejlepší určit rozhraní, které vás zajímá.

Začněme prohlížením rozhraní, která jsou k dispozici pro zachycení:

Se seznamem rozhraní, která máme k dispozici, můžeme nyní určit rozhraní, které se má poslouchat, s příznakem -i.Všimněte si, že lze použít buď název rozhraní, nebo číslo z příkazu --list-interfaces:

Pohled na výše uvedené snímky nám poskytuje základní informace o paketech procházejících naším síť. Vypadá to, že tyto pakety obsahují výstup protokolu STP (Spanning Tree Protocol), snad z předřazeného přepínače. Technicky to nejsou pakety, jsou to vrstvy dvou rámců. Při projednávání zachycení paketů však uslyšíte zaměnitelně používané výrazy.

Získání dalších informací

Výsledek jednoduchého řešení potíží z předchozího příkladu může být skvělý pro identifikaci zjevných problémů, ale někdy potřebujeme více informací, abyste se opravdu dostali ke složitému problému. Vědět, jak upravit výřečnost vašeho zachycení, je důležité, protože vám umožní hlouběji proniknout do skutečných dat obsažených v paketech.

Úroveň výřečnosti tcpdump je řízen připojením jednoho až tří příznaků -v k příkazu:

Všimněte si, že zadáním maximální úrovně výřečnosti vidím mnohem více informací o tělo paketu. Nahoře vidíme další informace o datech v paketu STP, například ID kořenového mostu a náklady na kořenovou cestu. Pokud STP neznáte, nedělejte si s tím starosti. Je důležité si zde všimnout, že zvýšením výřečnosti můžeme získat další informace o síťovém provozu.

Zobrazení přesných bajtů paketu

Zvýšení výřečnosti je užitečné, ale my stále nevidím maso obsahu balíčků. Pokud opravdu chcete vidět přesné bajty, které jsou v paketech, můžete použít příznaky -x a -X. Příznak -x vytiskne data v každém paketu hexadecimálně, zatímco příznak -X vytiskne data také v ASCII. Zde je výstup pomocí -x:

A tady je výstup pomocí -X:

Všimněte si hexadecimálních a ASCII dat ve výše uvedených příkladech. V tomto případě jsem prováděl dotaz na záznam DNS A pro . Všimněte si také, že k určení počtu paketů k zachycení jsem použil příznak -c a poskytl jsem filtr zachycení port 53. Filtrům se budeme věnovat v příštím článku.

Dodržování čísel

Při práci s tcpdump si můžete všimnout že jeho výchozím chováním je automatické překládání IP adres na plně kvalifikované názvy domén (FQDN). Tcpdump také převede čísla portů (například 22) na přátelská jména (například SSH). I když je toto chování hezké, často chceme vidět číselná data, abychom žádným způsobem nezakrývali řešení problémů. Toto výchozí chování lze změnit předáním -n k deaktivaci vyhledávání IP adres, nebo -nn k deaktivaci vyhledávání IP adres i portů.

Tady je výsledek, když použijete -nn:

Uložení výpisu

V určitém okamžiku možná budete chtít k uložení zachycených paketů pro pozdější analýzu nebo pro hlubší analýzu pomocí grafického nástroje, jako je Wireshark. Této úlohy lze snadno dosáhnout pomocí příznaku -w, který umožňuje zápis souboru pro zachycení paketů:

Poznámka: Uložený soubor si můžete přečíst pomocí tcpdump s příznakem -r nebo s jinou aplikací, která podporuje formát souboru pcap.

Jak vidíme výše , příznak -w vytvořil užitečný soubor pcap, který si můžeme vzít s sebou.

Zabalení

Provádění zachycení paketů je výkonná technika v inventáři dovedností při řešení potíží se sítí, zvláště když jste přilepení na problém a zbytek sítě vypadá dobře. Pochopení toho, jak používat tcpdump na příkazovém řádku, vám může ušetřit hodiny frustrace při pokusech o vyřešení problémů se síťovými aplikacemi a syntaxe je docela intuitivní, jakmile si na ni zvyknete.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *