Grundlæggende om pakke til sniffer til netværksfejlfinding

At udføre pakkeoptagelser ved hjælp af en sniffer kan være en ekstremt effektiv metode til diagnosticering af komplekse problemer. Når alt andet fejler, er det ofte nyttigt at se rådata, der sendes over ledningen. Pakkerne lyver ikke, og analyse af din applikationstrafik på et lavt niveau kan afsløre dybere symptomer på et problem (eller afsløre et problem, som du ikke engang vidste eksisterede).

I denne artikel, vi Vi dækker nogle grundlæggende grunde til at bruge det CLI-baserede tcpdump værktøj.

Grundlæggende om sniffer

Så først ting først: Hvad mener vi, når vi siger “pakke sniffer?” En pakke sniffer er simpelthen et stykke software, der giver dig mulighed for at fange pakker på dit netværk. Tcpdump og Wireshark er eksempler på pakkesniffere. Tcpdump giver en CLI-pakke-sniffer, og Wireshark giver en funktionsrig GUI til at snuse og analysere pakker.

Som standard fungerer tcpdump i promiskuøs tilstand. Dette betyder simpelthen, at alle pakker, der når ud til en vært, sendes til tcpdump til inspektion. Denne indstilling inkluderer endda trafik, der ikke var bestemt til den specifikke vært, som du fanger på, såsom udsendelse og multicast-trafik. Selvfølgelig er tcpdump ikke noget magisk stykke software: Det kan kun fange de pakker, der på en eller anden måde når en af de fysiske grænseflader på din maskine.

Installation tcpdump er enkel. Det er tilgængeligt i standardpakkelagre på dit Red Hat-system, og du kan installere det ved navn:

Almindelige pakke sniffing scenarier

At fange al den trafik, der kommer ind på din maskine, lyder måske begrebsmæssigt sejt, men det lyder også ret lavt for mange af de aktiviteter, vi udfører i vores daglige arbejde som sysadminer. Så hvornår vil du bruge et pakkeoptagelsesværktøj? Jeg henvender mig typisk til en pakkesniffer, når jeg fejler et netværksapplikationsproblem, og jeg har udtømt alle andre muligheder. Ofte har jeg allerede udført grundlæggende netværksfejlfinding og gennemgå eventuelle applikationslogfiler, men jeg kan stadig ikke komme til bunden af et problem. På dette tidspunkt kan det være lærerigt at bryde en pakkesniffer ud for at observere de faktiske data, der sendes på ledningen.

En anden god brugssag for en pakkesniffer er pædagogisk. At se pakkerne involveret i en applikationsudveksling kan gå langt i retning af at forbedre din forståelse af de underliggende protokoller. For eksempel kan det være uvurderligt at observere den fulde pakkeflow i en rekursiv DNS-forespørgsel, når du prøver at forstå, hvordan DNS fungerer.

Udførelse af grundlæggende pakkeoptagelser

Den bedste måde at lære er på ved bare at dykke ind, så lad os komme i gang med nogle grundlæggende pakkeopsamlinger. Lad os først prøve tcpdump uden nogen specielle muligheder. Bemærk, at du bliver nødt til at være superbruger for at udføre pakkeoptagelser (teknisk set kan du køre det fra en almindelig konto med specielle muligheder, men det er normalt lettere at køre det som root). Brug Ctrl + C, eller send et SIGTERM til tcpdump proces-id (PID) for at stoppe optagelsen.

Standard tcpdump

Til se standardoutputtet for tcpdump, skal du blot skrive kommandoen:

Bemærk: I stedet for at have en masse output, der flyver forbi, før du trykker på Ctrl + C, kan du angive hvor mange pakker du vil se med -c flag. Kommandoen ovenfor kunne i stedet være tcpdump -c 6 for at få de samme resultater (seks pakker fanget).

Outputtet fra tcpdump kan være lidt skræmmende i starten, men du bliver vant til at se på det, når du har brugt dette værktøj et par gange. Lad os nedbryde felterne fra venstre mod højre:

Sniffing af en bestemt grænseflade

Bemærk, at toppen af output fra det foregående eksempel viser dig grænsefladen, der tcpdump begynder at optage på (eth0), og bunden af capture inkluderer oversigtsstatistikker om de fangede pakker.

