In Networking Letztes Updateated:
Teilen:
Jira-Software ist das Projektmanagement-Tool Nr. 1, das von agilen Teams zum Planen, Verfolgen, Freigeben und Unterstützen großartiger Software verwendet wird.

tcpdump ist ein erstaunliches Kommandozeilen-Tool für das Netzwerk-Sniffing. Es ist ein Industriestandard für die Erfassung und Analysieren von TCP / IP-Paketen.

Das Tool tcpdump kann beim Auflösen eine große Hilfe sein Vernetzung Probleme. Die Pakete können in einer Datei gespeichert werden und later analysiert. Es ist eine gute Idee, diesen Tool-Anlass durchzuführenally um Ihr Netzwerk im Auge zu behalten.

Wie sieht die tcpdump-Ausgabe aus?

tcpdump ermöglicht Ihnen, die Header der TCP/IP-Pakete zu untersuchen. Für jedes Paket wird eine Zeile gedruckt, und der Befehl wird so lange ausgeführt, bis Sie zum Beenden Strg+C drückenate.

Lassen Sie uns eine Zeile aus einer Beispielausgabe untersuchen:

20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0

Jede Zeile enthält

  • Unix-Zeitstempel (20:58:26.765637)
  • Protokoll (IP)
  • den Quellhostnamen oder die IP und die Portnummer (10.0.0.50.80)
  • Zielhostname oder IP und Portnummer (10.0.0.1.53181)
  • TCP-Flags (Flags [F.]). Flaggenanzeigeate die state der Verbindung. Dies kann mehr als einen Wert umfassen, wie in diesem Beispiel [F.] für FIN-ACK. Dieses Feld kann die folgenden Werte haben:
    • S - SYN. Der erste Schritt beim Herstellen der Verbindung.
    • F - FIN. Verbindungsbeendigung.
    • . - ACK. Bestätigungspaket erfolgreich empfangen.
    • P – DRÜCKEN. Sagt dem Empfänger, es zu tun process Pakete statt buffersie.
    • R - RST. Die Kommunikation wurde gestoppt.
  • Sequenznummer der Daten im Paket. (seq 1)
  •  Bestätigungsnummer (ack 2)
  • Window Größe (win 453). Die Anzahl der im Empfang verfügbaren Bytes buffer. Darauf folgen TCP-Optionen.
  • Länge der Datennutzlast. (length 0)

Installation

Auf Debian-basierten Distributionen kann tcpdump mit dem Befehl APT installiert werden:

# apt install tcpdump -y

Auf RPM-basierten Distributionen kann tcpdump mit YUM installiert werden:

# yum install tcpdump -y

Oder mit DNF wenn RHEL 8

# dnf install tcpdump -y

tcpdump-Befehlsoptionen

Sie müssen root sein, um tcpdump ausführen zu können. Es enthält viele Optionen und Filter. Wenn Sie tcpdump ohne Optionen ausführen, werden alle Pakete erfasst, die über die Standardschnittstelle fließen.

Anzeigen der Liste der auf dem System verfügbaren Netzwerkschnittstellen, auf denen tcpdump Pakete erfassen kann.

# tcpdump -D

Or

# Tcpdump --list-interfaces
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.any (Pseudo-device that captures on all interfaces)
6.lo [Loopback]

Das ist besondersally Nützlich auf Systemen, die keinen Befehl zum Auflisten von Schnittstellen haben.

Verwenden Sie die, um Pakete zu erfassen, die über eine bestimmte Schnittstelle fließen -i Flag mit dem Schnittstellennamen. Ohne das -i Schnittstelle tcpdump wird auswählen bis zur ersten Netzwerkschnittstelle, auf die es stößt. 

# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
01:06:09.278817 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 1, length 64
01:06:09.279374 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 4761, seq 1, length 64
01:06:10.281142 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 2, length 64

Der -v Flag erhöht die Informationen, die Sie über die Pakete sehen, -vv gibt Ihnen noch mehr Details.

Standardmäßig tcpdump resolvewandelt IP-Adressen in Hostnamen um und verwendet außerdem Dienstnamen anstelle von Portnummern. Wenn DNS defekt ist oder Sie nicht möchten, dass tcpdump Namenssuchen durchführt, verwenden Sie die -n

# tcpdump -n
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100

Verwenden Sie die Taste, um nur eine Reihe von Linien zu erfassen, z. B. 5 -c Flagge:

#tcpdump -c 5
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100
5 packets captured

Die Standardausgabe von tcpdump verwendet Unix-Zeitstempel. So erfassen Sie Pakete mit einem vom Menschen lesbaren Zeitstempel:

# tcpdump -tttt
2020-07-06 04:30:12.203638 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186734102:2186734138, ack 204107103, win 37232, length 36
2020-07-06 04:30:12.203910 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
2020-07-06 04:30:12.204292 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 36:72, ack 1, win 37232, length 36
2020-07-06 04:30:12.204524 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
2020-07-06 04:30:12.204658 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 72:108, ack 1, win 37232, length 36

tcpdump-Filterausdrücke

Filterausdrücke wählen aus, welche Paket-Header angezeigt werden. Wenn keine Filter angewendet werden, werden alle Paket-Header angezeigt. Häufig verwendete Filter sind port, host, src, dst, tcp, udp, icmp.

Portfilter

Verwenden Sie den Portfilter, um Pakete anzuzeigen, die an einem bestimmten Port ankommen:

