Das Durchführen von Paketerfassungen mit einem Sniffer kann eine äußerst leistungsstarke Methode zur Diagnose komplexer Probleme sein. Wenn alles andere fehlschlägt, ist es oft hilfreich, die über das Kabel gesendeten Rohdaten anzuzeigen. Die Pakete lügen nicht, und die Analyse Ihres Anwendungsverkehrs auf einer niedrigen Ebene kann tiefere Symptome eines Problems aufdecken (oder ein Problem aufdecken, von dem Sie nicht einmal wussten, dass es existiert).
In diesem Artikel werden wir Ich werde einige Grundlagen der Verwendung des CLI-basierten tcpdump
-Tools behandeln.
Sniffer-Grundlagen
Also zuerst Dinge zuerst: Was meinen wir, wenn wir „Paketschnüffler“ sagen? Ein Paket-Sniffer ist einfach eine Software, mit der Sie Pakete in Ihrem Netzwerk erfassen können. Tcpdump und Wireshark sind Beispiele für Paket-Sniffer. Tcpdump bietet einen CLI-Paket-Sniffer und Wireshark bietet eine funktionsreiche Benutzeroberfläche zum Aufspüren und Analysieren von Paketen.
Standardmäßig arbeitet tcpdump
im Promiscuous-Modus. Dies bedeutet einfach, dass alle Pakete, die einen Host erreichen, zur Überprüfung an tcpdump
gesendet werden. Diese Einstellung umfasst sogar Datenverkehr, der nicht für den bestimmten Host bestimmt ist, auf dem Sie erfassen, z. B. Broadcast- und Multicast-Datenverkehr. Natürlich ist tcpdump
keine magische Software: Es können nur die Pakete erfasst werden, die irgendwie eine der physischen Schnittstellen auf Ihrem Computer erreichen.
Installation tcpdump
ist einfach. Es ist in den Standardpaket-Repositorys Ihres Red Hat-Systems verfügbar und kann unter folgenden Namen installiert werden:
Allgemeine Paket-Sniffing-Szenarien
Das Erfassen des gesamten Datenverkehrs auf Ihrem Computer mag konzeptionell cool klingen, klingt aber auch für viele der Aktivitäten, die wir in unserer täglichen Arbeit als Systemadministratoren ausführen, ziemlich leise. Wann würden Sie ein Paketerfassungstool verwenden? Normalerweise wende ich mich an einen Paket-Sniffer, wenn ich ein Problem mit einer Netzwerkanwendung behebe und alle anderen Optionen ausgeschöpft habe. Oft habe ich bereits eine grundlegende Fehlerbehebung im Netzwerk durchgeführt und alle Anwendungsprotokolldateien überprüft, kann einem Problem jedoch immer noch nicht auf den Grund gehen. Zu diesem Zeitpunkt kann es lehrreich sein, einen Paket-Sniffer auszubrechen, um die tatsächlich auf dem Draht gesendeten Daten zu beobachten.
Ein weiterer großartiger Anwendungsfall für einen Paket-Sniffer ist pädagogisch. Das Beobachten der an einem Anwendungsaustausch beteiligten Pakete kann einen großen Beitrag zur Verbesserung Ihres Verständnisses der zugrunde liegenden Protokolle leisten. Beispielsweise kann es von unschätzbarem Wert sein, den vollständigen Paketfluss einer rekursiven DNS-Abfrage zu beobachten, wenn Sie versuchen zu verstehen, wie DNS funktioniert.
Durchführen grundlegender Paketerfassungen
Der beste Weg, dies zu lernen, ist Lassen Sie uns einfach mit einigen grundlegenden Paketerfassungen beginnen. Probieren wir zunächst tcpdump
ohne spezielle Optionen aus. Beachten Sie, dass Sie der Superuser sein müssen, um Paketerfassungen durchzuführen (technisch gesehen können Sie es von einem regulären Konto mit speziellen Funktionen ausführen, aber es ist normalerweise einfacher, es als Root auszuführen). Verwenden Sie Strg + C oder senden Sie ein SIGTERM an die tcpdump
Prozess-ID (PID), um die Erfassung zu stoppen.
Standard-tcpdump
To Sehen Sie sich die Standardausgabe von tcpdump
an. Geben Sie einfach den folgenden Befehl ein:
Hinweis: Anstatt viel Ausgabe vorbeizufliegen, bevor Sie Strg + C drücken, können Sie angeben Wie viele Pakete möchten Sie mit dem Flag -c
sehen? Der obige Befehl könnte stattdessen tcpdump -c 6
sein, um die gleichen Ergebnisse zu erzielen (sechs Pakete erfasst).
Die Ausgabe von tcpdump
kann anfangs etwas entmutigend sein, aber Sie werden sich daran gewöhnen, es sich anzusehen, nachdem Sie dieses Tool einige Male verwendet haben. Lassen Sie uns die Felder von links nach rechts aufteilen:
Schnüffeln einer bestimmten Schnittstelle
Beachten Sie, dass oben in der Ausgabe des vorherigen Beispiels die Schnittstelle angezeigt wird, die tcpdump
beginnt mit der Erfassung am (eth0), und am Ende der Erfassung befinden sich zusammenfassende Statistiken zu den erfassten Paketen.
Das erste, was Sie wahrscheinlich tun möchten, wenn Sie tcpdump
gibt eine bestimmte Schnittstelle für die Durchführung von Captures an. Standardmäßig wählt tcpdump
die Schnittstelle mit der niedrigsten Nummer aus, die „up“ ist. Viele Server verfügen über mehrere Schnittstellen, und Sie möchten die für die Erfassung verwendete Schnittstelle explizit angeben. Darüber hinaus können einige „spezielle“ Schnittstellentypen, z. B. eine netfilter
-Schnittstelle, an den Anfang der Liste verschoben werden. Dieses Verhalten kann zu Verwirrung führen. Geben Sie daher am besten die Schnittstelle an, an der Sie interessiert sind.
Lassen Sie uns zunächst die Schnittstellen anzeigen, die für die Erfassung verfügbar sind:
Mit einer Liste von Schnittstellen, die uns zur Verfügung stehen, können wir jetzt die Schnittstelle angeben, die mit dem Flag -i
abgehört werden soll.Beachten Sie, dass entweder der Schnittstellenname oder die Nummer aus dem Befehl --list-interfaces
verwendet werden kann:
Wenn Sie sich die obigen Captures ansehen, erhalten Sie grundlegende Informationen zu den Paketen, die unsere durchlaufen Netzwerk. Es sieht so aus, als ob diese Pakete STP-Ausgaben (Spanning Tree Protocol) enthalten, möglicherweise von einem Upstream-Switch. Technisch gesehen sind dies keine Pakete, sondern Layer-2-Frames. Sie werden jedoch die Begriffe austauschbar hören, wenn Sie über Paketerfassungen sprechen.
Weitere Informationen erhalten
Das einfache Ergebnis der Fehlerbehebung im vorherigen Beispiel kann hilfreich sein, um offensichtliche Probleme zu identifizieren, aber manchmal müssen wir Weitere Informationen, um sich wirklich mit einem komplexen Problem zu befassen. Es ist wichtig zu wissen, wie Sie die Ausführlichkeit Ihrer Erfassung anpassen, da Sie so tiefer in die tatsächlichen Daten in den Paketen eintauchen können.
Die Ausführlichkeitsstufe von tcpdump
wird gesteuert, indem zwischen einem und drei -v
-Flaggen an den Befehl angehängt wird:
Beachten Sie, dass ich durch Angabe der maximalen Ausführlichkeit weitaus mehr Informationen über sehen kann der Paketkörper. Oben sehen wir zusätzliche Informationen zu den Daten im STP-Paket, wie z. B. die Root-Bridge-ID und die Kosten für den Root-Pfad. Wenn Sie mit STP nicht vertraut sind, machen Sie sich darüber keine Sorgen. Das Wichtigste dabei ist, dass wir durch Erhöhen der Ausführlichkeit zusätzliche Informationen über unseren Netzwerkverkehr erhalten können.
Die genauen Bytes eines Pakets anzeigen
Das Erhöhen der Ausführlichkeit ist praktisch, aber wir Ich sehe immer noch nicht das Fleisch des Inhalts der Päckchen. Wenn Sie wirklich die genauen Bytes in den Paketen sehen möchten, können Sie die Flags -x
und -X
verwenden. Das Flag -x
druckt die Daten in jedem Paket in hexadezimaler Form, während das Flag -X
die Daten auch in ASCII druckt. Hier ist die Ausgabe mit -x
:
Und hier ist die Ausgabe mit -X
:
Beachten Sie die Hex- und ASCII-Daten in den obigen Beispielen. In diesem Fall habe ich eine DNS A-Eintragsabfrage für durchgeführt. Beachten Sie außerdem, dass ich das Flag
-c
verwendet habe, um die Anzahl der zu erfassenden Pakete anzugeben, und einen Erfassungsfilter von port 53
bereitgestellt habe. Wir werden im nächsten Artikel über Filter sprechen.
Festhalten an den Zahlen
Wenn Sie mit tcpdump
arbeiten, werden Sie möglicherweise feststellen Das Standardverhalten besteht darin, IP-Adressen automatisch in vollqualifizierte Domänennamen (FQDNs) aufzulösen. Tcpdump übersetzt auch Portnummern (z. B. 22) in Anzeigenamen (z. B. SSH). Obwohl dieses Verhalten nett ist, möchten wir häufig die numerischen Daten anzeigen, damit wir unsere Fehlerbehebung in keiner Weise verschleiern. Dieses Standardverhalten kann geändert werden, indem entweder -n
übergeben wird, um die Suche nach IP-Adressen zu deaktivieren, oder -nn
, um sowohl die Suche nach IP-Adressen als auch nach Ports zu deaktivieren.
Hier ist das Ergebnis, wenn Sie -nn
verwenden:
Speichern Ihres Speicherauszugs
Möglicherweise möchten Sie irgendwann um Ihre Paketerfassungen für eine spätere Analyse oder für eine tiefere Analyse mit einem grafischen Tool wie Wireshark zu speichern. Diese Aufgabe kann einfach mit dem Flag -w
ausgeführt werden, mit dem Sie eine Paketerfassungsdatei schreiben können:
Hinweis: Sie können Ihre gespeicherte Datei mit tcpdump
mit dem Flag -r
oder mit einer anderen Anwendung, die das pcap-Dateiformat unterstützt.
Wie wir oben sehen können Das Flag -w
hat eine praktische PCAP-Datei erstellt, die wir mitnehmen können.
Zusammenfassung
Das Durchführen von Paketerfassungen ist eine leistungsstarke Technik in Ihrem Netzwerk Inventar zur Fehlerbehebung, insbesondere wenn Sie an einem Problem festhalten und der Rest des Netzwerks in Ordnung aussieht. Wenn Sie wissen, wie Sie tcpdump
in der Befehlszeile verwenden, können Sie sich stundenlange Frustrationen ersparen, wenn Sie versuchen, Probleme mit Netzwerkanwendungen zu lösen. Die Syntax ist sehr intuitiv, sobald Sie sich daran gewöhnt haben. P. >