Verwendung von tcpdump und 6 Beispiele
Versuchen Sie, Datenpakete zu erfassen, um den Datenverkehr in Ihrem Netzwerk zu analysieren? Möglicherweise sind Sie ein Serveradministrator, der auf ein Problem gestoßen ist und die im Netzwerk übertragenen Daten überwachen möchte. In jeder Situation benötigen Sie das Dienstprogramm tcpdump Linux.
In diesem Artikel werden wir den Befehl tcpdump ausführlich erläutern, zusammen mit einigen Anleitungen zur Installation und Verwendung von tcpdump auf Ihrem Linux-System.
Was ist der Befehl tcpdump?
Tcpdump ist ein leistungsstarkes Netzwerküberwachungstool, mit dem ein Benutzer Pakete und Datenverkehr in einem Netzwerk effizient filtern kann. Sie können detaillierte Informationen zu TCP / IP und den in Ihrem Netzwerk übertragenen Paketen erhalten. Tcpdump ist ein Befehlszeilenprogramm, dh Sie können es auf Linux-Servern ohne Anzeige ausführen.
Systemadministratoren können das Dienstprogramm tcpdump auch in cron integrieren, um verschiedene Aufgaben wie die Protokollierung zu automatisieren. Da tcpdump aufgrund seiner zahlreichen Funktionen sehr vielseitig einsetzbar ist, dient es sowohl als Fehlerbehebung als auch als Sicherheitstool.
So installieren Sie tcpdump unter Linux
Während tcpdump die meiste Zeit auf Ihrem System vorinstalliert ist, werden einige Linux-Distributionen nicht mit dem Paket geliefert. Daher müssen Sie das Dienstprogramm möglicherweise manuell auf Ihrem System installieren.
Mit dem Befehl which können Sie überprüfen, ob tcpdump auf Ihrem System installiert ist.
which tcpdump
Wenn in der Ausgabe ein Verzeichnispfad ( / usr / bin / tcpdump ) angezeigt wird , ist auf Ihrem System das Paket installiert. Wenn nicht, können Sie dies problemlos mit dem Standardpaketmanager auf Ihrem System tun.
So installieren Sie tcpdump auf Debian-basierten Distributionen wie Ubuntu:
sudo apt-get install tcpdump
Die Installation von tcpdump unter CentOS ist ebenfalls einfach.
sudo yum install tcpdump
Zu Arch-basierten Distributionen:
sudo pacman -S tcpdump
So installieren Sie auf Fedora:
sudo dnf install tcpdump
Beachten Sie, dass für das tcpdump-Paket libcap als Abhängigkeit erforderlich ist. Stellen Sie daher sicher, dass Sie es auch auf Ihrem System installieren.
Tcpdump-Beispiele zum Erfassen von Netzwerkpaketen unter Linux
Nachdem Sie tcpdump erfolgreich auf Ihrem Linux-Computer installiert haben, ist es Zeit, einige Pakete zu überwachen. Da für tcpdump Superuser-Berechtigungen erforderlich sind, um die meisten Vorgänge auszuführen, müssen Sie Ihren Befehlen sudo hinzufügen.
1. Listen Sie alle Netzwerkschnittstellen auf
Verwenden Sie das Flag -D mit dem Befehl tcpdump, um zu überprüfen, welche Netzwerkschnittstellen für die Erfassung verfügbar sind.
tcpdump -D
Wenn Sie das Flag –list-interfaces als Argument übergeben, wird dieselbe Ausgabe zurückgegeben.
tcpdump --list-interfaces
Die Ausgabe ist eine Liste aller Netzwerkschnittstellen, die auf Ihrem System vorhanden sind.
Nachdem Sie die Liste der Netzwerkschnittstellen erhalten haben, ist es Zeit, Ihr Netzwerk zu überwachen, indem Sie Pakete auf Ihrem System erfassen. Obwohl Sie angeben können, welche Schnittstelle Sie verwenden möchten, befiehlt das Argument any tcpdump, Netzwerkpakete mit einer beliebigen aktiven Schnittstelle zu erfassen.
tcpdump --interface any
Das System zeigt die folgende Ausgabe an.
2. Das tcpdump-Ausgabeformat
Ausgehend von der dritten Zeile bezeichnet jede Zeile der Ausgabe ein bestimmtes Paket, das von tcpdump erfasst wird. So sieht die Ausgabe eines einzelnen Pakets aus.
17:00:25.369138 wlp0s20f3 Out IP localsystem.40310 > kul01s10-in-f46.1e100.net.https: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 33
Beachten Sie, dass nicht alle Pakete auf diese Weise erfasst werden. Dies ist jedoch das allgemeine Format, dem die meisten von ihnen folgen.
Die Ausgabe enthält die folgenden Informationen.
- Zeitstempel des empfangenen Pakets
- Name der Schnittstelle
- Paketfluss
- Name des Netzwerkprotokolls
- IP-Adresse und Portdetails
- TCP-Flags
- Die Sequenznummer der Daten im Paket
- Daten bestätigen
- Fenstergröße
- Paketlänge
Das erste Feld ( 17: 00: 25.369138 ) zeigt den Zeitstempel an, zu dem Ihr System das Paket gesendet oder empfangen hat. Die aufgezeichnete Zeit wird aus der Ortszeit Ihres Systems extrahiert.
Das zweite und dritte Feld bezeichnen die verwendete Schnittstelle und den Paketfluss. Im obigen Snippet ist wlp0s20f3 der Name der drahtlosen Schnittstelle und Out der Paketfluss .
Das vierte Feld enthält Informationen zum Netzwerkprotokollnamen. Im Allgemeinen finden Sie zwei Protokolle: IP und IP6 , wobei IP IPV4 und IP6 IPV6 bedeutet.
Das nächste Feld enthält die IP-Adressen oder den Namen des Quell- und Zielsystems. Auf die IP-Adressen folgt die Portnummer.
Das sechste Feld in der Ausgabe besteht aus TCP-Flags. Es gibt verschiedene Flags, die in der Ausgabe von tcpdump verwendet werden.
Flaggenname | Wert | Beschreibung |
---|---|---|
SYN | S. | Die Verbindung wurde gestartet |
FLOSSE | F. | Verbindung beendet |
DRÜCKEN | P. | Daten werden gepusht |
RST | R. | Die Verbindung wird zurückgesetzt |
ACK | . | Wissen |
Die Ausgabe kann auch eine Kombination mehrerer TCP-Flags enthalten. Zum Beispiel steht FLAG [f.] Für ein FIN-ACK-Paket.
Wenn Sie sich im Ausgabeausschnitt weiter bewegen, enthält das nächste Feld die Sequenznummer ( Seq. 196: 568 ) der Daten im Paket. Das erste Paket hat immer einen positiven ganzzahligen Wert, und die nachfolgenden Pakete verwenden die relative Sequenznummer, um den Datenfluss zu verbessern.
Das nächste Feld enthält die Bestätigungsnummer (Bestätigung 1 ) oder die einfache Bestätigungsnummer. Das auf dem Gerät des Absenders erfasste Paket hat 1 als Bestätigungsnummer. Auf der Empfängerseite ist die Bestätigungsnummer der Wert des nächsten Pakets.
Das neunte Feld in der Ausgabe enthält die Fenstergröße ( Win 309 ), dh die Anzahl der im Empfangspuffer verfügbaren Bytes. Es gibt mehrere andere Felder, die der Fenstergröße folgen, einschließlich der maximalen Segmentgröße (MSS).
Das letzte Feld ( Länge 33 ) enthält die Länge des von tcpdump erfassten Gesamtpakets.
3. Begrenzen Sie die Anzahl der erfassten Pakete
Während Sie den Befehl tcpdump zum ersten Mal ausführen, stellen Sie möglicherweise fest, dass das System weiterhin Netzwerkpakete erfasst, bis Sie ein Interrupt-Signal übergeben. Sie können dieses Standardverhalten überschreiben, indem Sie die Anzahl der Pakete, die Sie zuvor erfassen möchten, mit dem Flag -c angeben.
tcpdump --interface any -c 10
Der oben genannte Befehl erfasst zehn Pakete von jeder aktiven Netzwerkschnittstelle.
4. Pakete basierend auf Feldern filtern
Wenn Sie ein Problem beheben, wird es nicht einfacher, einen großen Textblock auf Ihrem Terminal auszugeben. Hier kommt die Filterfunktion in tcpdump ins Spiel. Sie können die Pakete nach verschiedenen Feldern filtern, einschließlich Host, Protokoll, Portnummer und mehr.
Geben Sie Folgendes ein, um nur TCP-Pakete zu erfassen:
tcpdump --interface any -c 5 tcp
Wenn Sie die Ausgabe anhand der Portnummer filtern möchten, gehen Sie wie folgt vor:
tcpdump --interface any -c 5 port 50
Der oben genannte Befehl ruft nur Pakete ab, die über den angegebenen Port übertragen wurden.
So erhalten Sie die Paketdetails für einen bestimmten Host:
tcpdump --interface any -c 5 host 112.123.13.145
Wenn Sie von einem bestimmten Host gesendete oder empfangene Pakete filtern möchten, verwenden Sie das Argument src oder dst mit dem Befehl.
tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145
Sie können auch die logischen Operatoren und und oder verwenden , um zwei oder mehr Ausdrücke miteinander zu kombinieren. Um beispielsweise Pakete abzurufen , die zur Quell-IP 112.123.13.145 gehören, und den Port 80 zu verwenden :
tcpdump --interface any -c 10 src 112.123.13.145 and port 80
Komplexe Ausdrücke können wie folgt in Klammern zusammengefasst werden:
tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.234) and (port 45 or port 80)"
5. Zeigen Sie den Inhalt des Pakets an
Sie können die Flags -A und -x mit dem Befehl tcpdump verwenden, um den Inhalt des Netzwerkpakets zu analysieren. Das -A- Flag steht für das ASCII- Format und -x für das hexadezimale Format.
So zeigen Sie den Inhalt des nächsten vom System erfassten Netzwerkpakets an:
tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x
6. Speichern Sie die Erfassungsdaten in einer Datei
Wenn Sie die Erfassungsdaten zu Referenzzwecken speichern möchten, hilft Ihnen tcpdump. Übergeben Sie einfach das Flag -w mit dem Standardbefehl, um die Ausgabe in eine Datei zu schreiben, anstatt sie auf dem Bildschirm anzuzeigen.
tcpdump --interface any -c 10 -w data.pcap
Die Dateierweiterung .pcap steht für Packet Capture Data. Sie können den oben genannten Befehl auch im ausführlichen Modus mit dem Flag -v ausgeben.
tcpdump --interface any -c 10 -w data.pcap -v
Verwenden Sie zum Lesen einer .pcap- Datei mit tcpdump das Flag -r gefolgt vom Dateipfad. Das -r steht für Lesen .
tcpdump -r data.pcap
Sie können Netzwerkpakete auch aus den in der Datei gespeicherten Paketdaten filtern.
tcpdump -r data.pcap port 80
Überwachen des Netzwerkverkehrs unter Linux
Wenn Sie mit der Verwaltung eines Linux-Servers beauftragt wurden, ist der Befehl tcpdump ein hervorragendes Tool, das Sie in Ihr Arsenal aufnehmen können. Sie können Netzwerkprobleme einfach beheben, indem Sie in Ihrem Netzwerk übertragene Pakete in Echtzeit erfassen.
Zuvor muss Ihr Gerät jedoch mit dem Internet verbunden sein. Für Linux-Anfänger kann es sogar eine Herausforderung sein, sich über die Befehlszeile mit dem Wi-Fi zu verbinden. Aber wenn Sie die richtigen Werkzeuge verwenden, ist es ein Kinderspiel.