# Tcpdump -i eth1 -c 5 port 80
23:54:24.978612 IP 10.0.0.1.53971 > 10.0.0.50.80: Flags [SEW], seq 53967733, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978650 IP 10.0.0.50.80 > 10.0.0.1.53971: Flags [S.E], seq 996967790, ack 53967734, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0
23:54:24.978699 IP 10.0.0.1.53972 > 10.0.0.50.80: Flags [SEW], seq 226341105, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978711 IP 10.0.0.50.80 > 10.0.0.1.53972: Flags [S.E], seq 1363851389, ack 226341106, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0

Host-Filter

So erfassen Sie alle Pakete, die mit der IP-Adresse 10.0.2.15 am Host ankommen oder von diesem abreisen:

# tcpdump host 10.0.2.15
03:48:06.087509 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 3862934963:3862934999, ack 65355639, win 37232, length 36
03:48:06.087806 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
03:48:06.088087 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 36:72, ack 1, win 37232, length 36
03:48:06.088274 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
03:48:06.088440 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 72:108, ack 1, win 37232, length 36

So erfassen Sie Pakete eines bestimmten Protokolltyps, z. B. icmp, auf der eth1-Schnittstelle:

# tcpdump -i eth1 icmp
04:03:47.408545 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 75, length 64
04:03:47.408999 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 75, length 64
04:03:48.408697 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 76, length 64
04:03:48.409208 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 76, length 64
04:03:49.411287 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 77, length 64

Filterausdrücke kombinieren

Sie können diese Filterausdrücke mit den Operatoren AND, OR und NOT kombinieren. Dadurch können Sie Befehle schreiben, die isoliert werden könnenate Pakete genauer:

Pakete von einer bestimmten IP und für einen bestimmten Port bestimmt:

# tcpdump -n -i eth1 src 10.0.0.1 and dst port 80
00:18:17.155066 IP 10.0.0.1.54222 > 10.0.0.50.80: Flags [F.], seq 500773341, ack 2116767648, win 4117, options [nop,nop,TS val 257786173 ecr 5979014], length 0
00:18:17.155104 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [S], seq 904045691, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 257786173 ecr 0,sackOK,eol], length 0
00:18:17.157337 IP 10.0.0.1.54221 > 10.0.0.50.80: Flags [P.], seq 4282813257:4282813756, ack 1348066220, win 4111, options [nop,nop,TS val 257786174 ecr 5979015], length 499: HTTP: GET / HTTP/1.1
00:18:17.157366 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [.], ack 1306947508, win 4117, options [nop,nop,TS val 257786174 ecr 5983566], length 0

Verwenden Sie den Operator NOT, um alle Pakete außer ICMP zu erfassen:

# tcpdump -i eth1 not icmp

Paket-Header in einer Datei speichern

Da die Ausgabe von tcpdump sehr schnell über den Bildschirm scrollen kann, können Sie Paket-Header in einer Datei mit dem Flag -w speichern. Die Dateien zum Speichern der Ausgabe verwenden das pcap-Format und haben die Erweiterung .pcap.

PCAP steht für Packet Capture. Der folgende Befehl speichert 10 Ausgabezeilen auf der eth1-Schnittstelle in icmp.pcap.

# tcpdump -i eth1 -c 10 -w icmp.pcap
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Sie können diese Datei mit lesen -r Flagge:

tcpdump -r icmp.pcap
reading from file icmp.pcap, link-type EN10MB (Ethernet)
05:33:20.852732 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 33, length 64
05:33:20.853245 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 33, length 64
05:33:21.852586 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 34, length 64
05:33:21.853104 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 34, length 64
05:33:22.852615 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 35, length 64

Paketdetails anzeigen

Bisher haben wir nur die Paket-Header gesehen, um die Verwendung von Paketinhalten anzuzeigen -A Möglichkeit. Dadurch wird der Paketinhalt in ASCII gedruckt, was bei der Fehlerbehebung im Netzwerk hilfreich sein kann. Ebenfalls -X Mit dem Flag kann die Ausgabe im Hex-Format angezeigt werden. Dies ist möglicherweise nicht sehr hilfreich, wenn die Verbindung verschlüsselt ist.

# tcpdump -c10 -i eth1 -n -A port 80
23:35:53.109306 IP 10.0.0.1.53916 > 10.0.0.50.80: Flags [P.], seq 2366590408:2366590907, ack 175457677, win 4111, options [nop,nop,TS val 255253117 ecr 5344866], length 499: HTTP: GET / HTTP/1.1
E..'..@.@.%.
...
..2...P..M.
uE............
.6.}.Q.bGET / HTTP/1.1
Host: 10.0.0.50
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
If-Modified-Since: Tue, 04 Mar 2014 11:46:45 GMT

Schlussfolgerung

tcpdump ist einfach einzurichten und sobald Sie die Ausgabe, die verschiedenen Flags und Filter verstanden haben, können Sie es verwenden resolve Netzwerkprobleme und Sichern Sie Ihr Netzwerk.

Teilen:
  • Vijay Khurana
    Autor
    Vijay arbeitet seit 2000 an Linux und Open-Source-Software. Er teilt sein Linux-Wissen gerne mit der Welt.

Danke an unsere Sponsoren

Weitere großartige Lektüre zum Thema Networking

Treiben Sie Ihr Geschäft an

Einige der Tools und Services, die Ihrem Unternehmen helfen grow.