GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-tcpdump-Befehl

tcpdump ist ein Befehlszeilendienstprogramm, mit dem wir den Netzwerkverkehr erfassen und analysieren können, der unser System durchläuft. Abhängig von den Filteroptionen können wir dieses Tool verwenden, um effektiv bei der Behebung von Netzwerkproblemen zu helfen. Es ist ein sehr häufig verwendetes Tool von Sysadmin-Ingenieuren für diese Funktionen.

In diesem Tutorial werden wir einige Verwendungsmöglichkeiten von tcpdump analysieren , aber nicht alles. Dies liegt daran, dass dieser Befehl einfach viel zu viele Filteroptionen umfasst und es nicht möglich ist, alle abzudecken. Wir werden hier nur einige der häufig verwendeten Optionen betrachten. Den Rest finden Sie auf der Manpage.

Tcpdump-Befehl installieren

Sie können überprüfen, ob Ihr System über den tcpdump verfügt Befehl, indem Sie

eingeben
tcpdump --version

Wenn die Ausgabe anzeigt, dass es nicht installiert ist, können Sie es direkt über den Paketmanager Ihres Systems abrufen.

HINWEIS :Da wir Pakete erfassen werden, benötigen wir erhöhte Berechtigungen. (sudo ist nötig). Wir werden allen tcpdump voranstellen Befehle mit sudo als Ergebnis.

Schnittstellen für die Paketerfassung auflisten

Bevor wir aktiv Pakete erfassen, schauen wir uns die verfügbaren Schnittstellen für tcpdump an .

Wir können Schnittstellen mit dem -D auflisten (Anzeige)-Option.

sudo tcpdump -D

Sie erhalten eine Liste aller verfügbaren Schnittstellen auf Ihrer Maschine. Dies hängt von System zu System ab, daher hat meines einige andere Schnittstellen wie Docker , da der Docker-Dienst ausgeführt wird, abgesehen von typischen Netzwerkschnittstellen.

Die spezielle Schnittstelle beliebig ermöglicht das Erfassen in beliebigen aktive Schnittstelle.

Jetzt, da wir die verfügbaren Schnittstellen auf unserem Rechner kennen, können wir mit dem Erfassen von Paketen beginnen!

Pakete mit tcpdump erfassen

Erfassen Sie alle Pakete in beliebigen Schnittstelle, indem Sie diesen Befehl ausführen:

sudo tcpdump -i any

Dadurch wird die Schnittstelle als beliebig angegeben , die zuvor erwähnte spezielle Schnittstelle.

tcpdump fährt fort, Pakete zu erfassen, bis es eine Unterbrechung empfängt Signal. Sie können die Aufnahme unterbrechen, indem Sie Ctrl+C drücken .

Die Ausgabe listet alle Paketerfassungen auf, bis das Interrupt-Signal empfangen wurde, um tcpdump zu beenden .

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:49:32.841984 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132693749:4132693857, ack 3344962610, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 108
10:49:32.842057 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
10:49:32.842101 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 144:260, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 116
10:49:32.842135 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 260:296, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
...
...
^C
264 packets captured
361 packets received by filter
91 packets dropped by kernel

Wie Sie sehen können, tcpdump hatte 264 Pakete erfasst. Zum Beispiel, da ich mit ssh mit diesem Server verbunden bin , tcpdump alle diese Pakete erfasst.

Anzahl der Paketerfassungen begrenzen

Um die Anzahl der erfassten Pakete zu begrenzen und tcpdump zu stoppen verwenden Sie den -c (Capture-Limit) Option:

sudo tcpdump -i any -c 2

Dies führt dazu, dass der Befehl tcpdump die Erfassung nach 2 Paketen automatisch beendet. In diesem Fall müssen wir nicht unbedingt das Interrupt-Signal verwenden, um es manuell zu beenden.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:57:31.284198 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132754245:4132754353, ack 3344963698, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 108
10:57:31.284275 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 36
2 packets captured
16 packets received by filter
8 packets dropped by kernel

Diese Option kann bei der Überwachung von Netzwerkverbindungen für die Fehlersuche bei Netzwerkproblemen sehr nützlich sein.

Namens- und Portauflösung deaktivieren

Standardmäßig tcpdump Der Befehl löst IP-Adressen und Ports in Namen auf (z. B. vultr.com.ssh , die die Namensauflösung aus den IP-Adressen und Ports durchführt).

Bei der Behebung von Netzwerkproblemen ist es oft einfacher, die IP-Adressen und Portnummern zu verwenden; Wir können die Namensauflösung deaktivieren, indem wir die Option -n verwenden und Portauflösung mit -nn .

sudo tcpdump -i any -c 2 -nn

Der obige Befehl erfasst 2 Pakete auf jeder Schnittstelle, während die Portauflösung deaktiviert wird.

Die Ausgabe stoppt also jetzt jede Namensauflösung und gibt einfach die IP-Adressen und Portnummern zurück.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108
11:00:36.459982 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 36
2 packets captured
8 packets received by filter
0 packets dropped by kernel

Lassen Sie uns hier eine Zeile der Ausgabe untersuchen.

11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108

