Einige Funktionen der Verwendung von tcpdump zum Erfassen von Paketen in der Linux-Befehlszeile

Einige Funktionen der Verwendung von tcpdump zum Erfassen von Paketen in der Linux-Befehlszeile

tcpdump ist ein flexibles und leistungsstarkes Tool zur Paketerfassung, das bei der Behebung von Netzwerkproblemen effektiv helfen kann.

Aufgrund meiner Erfahrung als Administrator stoße ich häufig auf Probleme mit der Netzwerkverbindung, die sehr schwer zu beheben sind. In solchen Situationen ist tcpdump praktisch.

tcpdump ist ein Befehlszeilenprogramm, mit dem Sie den Paketverkehr erfassen und analysieren können, der durch Ihr System läuft. Es wird häufig als Tool zur Netzwerk-Fehlerbehebung sowie als Sicherheitstool verwendet.

Tcpdump ist ein leistungsstarkes Tool, das eine Vielzahl von Optionen und Filterregeln unterstützt und auf eine Vielzahl von Szenarien anwendbar ist. Da es sich um ein Befehlszeilentool handelt, eignet es sich zum Sammeln von Datenpaketen auf Remote-Servern oder Geräten ohne grafische Oberfläche zur späteren Analyse. Es kann im Hintergrund gestartet werden, oder Sie können ein Timing-Tool wie cron verwenden, um eine geplante Aufgabe zu erstellen und es zu aktivieren.

In diesem Artikel besprechen wir einige der am häufigsten verwendeten Funktionen von tcpdump.

1. Installieren Sie tcpdump unter Linux

tcpdump unterstützt viele Linux-Distributionen, daher besteht eine gute Chance, dass es bereits auf Ihrem System installiert ist. Überprüfen Sie mit dem folgenden Befehl, ob tcpdump installiert ist:

$ welcher TCPdump
/usr/sbin/tcpdump

Wenn tcpdump nicht installiert ist, können Sie es mit Ihrem Paketmanager installieren. Installieren Sie beispielsweise auf CentOS- oder Red Hat Enterprise-Systemen tcpdump mit dem folgenden Befehl:

$ sudo yum install -y tcpdump

tcpdump hängt von libpcap ab, einer Bibliothek zum Erfassen von Netzwerkpaketen. Wenn die Bibliotheksdatei nicht installiert ist, installiert das System sie automatisch basierend auf den Abhängigkeiten.

Jetzt können Sie mit der Erfassung von Paketen beginnen.

2. Verwenden Sie tcpdump, um Pakete zu erfassen

Die Verwendung von tcpdump zum Erfassen von Paketen erfordert Administratorrechte, daher beginnen die meisten Befehle in den folgenden Beispielen mit sudo.

Verwenden Sie zunächst den Befehl tcpdump -D, um die Netzwerkschnittstellen aufzulisten, die Pakete erfassen können:

$ sudo tcpdump -D
eth0
virbr0
eth1
any (Pseudogerät, das auf allen Schnittstellen erfasst)
lo [Loopback]

Wie oben gezeigt, können Sie alle Netzwerkschnittstellen auf meinem Computer sehen, die Pakete erfassen können. Mit der speziellen Schnittstelle any können Pakete von allen aktiven Netzwerkschnittstellen erfasst werden.

Wir verwenden den folgenden Befehl, um Pakete auf jeder Schnittstelle zu erfassen:

$ sudo tcpdump -i beliebig
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], Sequenz 3770820720:3770820916, ack 3503648727, Win 309, Optionen [nop,nop,TS val 76577898 ecr 510770929], Länge 196
09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 391, Optionen [nop,nop,TS val 510771017 ecr 76577898], Länge 0
09:56:18.295058 IP rhel75.59883 > gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43)
09:56:18.310225 IP gateway.domain > rhel75.59883: 2486 NXDomain* 0/1/0 (102)
09:56:18.312482 IP rhel75.49685 > gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44)
09:56:18.322425 IP gateway.domain > rhel75.49685: 34242 NXDomain* 0/1/0 (103)
09:56:18.323164 IP rhel75.56631 > gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44)
09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], Sequenz 196:584, ack 1, Win 309, Optionen [nop,nop,TS val 76577928 ecr 510771017], Länge 388
09:56:18.323563 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 584, win 411, Optionen [nop,nop,TS val 510771047 ecr 76577928], Länge 0
09:56:18.335569 IP gateway.domain > rhel75.56631: 29904 NXDomain* 0/1/0 (103)
09:56:18.336429 IP rhel75.44007 > gateway.domain: 61677+ PTR? 98.122.168.192.in-addr.arpa. (45)
09:56:18.336655 IP-Gateway.Domäne > rhel75.44007: 61677* 1/0/0 PTR rhel75. (65)
09:56:18.337177 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], Sequenz 584:1644, ack 1, Win 309, Optionen [nop,nop,TS val 76577942 ecr 510771047], Länge 1060

