Het uitvoeren van packet captures met een sniffer kan een buitengewoon krachtige methode zijn voor het diagnosticeren van complexe problemen. Als al het andere niet lukt, is het vaak handig om de onbewerkte gegevens te bekijken die over de draad worden verzonden. De pakketten liegen niet, en het analyseren van uw applicatieverkeer op een laag niveau kan diepere symptomen van een probleem onthullen (of een probleem aan het licht brengen waarvan u niet eens wist dat het bestond).
In dit artikel bespreken we zullen enkele basisprincipes behandelen van het gebruik van de CLI-gebaseerde tcpdump
tool.
Basisprincipes van Sniffer
Dus eerst dingen eerst: wat bedoelen we als we zeggen “packet sniffer?” Een packet sniffer is gewoon een stukje software waarmee u pakketten op uw netwerk kunt vastleggen. Tcpdump en Wireshark zijn voorbeelden van packet sniffers. Tcpdump biedt een CLI-pakketsniffer, en Wireshark biedt een functierijke GUI voor het snuiven en analyseren van pakketten.
Standaard werkt tcpdump
in promiscuous mode. Dit betekent simpelweg dat alle pakketten die een host bereiken, ter inspectie naar tcpdump
worden gestuurd. Deze instelling omvat zelfs verkeer dat niet bestemd was voor de specifieke host waarop u vastlegt, zoals broadcast- en multicast-verkeer. Natuurlijk is tcpdump
geen magisch stukje software: het kan alleen die pakketten opvangen die op de een of andere manier een van de fysieke interfaces op uw machine bereiken.
Installeren tcpdump
is eenvoudig. Het is beschikbaar in de standaard pakketrepositorys op uw Red Hat-systeem en u kunt het op naam installeren:
Algemene scenarios voor het snuiven van pakketten
Het vastleggen van al het verkeer dat uw computer binnenkomt, klinkt misschien conceptueel cool, maar het klinkt ook vrij laag voor veel van de activiteiten die we uitvoeren in ons dagelijkse werk als sysadmins. Dus, wanneer zou je een tool voor het vastleggen van pakketten gebruiken? Ik gebruik meestal een packet sniffer wanneer ik een probleem met een netwerktoepassing aan het oplossen ben en ik alle andere opties heb uitgeput. Vaak heb ik al basisproblemen met het netwerk opgelost en toepassingslogboekbestanden bekeken, maar ik kan nog steeds niet tot op de bodem van een probleem komen. Op dit punt kan het uitbreken van een packet sniffer om de feitelijke gegevens die over de draad worden verzonden te observeren leerzaam zijn.
Een andere goede use case voor een packet sniffer is pedagogisch. Het bekijken van de pakketten die betrokken zijn bij een applicatie-uitwisseling, kan een grote bijdrage leveren aan het verbeteren van uw begrip van de onderliggende protocollen. Het kan bijvoorbeeld van onschatbare waarde zijn om de volledige pakketstroom van een recursieve DNS-query te observeren wanneer u probeert te begrijpen hoe DNS werkt.
Basispakketopnames uitvoeren
De beste manier om te leren is door er gewoon in te duiken, dus laten we beginnen met enkele basispakketopnames. Laten we eerst tcpdump
proberen zonder speciale opties. Merk op dat u de supergebruiker moet zijn om pakketopnames uit te voeren (technisch gezien kunt u het uitvoeren vanaf een normaal account met speciale mogelijkheden, maar het is meestal gemakkelijker om het als root uit te voeren). Gebruik Ctrl + C, of stuur een SIGTERM naar de tcpdump
proces-ID (PID) om het vastleggen te stoppen.
Standaard tcpdump
Om zie de standaarduitvoer van tcpdump
, typ gewoon het commando:
Opmerking: in plaats van veel uitvoer voorbij te laten vliegen voordat je op Ctrl + C drukt, kun je specificeren hoeveel pakketten je wilt zien met de -c
vlag. De bovenstaande opdracht zou in plaats daarvan tcpdump -c 6
kunnen zijn om dezelfde resultaten te krijgen (zes pakketten vastgelegd).
De uitvoer van tcpdump
kan in het begin wat ontmoedigend zijn, maar je zult eraan wennen ernaar te kijken nadat je deze tool een paar keer hebt gebruikt. Laten we de velden van links naar rechts opsplitsen:
Snuffelen aan een specifieke interface
Merk op dat de bovenkant van de uitvoer van het vorige voorbeeld je de interface laat zien die tcpdump
begint met vastleggen op (eth0), en de onderkant van het vastleggen bevat samenvattende statistieken over de vastgelegde pakketten.
Het eerste dat u waarschijnlijk wilt doen wanneer u tcpdump
is om een bepaalde interface te specificeren voor het uitvoeren van opnames. Standaard kiest tcpdump
de interface met het laagste nummer die “up” is. Veel servers hebben meerdere interfaces en u wilt expliciet zijn over de interface die u gebruikt voor het vastleggen. Bovendien kunnen sommige “speciale” interfacetypes, zoals een netfilter
-interface, boven aan de lijst verschijnen. Dit gedrag kan verwarring veroorzaken, dus het is het beste om de interface te specificeren waarin je geïnteresseerd bent.
Laten we beginnen met het bekijken van de interfaces die beschikbaar zijn voor vastleggen:
Met een lijst van interfaces waarover we beschikken, kunnen we nu de interface specificeren waarnaar moet worden geluisterd met de vlag -i
.Merk op dat ofwel de interfacenaam of het nummer van het --list-interfaces
commando kan worden gebruikt:
Als we naar de bovenstaande captures kijken, krijgen we basisinformatie over de pakketten die onze netwerk. Het lijkt erop dat deze pakketten Spanning Tree Protocol (STP) -uitvoer bevatten, misschien van een upstream-switch. Technisch gezien zijn dit geen pakketten, het zijn lagen van twee frames. Je zult de termen echter door elkaar horen worden gebruikt bij het bespreken van packet captures.
Meer informatie krijgen
Het eenvoudige probleemoplossingsresultaat van het vorige voorbeeld kan geweldig zijn om voor de hand liggende problemen te identificeren, maar soms hebben we meer informatie om echt in een complex probleem te duiken. Weten hoe u de breedsprakigheid van uw opname kunt aanpassen, is belangrijk, omdat u hierdoor dieper kunt graven in de feitelijke gegevens in de pakketten.
Het breedsprakigheidsniveau van tcpdump
wordt bestuurd door één tot drie -v
vlaggen toe te voegen aan de opdracht:
Merk op dat door het specificeren van het maximale breedsprakigheidsniveau, ik veel meer informatie kan zien over het pakketlichaam. Hierboven kunnen we aanvullende informatie zien over de gegevens in het STP-pakket, zoals de rootbridge-ID en de kosten van het rootpad. Als u niet bekend bent met STP, hoeft u zich daar geen zorgen over te maken. Het belangrijkste om hier op te merken is dat we door het vergroten van de breedsprakigheid aanvullende informatie kunnen krijgen over ons netwerkverkeer.
De exacte bytes van een pakket zien
Het vergroten van de breedsprakigheid is handig, maar we Ik zie nog steeds niet het vlees van de inhoud van de pakjes. Als je echt de exacte bytes wilt zien die in de pakketten zitten, kun je de vlaggen -x
en -X
gebruiken. De vlag -x
drukt de gegevens in elk pakket in hexadecimaal af, terwijl de vlag -X
de gegevens ook in ASCII afdrukt. Hier is de uitvoer die -x
gebruikt:
En hier is de uitvoer die :
Let op de hex- en ASCII-gegevens in de bovenstaande voorbeelden. In dit geval voerde ik een DNS A-recordquery uit voor . Merk ook op dat ik de vlag
-c
heb gebruikt om het aantal te vangen pakketten op te geven, en ik heb een vangfilter van port 53
geleverd. We bespreken filters in het volgende artikel.
Bij de cijfers blijven
Terwijl u werkt met tcpdump
, merkt u misschien op dat zijn standaardgedrag is om IP-adressen automatisch om te zetten in volledig gekwalificeerde domeinnamen (FQDNs). Tcpdump vertaalt ook poortnummers (zoals 22) in beschrijvende namen (zoals SSH). Hoewel dit gedrag prettig is, willen we vaak de numerieke gegevens zien, zodat we onze probleemoplossing op geen enkele manier onduidelijk maken. Dit standaardgedrag kan worden gewijzigd door ofwel -n
door te geven om het opzoeken van IP-adressen uit te schakelen, of -nn
om zowel IP-adres- als poortzoekopdrachten uit te schakelen.
Dit is het resultaat wanneer je -nn
gebruikt:
Je dump opslaan
Op een gegeven moment wil je misschien om uw pakketopnames op te slaan voor latere analyse, of voor diepere analyse met een grafische tool zoals Wireshark. Deze taak kan gemakkelijk worden uitgevoerd met de -w
vlag, waarmee u een pakketopnamebestand kunt schrijven:
Opmerking: u kunt uw opgeslagen bestand lezen met tcpdump
met de -r
vlag, of met een andere applicatie die het pcap-bestandsformaat ondersteunt.
Zoals we hierboven kunnen zien , de -w
vlag produceerde een handig pcap-bestand dat we mee kunnen nemen.
Afronden
Het uitvoeren van pakketopnames is een krachtige techniek in uw inventaris van vaardigheden voor het oplossen van netwerkproblemen, vooral als u vastzit aan een probleem en de rest van het netwerk er goed uitziet. Als u begrijpt hoe u tcpdump
op de opdrachtregel moet gebruiken, kunt u urenlang frustratie besparen bij het oplossen van problemen met netwerktoepassingen, en de syntaxis is vrij intuïtief als u er eenmaal aan gewend bent.