Dies ist ein typisches TCP Paketerfassung. Auf andere Protokollpakete und -formate kann in der Handbuchseite des Befehls tcpdump verwiesen werden.

Das erste Feld, 11:00:36.459922 , stellt den Zeitstempel des empfangenen Pakets gemäß der lokalen Uhr dar.

Als nächstes IP stellt das Netzwerkschichtprotokoll dar – in diesem Fall IPv4 . Für IPv6 Pakete, der Wert ist IP6 .

Das nächste Feld, 111.11.111.11.22 , ist die Quell-IP-Adresse und der Port. Darauf folgen die Ziel-IP-Adresse und der Port, dargestellt durch 123.45.678.90.48006 .

Nachdem wir nun wissen, wie das grundlegende Ausgabeformat ist, wollen wir einige Filteroptionen für tcpdump analysieren

Pakete filtern

Einer von tcpdump Die leistungsstärkste Funktion des Befehls ist seine Fähigkeit zum Filtern die erfassten Pakete mit einer Vielzahl von Parametern, wie z. B. Quell- und Ziel-IP-Adressen, Ports, Protokolle usw. Schauen wir uns einige der häufigsten an.

Nach Protokoll filtern

Um Pakete basierend auf dem Protokoll zu filtern, müssen wir das Protokoll im Befehl angeben.

Um ICMP zu erfassen Pakete, können wir basierend auf ICMP filtern Protokoll.

sudo tcpdump -i any -c 5 icmp

Seit dem ping Befehl verwendet ICMP Pakete, können wir eingehende Pakete durch ping analysieren von einem anderen Computer.

Lassen Sie uns unseren aktuellen Rechner pingen und die eingehenden Ping-Pakete erfassen.

Öffnen Sie eine Terminalsitzung auf einem anderen Computer und geben Sie

ein
ping IP_ADDRESS_MACHINE_1

Jetzt in unserem tcpdump Terminalsitzung können wir jetzt sehen, dass diese ICMP-Ping-Antwortpakete erfasst werden.

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:18:47.947475 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 1, length 64
11:18:47.947554 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 1, length 64
11:18:48.947669 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 2, length 64
11:18:48.947752 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 2, length 64
11:18:49.947853 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 3, length 64
5 packets captured
6 packets received by filter
0 packets dropped by kernel

Hier ist 123.45.678.90 die IP-Adresse der Maschine (Maschine 2), die einen Ping an unseren tcpdump sendet System und 111.11.111.11 ist die IP-Adresse der Paketfiltermaschine (Maschine 1).

Da ich ssh verwendet habe Um die Ping-Anfragen zu senden, gibt es eine Domänenauflösung (aber keine Namensauflösung) zu vultr.com .

Nach Host filtern

Um die Erfassung nur auf Pakete zu beschränken, die sich auf einen bestimmten Host beziehen, können wir den host verwenden filtern

sudo tcpdump -i any -c5 -nn host 192.168.1.2

In diesem Beispiel tcpdump erfasst und zeigt nur Pakete zu und von Host 192.168.1.2 an .

Nach Port filtern

Um Pakete basierend auf dem gewünschten Dienst oder Port zu filtern, verwenden Sie den port Filter. Erfassen Sie beispielsweise Pakete, die sich auf eine SSH-Sitzung beziehen, indem Sie diesen Befehl verwenden (Port 22 filtern):

sudo tcpdump -i any -c5 -nn port 22

Filter basierend auf Quell-IP/Hostname

Sie können Pakete auch basierend auf der Quell- oder Ziel-IP-Adresse oder dem Hostnamen filtern. Zum Beispiel, um Pakete von Host 192.168.1.2 zu erfassen

sudo tcpdump -i any -c 5 -nn src 192.168.1.2

Wir können dst verwenden um auch nach Ziel-IP/Hostname zu filtern.

sudo tcpdump -i any -c 5 -nn src 172.168.1.2

Paketerfassungen speichern

Wir können die Ergebnisse der Paketerfassung in einer Datei zur späteren Analyse speichern.

Um Pakete in einer Datei zu speichern, anstatt sie auf dem Bildschirm anzuzeigen, verwenden Sie die Option -w :

sudo tcpdump -i any -c 5 -nn -w sample.pcap port 22

Dieser Befehl speichert die Ausgabe in einer Datei namens sample.pcap . Die .pcap die Erweiterung steht für „Packet Capture“ und ist die Konvention für dieses Dateiformat.

Schlussfolgerung

In diesem Tutorial haben wir gelernt, wie wir die Paketerfassung und -filterung basierend auf verschiedenen Optionen mit tcpdump durchführen können Befehl.


Linux
  1. So erfassen und analysieren Sie Pakete mit dem Befehl tcpdump unter Linux

  2. Linux-mv-Befehl

  3. Linux-Du-Befehl

  4. Linux-IP-Befehl

  5. Linux-cd-Befehl

Datumsbefehl in Linux

W-Befehl unter Linux

Tcpdump-Befehl unter Linux

Bei Befehl unter Linux

Df-Befehl unter Linux

Packet Analyzer:15 Beispiele für TCPDUMP-Befehle