---- LANGE AUSGABE ÜBERSPRINGEN -----

09:56:19.342939 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 1752016, win 1444, Optionen [nop,nop,TS val 510772067 ecr 76578948], Länge 0
^C
9003 Pakete erfasst
9010 Pakete vom Filter empfangen
7 Pakete vom Kernel verworfen
$

tcpdump erfasst weiterhin Pakete, bis es ein Unterbrechungssignal empfängt. Sie können Strg+C drücken, um die Erfassung von Paketen zu beenden. Wie im obigen Beispiel gezeigt, hat tcpdump mehr als 9000 Pakete erfasst. Da ich in diesem Beispiel per SSH eine Verbindung zum Server herstelle, erfasst tcpdump auch alle diese Pakete. Mit der Option -c kann die Anzahl der von tcpdump erfassten Pakete begrenzt werden:

$ sudo tcpdump -i beliebig -c 5
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
11:21:30.242740 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], Sequenz 3772575680:3772575876, ack 3503651743, Win 309, Optionen [nop,nop,TS val 81689848 ecr 515883153], Länge 196
11:21:30.242906 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 1443, Optionen [nop,nop,TS val 515883235 ecr 81689848], Länge 0
11:21:30.244442 IP rhel75.43634 > gateway.domain: 57680+ PTR? 1.64.168.192.in-addr.arpa. (43)
11:21:30.244829 IP gateway.domain > rhel75.43634: 57680 NXDomain 0/0/0 (43)
11:21:30.247048 IP rhel75.33696 > gateway.domain: 37429+ PTR? 28.64.168.192.in-addr.arpa. (44)
5 Pakete erfasst
12 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen
$

Wie oben gezeigt, stoppt tcpdump automatisch die Erfassung von Paketen, nachdem 5 Pakete erfasst wurden. Dies ist in einigen Szenarien sehr nützlich – beispielsweise müssen Sie nur eine kleine Anzahl von Paketen zur Analyse erfassen. Wenn wir Filterregeln verwenden müssen, um bestimmte Pakete zu erfassen (wie unten gezeigt), ist die Rolle von -c sehr wichtig.

Im obigen Beispiel löst tcpdump die IP-Adresse und Portnummer standardmäßig in den entsprechenden Schnittstellennamen und Dienstprotokollnamen auf. Normalerweise ist es bei der Netzwerkfehlerbehebung einfacher, das Problem anhand der IP-Adresse und der Portnummer zu analysieren. Verwenden Sie die Option -n, um die IP-Adresse anzuzeigen, und die Option -nn, um die Portnummer anzuzeigen:

$ sudo tcpdump -i beliebig -c5 -nn
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
23:56:24.292206 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], Sequenz 166198580:166198776, ack 2414541257, Win 309, Optionen [nop,nop,TS val 615664 ecr 540031155], Länge 196
23:56:24.292357 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 196, win 1377, Optionen [nop,nop,TS val 540031229 ecr 615664], Länge 0
23:56:24.292570 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], Sequenz 196:568, Ack 1, Win 309, Optionen [nop,nop,TS val 615664 ecr 540031229], Länge 372
23:56:24.292655 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 568, win 1400, Optionen [nop,nop,TS val 540031229 ecr 615664], Länge 0
23:56:24.292752 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], Sequenz 568:908, Ack 1, Win 309, Optionen [nop,nop,TS val 615664 ecr 540031229], Länge 340
5 Pakete erfasst
6 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Wie oben gezeigt, werden die IP-Adresse und die Portnummer in den erfassten Datenpaketen angezeigt. Dadurch wird auch verhindert, dass tcpdump DNS-Lookups ausgibt, was bei der Fehlerbehebung in einem Netzwerk zur Reduzierung des Datenverkehrs beitragen kann.

Nachdem Sie nun wissen, wie Pakete erfasst werden, analysieren wir die Bedeutung dieser erfassten Paketausgaben.

3. Verstehen Sie die erfassten Nachrichten

tcpdump kann Datenpakete verschiedener Protokolltypen wie TCP, UDP, ICMP usw. erfassen und dekodieren. Obwohl es unmöglich ist, hier alle Datagrammtypen vorzustellen, können wir Datagramme vom Typ TCP analysieren, um Ihnen den Einstieg zu erleichtern. Ausführlichere Informationen zu tcpdump finden Sie im entsprechenden Hilfehandbuch. Die von tcpdump erfassten TCP-Pakete sehen folgendermaßen aus:

08:41:13.729687 IP 192.168.64.28.22 > 192.168.64.1.41916: Flags [P.], Sequenz 196:568, Ack 1, Win 309, Optionen [nop,nop,TS val 117964079 ecr 816509256], Länge 372

Die spezifischen Felder variieren je nach Nachrichtentyp, das obige Beispiel ist jedoch ein allgemeines Format.

Das erste Feld 08:41:13.729687 ist der lokale Zeitstempel des Systems, wenn das Datenpaket erfasst wird.

Dann ist IP der Protokolltyp der Netzwerkschicht, hier ist es IPv4, wenn es sich um das IPv6-Protokoll handelt, ist der Feldwert IP6.

192.168.64.28.22 ist die Quell-IP-Adresse und Portnummer, gefolgt von der Ziel-IP-Adresse und ihrer Portnummer, hier ist es 192.168.64.1.41916.

Nach der Quell-IP und der Ziel-IP ist das Markierungssegment der TCP-Nachrichten mit den Flags [S.] zu sehen. Dieses Feld nimmt normalerweise die folgenden Werte an:

Dieses Feld kann auch eine Kombination dieser Werte sein, wie beispielsweise [S.] für ein SYN-ACK-Paket.

Als nächstes folgt die Sequenznummer der Daten in diesem Paket. Für das erste erfasste Datenpaket ist der Feldwert eine absolute Zahl, und nachfolgende Pakete verwenden relative Werte, um die Abfrage und Verfolgung zu erleichtern. Beispielsweise bedeutet hier seq 196:568, dass das Datenpaket die Bytes 196 bis 568 des Datenstroms enthält.

Als nächstes kommt der Bestätigungswert: ack 1. Dieses Paket ist der Datensender und der Bestätigungswert ist 1. Auf der Datenempfängerseite stellt dieses Feld das nächste erwartete Datenbyte im Datenstrom dar. Beispielsweise sollte der Bestätigungswert des nächsten Datenpakets im Datenstrom 568 sein.

Das nächste Feld ist die Empfangsfenstergröße 309, die die Anzahl der im Empfangspuffer verfügbaren Bytes angibt, gefolgt von TCP-Optionen wie MSS (maximale Segmentgröße) oder Fensterverhältniswert. Ausführlichere Informationen zum TCP-Protokoll finden Sie unter Transmission Control Protocol (TCP)-Parameter.

Schließlich stellt die Länge 372 die Paketnutzlastlänge in Bytes dar. Diese Länge unterscheidet sich von der Bytewertlänge in der Seq-Sequenznummer.

Jetzt erfahren Sie, wie Sie Datenpakete filtern, um die Analyse und Problemlokalisierung zu vereinfachen.

4. Filtern von Datenpaketen

Wie oben erwähnt, kann tcpdump viele Arten von Datenpaketen erfassen, von denen viele möglicherweise nicht mit dem Problem zusammenhängen, das wir finden müssen. Wenn Sie beispielsweise ein Netzwerkproblem bei der Verbindung mit einem Webserver lokalisieren, müssen Sie sich nicht um SSH-Datagramme kümmern. Daher kann das Herausfiltern von SSH-Paketen in den Paketerfassungsergebnissen die Analyse des Problems erleichtern.

tcpdump verfügt über zahlreiche Parameteroptionen zum Festlegen von Paketfilterregeln, z. B. zum Filtern von Paketen basierend auf Quell-IP- und Ziel-IP-Adressen, Portnummern, Protokollen usw.

Hier sind einige der am häufigsten verwendeten Filtermethoden.

Protokoll

Durch die Angabe des Protokolls im Befehl können Sie Pakete basierend auf dem Protokolltyp filtern. Verwenden Sie beispielsweise den folgenden Befehl, um nur ICMP-Nachrichten zu erfassen:

$ sudo tcpdump -i beliebig -c5 icmp
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes

Öffnen Sie dann ein weiteres Terminal und pingen Sie einen anderen Computer an:

$ ping opensource.com
PING opensource.com (54.204.39.132) 56(84) Bytes Daten.
64 Bytes von ec2-54-204-39-132.compute-1.amazonaws.com (54.204.39.132): icmp_seq=1 ttl=47 Zeit=39,6 ms

Wenn Sie zum Terminal zurückkehren und den Befehl „tcpdump“ ausführen, können Sie sehen, dass dieser ICMP-Nachrichten herausfiltert. Hier zeigt tcpdump die Datenpakete zur Domänennamenauflösung im Zusammenhang mit opensource.com nicht an:

09:34:20.136766 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP-Echoanforderung, ID 20361, Sequenz 1, Länge 64
09:34:20.176402 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP-Echo-Antwort, ID 20361, Sequenz 1, Länge 64
09:34:21.140230 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP-Echoanforderung, ID 20361, Sequenz 2, Länge 64
09:34:21.180020 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP-Echo-Antwort, ID 20361, Sequenz 2, Länge 64
09:34:22.141777 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP-Echoanforderung, ID 20361, Sequenz 3, Länge 64
5 Pakete erfasst
5 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Gastgeber

Verwenden Sie den Hostparameter, um nur Pakete zu erfassen, die sich auf einen bestimmten Host beziehen:

$ sudo tcpdump -i beliebig -c5 -nn Host 54.204.39.132
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
09:54:20.042023 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [S], Sequenz 1375157070, Win 29200, Optionen [mss 1460,sackOK,TS val 122350391 ecr 0,nop,wscale 7], Länge 0
09:54:20.088127 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [S.], Sequenz 1935542841, ack 1375157071, Win 28960, Optionen [mss 1460,sackOK,TS val 522713542 ecr 122350391,nop,wscale 9], Länge 0
09:54:20.088204 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [.], ack 1, win 229, Optionen [nop,nop,TS val 122350437 ecr 522713542], Länge 0
09:54:20.088734 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [P.], Sequenz 1:113, Ack 1, Win 229, Optionen [nop,nop,TS val 122350438 ecr 522713542], Länge 112: HTTP: GET / HTTP/1.1
09:54:20.129733 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [.], ack 113, win 57, Optionen [nop,nop,TS val 522713552 ecr 122350438], Länge 0
5 Pakete erfasst
5 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Wie oben gezeigt, werden nur Pakete erfasst und angezeigt, die sich auf 54.204.39.132 beziehen.

Portnummer

tcpdump kann Pakete basierend auf Diensttyp oder Portnummer filtern. Erfassen Sie beispielsweise die mit dem HTTP-Dienst verbundenen Datenpakete:

$ sudo tcpdump -i beliebig -c5 -nn Port 80
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
09:58:28.790548 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [S], Sequenz 1745665159, Win 29200, Optionen [mss 1460,sackOK,TS val 122599140 ecr 0,nop,wscale 7], Länge 0
09:58:28.834026 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [S.], Sequenz 4063583040, Ack 1745665160, Win 28960, Optionen [mss 1460,sackOK,TS val 522775728 ecr 122599140,nop,wscale 9], Länge 0
09:58:28.834093 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [.], ack 1, win 229, Optionen [nop,nop,TS val 122599183 ecr 522775728], Länge 0
09:58:28.834588 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [P.], Seq. 1:113, Ack. 1, Win 229, Optionen [nop,nop,TS val 122599184 ecr 522775728], Länge 112: HTTP: GET / HTTP/1.1
09:58:28.878445 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [.], ack 113, win 57, Optionen [nop,nop,TS val 522775739 ecr 122599184], Länge 0
5 Pakete erfasst
5 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

IP-Adresse/Hostname

Ebenso können Sie Pakete basierend auf der Quell-IP-Adresse, der Ziel-IP-Adresse oder dem Hostnamen filtern. So erfassen Sie beispielsweise Datenpakete mit der Quell-IP-Adresse 192.168.122.98:

$ sudo tcpdump -i any -c5 -nn src 192.168.122.98
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
10:02:15.220824 IP 192.168.122.98.39436 > 192.168.122.1.53: 59332+ A? opensource.com. (32)
10:02:15.220862 IP 192.168.122.98.39436 > 192.168.122.1.53: 20749+ AAAA? opensource.com. (32)
10:02:15.364062 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [S], Sequenz 1108640533, Win 29200, Optionen [mss 1460,sackOK,TS val 122825713 ecr 0,nop,wscale 7], Länge 0
10:02:15.409229 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [.], ack 669337581, win 229, Optionen [nop,nop,TS val 122825758 ecr 522832372], Länge 0
10:02:15.409667 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [P.], Sequenz 0:112, Ack 1, Win 229, Optionen [nop,nop,TS val 122825759 ecr 522832372], Länge 112: HTTP: GET / HTTP/1.1
5 Pakete erfasst
5 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Beachten Sie, dass in diesem Beispiel Pakete von Port 53 und Port 80 der Quell-IP-Adresse 192.168.122.98 erfasst werden und ihre Antwortpakete nicht angezeigt werden, da sich die Quell-IP-Adressen dieser Pakete geändert haben.

Im Gegensatz dazu dient die Verwendung von dst dazu, Pakete nach Ziel-IP/Hostnamen zu filtern.

$ sudo tcpdump -i any -c5 -nn dst 192.168.122.98
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
10:05:03.572931 IP 192.168.122.1.53 > 192.168.122.98.47049: 2248 1/0/0 A 54.204.39.132 (48)
10:05:03.572944 IP 192.168.122.1.53 > 192.168.122.98.47049: 33770 0/0/0 (32)
10:05:03.621833 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [S.], Sequenz 3474204576, Ack 3256851264, Win 28960, Optionen [mss 1460,sackOK,TS val 522874425 ecr 122993922,nop,wscale 9], Länge 0
10:05:03.667767 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [.], ack 113, win 57, Optionen [nop,nop,TS val 522874436 ecr 122993972], Länge 0
10:05:03.672221 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [P.], Seq 1:643, Ack 113, Win 57, Optionen [nop,nop,TS val 522874437 ecr 122993972], Länge 642: HTTP: HTTP/1.1 302 gefunden
5 Pakete erfasst
5 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Screening auf mehrere Erkrankungen

Natürlich können Sie zum Filtern von Paketen mehrere Bedingungen verwenden und die logischen Operatoren „und“ und „oder“ zum Erstellen von Filterregeln verwenden. So filtern Sie beispielsweise HTTP-Pakete von der Quell-IP-Adresse 192.168.122.98:

$ sudo tcpdump -i any -c5 -nn src 192.168.122.98 und Port 80
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
10:08:00.472696 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [S], Sequenz 2712685325, Win 29200, Optionen [mss 1460,sackOK,TS val 123170822 ecr 0,nop,wscale 7], Länge 0
10:08:00.516118 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 268723504, win 229, Optionen [nop,nop,TS val 123170865 ecr 522918648], Länge 0
10:08:00.516583 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [P.], Sequenz 0:112, Ack 1, Win 229, Optionen [nop,nop,TS val 123170866 ecr 522918648], Länge 112: HTTP: GET / HTTP/1.1
10:08:00.567044 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 643, win 239, Optionen [nop,nop,TS val 123170916 ecr 522918661], Länge 0
10:08:00.788153 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [F.], Sequenz 112, Bestätigung 643, Gewinn 239, Optionen [nop,nop,TS val 123171137 ecr 522918661], Länge 0
5 Pakete erfasst
5 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Sie können Klammern auch verwenden, um komplexere Filterregeln zu erstellen. Setzen Sie Ihre Filterregeln in der Shell jedoch in Anführungszeichen, damit sie nicht als Shell-Ausdrücke erkannt werden:

$ sudo tcpdump -i any -c5 -nn "Port 80 und (Quelle 192.168.122.98 oder Quelle 54.204.39.132)"
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
10:10:37.602214 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [S], Sequenz 871108679, Win 29200, Optionen [mss 1460,sackOK,TS val 123327951 ecr 0,nop,wscale 7], Länge 0
10:10:37.650651 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [S.], Sequenz 854753193, Ack 871108680, Win 28960, Optionen [mss 1460,sackOK,TS val 522957932 ecr 123327951,nop,wscale 9], Länge 0
10:10:37.650708 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [.], ack 1, win 229, Optionen [nop,nop,TS val 123328000 ecr 522957932], Länge 0
10:10:37.651097 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [P.], Sequenz 1:113, Ack 1, Win 229, Optionen [nop,nop,TS val 123328000 ecr 522957932], Länge 112: HTTP: GET / HTTP/1.1
10:10:37.692900 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [.], ack 113, win 57, Optionen [nop,nop,TS val 522957942 ecr 123328000], Länge 0
5 Pakete erfasst
5 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