Den første ting, du sandsynligvis vil gøre, når du bruger tcpdump er at specificere en bestemt grænseflade til udførelse af optagelser. tcpdump vælger som standard den laveste nummererede grænseflade, der er “op”. Mange servere har flere grænseflader, og du vil gerne være eksplicit om den grænseflade, du bruger til at fange. Derudover kan nogle “specielle” interface-typer, såsom en netfilter -grænseflade, flyde til toppen af listen. Denne adfærd kan forårsage forvirring, så det er bedst at specificere den grænseflade, du er interesseret i.

Lad os starte med at se de grænseflader, der er tilgængelige for at fange:

Med en liste over grænseflader, vi har til rådighed, kan vi nu specificere grænsefladen, der skal lyttes til med -i -flagget.Bemærk, at enten interfacenavnet eller nummeret fra --list-interfaces -kommandoen kan bruges:

Når vi ser på ovenstående optagelser, får vi grundlæggende oplysninger om pakker, der krydser vores netværk. Det ser ud til, at disse pakker indeholder Spanning Tree Protocol (STP) output, måske fra en opstrøms switch. Teknisk set er dette ikke pakker, de er lag to rammer. Du vil dog høre de termer, der bruges om hverandre, når du diskuterer pakkeopsamlinger.

Få flere oplysninger

Det forrige eksemples enkle fejlfindingsresultat kan være fantastisk til at identificere indlysende problemer, men nogle gange har vi brug for flere oplysninger for virkelig at grave i et komplekst problem. Det er vigtigt at vide, hvordan du justerer uddybningen af din optagelse, da det giver dig mulighed for at grave dybere ned i de faktiske data indeholdt i pakkerne.

Ordlighedsniveauet for tcpdump styres ved at tilføje mellem et og tre -v flag til kommandoen:

Bemærk, at ved at specificere det maksimale niveau af detaljerethed kan jeg se langt mere information om pakkehuset. Ovenfor kan vi se yderligere oplysninger om dataene i STP-pakken, såsom rodbro-id og rodstiomkostninger. Hvis du ikke er fortrolig med STP, skal du ikke bekymre dig om det. Det vigtige at bemærke her er, at ved at øge ordligheden kan vi få yderligere oplysninger om vores netværkstrafik.

At se en pakkes nøjagtige byte

At øge ordligheden er praktisk, men vi ser stadig ikke kødet fra pakkenes indhold. Hvis du virkelig vil se de nøjagtige byte, der findes i pakkerne, kan du bruge flagene -x og -X. -x flag udskriver dataene i hver pakke i hex, mens -X flag også udskriver dataene i ASCII. Her er output ved hjælp af -x:

Og her er output ved hjælp af -X:

Bemærk hex- og ASCII-dataene i eksemplerne ovenfor. I dette tilfælde udførte jeg en DNS A-postforespørgsel til . Bemærk også, at jeg brugte -c -flagget til at specificere antallet af pakker, der skulle fanges, og jeg leverede et capture-filter på port 53. Vi diskuterer filtre i den næste artikel.

At holde fast med tallene

Når du arbejder med tcpdump, bemærker du muligvis at dets standardadfærd er at automatisk løse IP-adresser til fuldt kvalificerede domænenavne (FQDNer). Tcpdump oversætter også portnumre (såsom 22) til venlige navne (såsom SSH). Selvom denne adfærd er god, vil vi ofte se de numeriske data, så vi ikke tilslører vores fejlfinding på nogen måde. Denne standardadfærd kan ændres ved at sende enten -n for at deaktivere IP-adresseopslag, eller -nn for at deaktivere både IP-adresse og portopslag.

Her er resultatet, når du bruger -nn:

Gemme din dump

På et eller andet tidspunkt vil du muligvis for at gemme dine pakkeoptagelser til senere analyse eller til dybere analyse med et grafisk værktøj som Wireshark. Denne opgave kan let udføres med -w flag, som giver dig mulighed for at skrive en pakkeoptagelsesfil:

Bemærk: Du kan læse din gemte fil ved hjælp af tcpdump med -r flag eller med et andet program, der understøtter pcap-filformatet.

Som vi kan se ovenfor , -w -flaggen producerede en praktisk pcap-fil, som vi kan tage med os.

Indpakning

At udføre pakkeoptagelser er en stærk teknik i din netværksfejlfindingskompetencer, især når du sidder fast i et problem, og resten af netværket ser OK ud. At forstå, hvordan man bruger tcpdump på kommandolinjen, kan spare dig for timevis af frustration, når du prøver at løse problemer med netværksapplikationer, og syntaksen er ret intuitiv, når du først er vant til det.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *