In diesem Artikel erklären wir, wie Sie Netzwerkprobleme unter Linux mit dem Befehl tcpdump beheben.
tcpdump ist ein flexibler, leistungsstarker Befehlszeilen-Paketanalysator; und libpcap, eine portable C/C++-Bibliothek zur Erfassung des Netzwerkverkehrs. Als leistungsstarkes und vielseitiges Tool mit vielen Optionen und Filtern kann tcpdump in einer Vielzahl von Fällen verwendet werden. Da es sich um ein Befehlszeilentool handelt, ist es ideal, um auf entfernten Servern oder Geräten ausgeführt zu werden, für die keine GUI verfügbar ist, um Daten zu sammeln, die später analysiert werden können. Es kann auch im Hintergrund oder als geplanter Job mit Tools wie Cron gestartet werden.
Beginnen Sie mit dem Installationsprozess.
1. tcpdump installieren
Wenn tcpdump noch nicht auf Ihrem System installiert ist, können Sie es mit dem folgenden Befehl installieren:
Für CentOS- oder Red Hat Enterprise Linux-basierte Systeme:
# dnf install tcpdump -y
Für Ubuntu-basierte Systeme:
# apt-get install tcpdump -y
2. Überprüfen Sie die Installation
Um die Installation zu überprüfen, verwenden Sie den folgenden Befehl:
# which tcpdump
Ausgabe:
/usr/sbin/tcpdump
Erfassen Sie Pakete mit tcpdump
Überprüfen Sie vor dem Erfassen der Pakete die Netzwerkschnittstelle mit den folgenden Befehlen:
# tcpdump -D
Es werden alle verfügbaren Netzwerkschnittstellen angezeigt.
Beginnen wir nun mit der Erfassung einiger Pakete mit den folgenden Befehlen:
# tcpdump --interface any
Tcpdump erfasst weiterhin Pakete, bis es ein Interrupt-Signal empfängt. Sie können die Aufnahme unterbrechen, indem Sie Strg+C drücken. Um die Anzahl der erfassten Pakete zu begrenzen und tcpdump zu stoppen, verwenden Sie die Option -c (für count):
# tcpdump -i any -c 10
Namensauflösung deaktivieren
Bei der Behebung von Netzwerkproblemen ist es oft einfacher, die IP-Adressen und Portnummern zu verwenden. deaktivieren Sie die Namensauflösung mit der Option -n und die Portauflösung mit -nn:
# tcpdump -i any -c5 -nn
Wie der obige Befehl erfasst die Ausgabe jetzt die IP-Adressen und Portnummern.
Pakete filtern
Eine der leistungsstärksten Funktionen von tcpdump ist die Fähigkeit, die erfassten Pakete anhand einer Vielzahl von Parametern zu filtern, wie z. B. Quell- und Ziel-IP-Adressen, Ports, Protokolle usw. Sehen wir uns einige der gängigsten an.
Um nur ICMP-Pakete zu erfassen, verwenden Sie die folgenden Befehle:
# tcpdump -i any -c10 icmp
Beschränken Sie die Erfassung auf nur Pakete, die sich auf einen bestimmten Host beziehen, indem Sie den Hostfilter verwenden:
# tcpdump -i any -c5 -nn host 192.168.0.12
Der obige Befehl erfasst und zeigt nur Pakete von und zu Host 192.168.0.12 an.
Um Pakete nach dem gewünschten Dienst oder Port zu filtern, verwenden Sie den Portfilter. Erfassen Sie beispielsweise Pakete, die sich auf einen Webdienst (HTTP) beziehen, indem Sie diesen Befehl verwenden:
# tcpdump -i any -c10 -nn port 80
Zum Filtern von Paketen basierend auf der Quell- oder Ziel-IP-Adresse oder dem Hostnamen. Um beispielsweise Pakete von Host 192.168.0.12 zu erfassen:
# tcpdump -i any -c10 -nn src 192.168.0.12
Captures in einer Datei speichern
Um Pakete in einer Datei zu speichern, anstatt sie auf dem Bildschirm anzuzeigen, verwenden Sie die Option -w (für write):
# tcpdump -i any -c10 -nn -w webserver.pcap port 80
Der obige Befehl ermöglicht es beispielsweise, Pakete im Batch-Modus über Nacht zu erfassen und die Ergebnisse am Morgen zu überprüfen. Es hilft auch, wenn zu viele Pakete analysiert werden müssen, da die Echtzeiterfassung zu schnell erfolgen kann.
Weitere Beispielbefehle
Zum Drucken der Start- und Endpakete (die SYN- und FIN-Pakete) jeder TCP-Konversation, an der ein nicht lokaler Host beteiligt ist.
# tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
Um die TCP-Pakete mit den beiden gesetzten Flags RST und ACK zu drucken. (dh wählen Sie nur die RST- und ACK-Flags im Flags-Feld aus, und wenn das Ergebnis "RST und ACK beide gesetzt" ist, stimmen Sie überein)
# tcpdump 'tcp[tcpflags] & (tcp-rst|tcp-ack) == (tcp-rst|tcp-ack)'
Um alle IPv4-HTTP-Pakete von und zu Port 80 zu drucken, dh nur Pakete zu drucken, die Daten enthalten, nicht beispielsweise SYN- und FIN-Pakete und nur ACK-Pakete. (IPv6 wird dem Leser als Übung überlassen.)
# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<2)) -="" ((tcp[12]&0xf0)="">>2)) != 0)'
So drucken Sie IP-Pakete, die länger als 576 Byte sind und über Gateway-Snup gesendet werden:
# tcpdump 'gateway snup and ip[2:2] > 576'
So drucken Sie IP-Broadcast- oder Multicast-Pakete, die nicht über Ethernet-Broadcast oder Multicast gesendet wurden:
# tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
So drucken Sie alle ICMP-Pakete, die keine Echo-Anfragen/Antworten sind (dh keine Ping-Pakete):
# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
Überprüfen Sie die Manpage mit dem folgenden Befehl:
# man tcpdump
In diesem Artikel haben wir gesehen, wie Sie Netzwerkprobleme unter Linux mit dem Befehl tcpump beheben können.
Holen Sie sich einen leistungsstarken dedizierten Dual-Server der E5-Serie und einen günstigen KVM-VPS.