In diesem Beispiel erfassen wir nur HTTP-Pakete (Portnummer 80) von der Quell-IP 192.168.122.98 oder 54.204.39.132. Mit dieser Methode ist es einfach, die Datenpakete der beiden interagierenden Parteien im Datenstrom zu erfassen.

5. Überprüfen Sie den Inhalt des Datenpakets

Im obigen Beispiel haben wir nur Regeln zum Filtern von Paketen basierend auf den Informationen im Paketheader eingerichtet, wie etwa Quelladresse, Zieladresse, Portnummer usw. Manchmal müssen wir Netzwerkverbindungsprobleme analysieren und möglicherweise den Inhalt der Datenpakete analysieren, um zu bestimmen, was gesendet und was empfangen werden muss. tcpdump bietet zwei Optionen zum Anzeigen des Paketinhalts: -X druckt den Datagramminhalt im Hexadezimalformat und -A druckt den ASCII-Wert des Datagramms.

Der Inhalt der HTTP-Anforderungsnachricht lautet beispielsweise wie folgt:

$ sudo tcpdump -i beliebig -c10 -nn -A Port 80
tcpdump: ausführliche Ausgabe unterdrückt, verwenden Sie -v oder -vv für die vollständige Protokolldekodierung
lauscht auf jedem, Link-Typ LINUX_SLL (Linux gekocht), Erfassungsgröße 262144 Bytes
13:02:14.871803 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [S], Sequenz 2546602048, Win 29200, Optionen [mss 1460,sackOK,TS val 133625221 ecr 0,nop,wscale 7], Länge 0
E..<..@[email protected].'[email protected]............
............................
13:02:14.910734 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [S.], Sequenz 1877348646, ack 2546602049, Win 28960, Optionen [mss 1460,sackOK,TS val 525532247 ecr 133625221,nop,wscale 9], Länge 0
E..<..@./..a6.'...zb.P..o..&...A..q a..........
.RW......................................
13:02:14.910832 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 1, win 229, Optionen [nop,nop,TS val 133625260 ecr 525532247], Länge 0
E..4..@[email protected].'....P...Ao..'...........
.....RW...............
13:02:14.911808 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [P.], Sequenz 1:113, Ack 1, Win 229, Optionen [nop,nop,TS val 133625261 ecr 525532247], Länge 112: HTTP: GET / HTTP/1.1
E.....@[email protected].'....P...Ao..'...........
.....R.WGET / HTTP/1.1
Benutzer-Agent: Wget/1.14 (linux-gnu)
Akzeptieren: */*
Host: opensource.com
Verbindung: Keep-Alive
................
13:02:14.951199 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [.], ack 113, win 57, Optionen [nop,nop,TS val 525532257 ecr 133625261], Länge 0
E..4.F@./.."6.'...zb.P..o..'.......9.2.....
.Ra...................
13:02:14.955030 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [P.], Seq 1:643, Ack 113, Win 57, Optionen [nop,nop,TS val 525532258 ecr 133625261], Länge 642: HTTP: HTTP/1.1 302 gefunden
E....G@./...6.'...zb.P..o..'.......9.......
.Rb...HTTP/1.1 302 gefunden
Server: nginx
Datum: So, 23. Sep. 2018 17:02:14 GMT
Inhaltstyp: text/html; Zeichensatz=iso-8859-1
Inhaltslänge: 207
X-Inhaltstyp-Optionen: nosniff
Standort: https://opensource.com/
Cache-Steuerung: max-age=1209600
Läuft ab: So., 07. Okt. 2018 17:02:14 GMT
X-Anforderungs-ID: v-6baa3acc-bf52-11e8-9195-22000ab8cf2d
X-Lack: 632951979
Alter: 0
Über: 1.1 Lack (Lack/5.2)
X-Cache: VERPASST
Verbindung: Keep-Alive

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><Kopf>
<title>302 gefunden</title>
</Kopf><Körper>
<h1>Gefunden</h1>
<p>Das Dokument wurde <a href="https://opensource.com/">hierher</a> verschoben.</p>
</body></html>
................
13:02:14.955083 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 643, win 239, Optionen [nop,nop,TS val 133625304 ecr 525532258], Länge 0
E..4..@[email protected].'....P....o..............
.....Rb...............
13:02:15.195524 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [F.], Sequenz 113, Bestätigung 643, Gewinn 239, Optionen [nop,nop,TS val 133625545 ecr 525532258], Länge 0
E..4..@[email protected].'....P....o.............
.....Rb...............
13:02:15.236592 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [F.], Seq 643, Ack 114, Win 57, Optionen [nop,nop,TS val 525532329 ecr 133625545], Länge 0
E..4.H@./.. 6.'...zb.P..o..........9.I.....
.R......................
13:02:15.236656 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 644, win 239, Optionen [nop,nop,TS val 133625586 ecr 525532329], Länge 0
E..4..@[email protected].'....P....o..............
.....R..................
10 Pakete erfasst
10 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Dies ist sehr nützlich, um einige häufige Probleme mit der HTTP-Aufruf-API-Schnittstelle zu lokalisieren. Wenn es sich um eine verschlüsselte Nachricht handelt, ist diese Ausgabe natürlich nicht sehr nützlich.

6. Speichern Sie die erfassten Daten

tcpdump bietet die Funktion, erfasste Paketdaten für eine spätere Analyse der Datenpakete zu speichern. So können Sie beispielsweise Pakete nachts erfassen lassen und diese dann morgens analysieren. Wenn viele Datenpakete vorhanden sind, ist eine zu schnelle Anzeige ebenfalls nicht förderlich für die Analyse. Das Speichern der Datenpakete ist für die Problemanalyse förderlicher.

Verwenden Sie die Option -w, um Pakete zu speichern, anstatt die erfassten Pakete auf dem Bildschirm anzuzeigen:

$ sudo tcpdump -i beliebig -c10 -nn -w webserver.pcap port 80
[sudo] Passwort für Ricardo:
tcpdump: lauscht auf jedem, Link-Typ LINUX_SLL (Linux-gekocht), Erfassungsgröße 262144 Bytes
10 Pakete erfasst
10 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Dieser Befehl speichert die erfassten Datenpakete in der Datei webserver.pcap. Die Endung „pcap“ weist darauf hin, dass die Datei das Format erfasster Datenpakete hat.

Wie im Beispiel zu sehen, erfolgt beim Speichern der Datenpakete in der Datei keine Ausgabe auf dem Bildschirm. -c10 bedeutet, dass die Erfassung nach dem Speichern von 10 Datenpaketen beendet wird. Wenn Sie eine Rückmeldung wünschen, ob die Pakete tatsächlich erfasst wurden, verwenden Sie die Option -v.

tcpdump speichert die Pakete in einer Binärdatei, sodass Sie sie nicht einfach mit einem Texteditor öffnen können. Verwenden Sie den Optionsparameter -r, um den Nachrichteninhalt in der Datei zu lesen:

$ tcpdump -nn -r webserver.pcap
Lesen aus der Datei webserver.pcap, Link-Typ LINUX_SLL (Linux gekocht)
13:36:57.679494 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [S], Sequenz 3709732619, Win 29200, Optionen [mss 1460,sackOK,TS val 135708029 ecr 0,nop,wscale 7], Länge 0
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], Sequenz 1999298316, ack 3709732620, Win 28960, Optionen [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], Länge 0
13:36:57.719005 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 1, win 229, Optionen [nop,nop,TS val 135708068 ecr 526052949], Länge 0
13:36:57.719186 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [P.], Seq. 1:113, Ack. 1, Win 229, Optionen [nop,nop,TS val 135708068 ecr 526052949], Länge 112: HTTP: GET / HTTP/1.1
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, Optionen [nop,nop,TS val 526052959 ecr 135708068], Länge 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], Seq 1:643, Ack 113, Win 57, Optionen [nop,nop,TS val 526052959 ecr 135708068], Länge 642: HTTP: HTTP/1.1 302 gefunden
13:36:57.760182 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 643, win 239, Optionen [nop,nop,TS val 135708109 ecr 526052959], Länge 0
13:36:57.977602 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [F.], Sequenz 113, Bestätigung 643, Gewinn 239, Optionen [nop,nop,TS val 135708327 ecr 526052959], Länge 0
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], Seq 643, Ack 114, Win 57, Optionen [nop,nop,TS val 526053025 ecr 135708327], Länge 0
13:36:58.022132 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 644, win 239, Optionen [nop,nop,TS val 135708371 ecr 526053025], Länge 0
$

Administratorrechte (sudo) sind hier nicht erforderlich, da derzeit keine Pakete an der Netzwerkschnittstelle erfasst werden.

Sie können auch eine der besprochenen Filterregeln verwenden, um den Inhalt der Datei zu filtern, genau wie Sie es mit Live-Daten tun würden. Untersuchen Sie beispielsweise die Pakete in der Datei von der Quell-IP-Adresse 54.204.39.132, indem Sie den folgenden Befehl ausführen:

$ tcpdump -nn -r webserver.pcap src 54.204.39.132
Lesen aus der Datei webserver.pcap, Link-Typ LINUX_SLL (Linux gekocht)
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], Sequenz 1999298316, ack 3709732620, Win 28960, Optionen [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], Länge 0
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, Optionen [nop,nop,TS val 526052959 ecr 135708068], Länge 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], Seq 1:643, Ack 113, Win 57, Optionen [nop,nop,TS val 526052959 ecr 135708068], Länge 642: HTTP: HTTP/1.1 302 gefunden
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], Seq 643, Ack 114, Win 57, Optionen [nop,nop,TS val 526053025 ecr 135708327], Länge 0

Wie geht es weiter?

Die oben genannten Grundfunktionen können Ihnen bei der Verwendung des leistungsstarken Paketerfassungstools tcpdump helfen. Weitere Informationen finden Sie auf der Website „tcpdump“ und in der dazugehörigen Hilfedatei.

Das Befehlszeilentool „tcpdump“ bietet leistungsstarke Flexibilität für die Analyse von Netzwerkverkehrspaketen. Wenn Sie zum Erfassen von Paketen ein grafisches Tool verwenden müssen, lesen Sie bitte Wireshark.

Wireshark kann auch zum Lesen von von tcpdump gespeicherten PCAP-Dateien verwendet werden. Mit der Befehlszeile „tcpdump“ können Sie Pakete auf einem Remotecomputer ohne GUI-Schnittstelle erfassen und die Pakete dann in Wireshark analysieren.

über: https://opensource.com/article/18/10/introduction-tcpdump

Zusammenfassen

Oben sind einige Funktionen der Verwendung von tcpdump zum Erfassen von Paketen in der Linux-Befehlszeile, die ich Ihnen vorgestellt habe. Ich hoffe, sie sind hilfreich für Sie. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Herstellen einer Verbindung zum Linux-Befehlszeilencodebeispiel über Python
  • 5 Möglichkeiten zum Senden von E-Mails in der Linux-Befehlszeile (empfohlen)
  • Kurztipps für die Linux-Befehlszeile: So finden Sie eine Datei
  • Zwei Tools zum Teilen des Bildschirms im Linux-Befehlszeilenterminal
  • So verpacken Sie Android-Anwendungen über die Befehlszeile in Linux
  • So ändern Sie die IP-, DNS- und Routing-Befehlszeilenkonfiguration in Linux
  • So kommunizieren Sie mit anderen Benutzern über die Linux-Befehlszeile

<<:  So ändern Sie das Kennwort von MySQL 5.1 und melden sich remote bei der MySQL-Datenbank an

>>:  So beheben Sie das Eingabe-Jitter-Problem beim WeChat-Applet

Artikel empfehlen

Beispiel für eine Routing-Berechtigungsverwaltungsmethode in Vue2/vue3

1. Es gibt im Allgemeinen zwei Methoden zur Steue...

4 Lösungen für CSS-Browserkompatibilitätsprobleme

Frontend ist ein harter Job, nicht nur weil sich ...

So verwenden Sie CocosCreator zum Erstellen eines Schießspiels

Analysieren Sie die Produktionsschritte: 1. Resso...

Zusammenfassung des Wissens zum Vue V-Modell

​v-model ist eine Vue-Direktive, die eine bidirek...

jQuery implementiert verschachtelte Tab-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

So erstellen Sie ein Drag & Drop-Plugin mit benutzerdefinierten Vue-Direktiven

Wir alle kennen die Drag-and-Drop-Funktion von HT...

HTML-Code einer Webseite: Erzeugung von Lauftext

In diesem Abschnitt beschreibt der Autor die spez...

Führen Sie die Schritte zur Installation von FFmpeg auf dem CentOS-Server aus

Vorwort Die Serversystemumgebung ist: CentOS 6.5 ...

Lösung für den Fehler 1045, wenn Navicat eine Verbindung zu MySQL herstellt

Beim Herstellen einer Verbindung mit der lokalen ...

Detaillierte Erklärung des MySQL-Sicherungsprozesses mit Xtrabackup

Inhaltsverzeichnis 01 Hintergrund 02 Einleitung 0...

Beispielcode für CSS-Flex-Layout mit automatischem Zeilenumbruch

Um einen Flex-Container zu erstellen, fügen Sie e...