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

Tcpdump-Beispiele - Erfassen Sie den Netzwerkverkehr in Linux

Tcpdump ist ein Befehl zur Netzwerkfehlerbehebung, der auch als Paket-Sniffer bekannt ist und zum Erfassen und Anzeigen von Paketen aus einem Netzwerk verwendet wird. Mit Tcpdump können Benutzer TCP/IP- und andere Pakete (UDP, ARP oder ICMP) erfassen und anzeigen, die über das Netzwerk gesendet oder empfangen werden, an das der Computer angeschlossen ist.

Sie können Filter auf die Pakete anwenden und den Datenverkehr vermeiden, den Sie nicht sehen möchten. Sie können alle Daten erfassen, die über Ihr lokales Netzwerk übertragen werden, und diese Daten zur späteren Analyse in einer Datei ablegen. Um den Befehl tcpdump auszuführen, benötigen Sie root oder einen Benutzer mit sudo-Berechtigungen.

In diesem Tutorial lernen wir, wie man tcpdump-Befehle verwendet, um den Datenverkehr auf einem Linux-Rechner zu analysieren.

1. Datenverkehr auf der Schnittstelle erfassen

Wenn Sie tcpdump ohne Optionen verwenden, analysiert es den Datenverkehr auf allen Schnittstellen, führen Sie den folgenden Befehl aus:

$ sudo tcpdump

Sie müssen die Taste Strg + C drücken, um es zu stoppen.

Um den Datenverkehr auf einer bestimmten Schnittstelle zu erfassen, verwenden Sie -i Option und begrenzen Sie die Anzahl der Pakete mit -c Möglichkeit:

Das folgende tcpdump-Beispiel analysiert die Schnittstelle „ens160“ und begrenzt das Paket auf 5:

$ sudo tcpdump -i ens160 -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
22:37:57.488830 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 904499689:904499877, ack 2322684183, win 501, options [nop,nop,TS val 215651573 ecr 764510174], length 188
22:37:57.489727 IP Ubuntu.33256 > dns.google.domain: 5774+ [1au] PTR? 219.62.249.14.in-addr.arpa. (55)
22:37:57.496238 IP static.vnpt.vn.50302 > Ubuntu.ssh: Flags [.], ack 188, win 2045, options [nop,nop,TS val 764510247 ecr 215651573], length 0
22:37:57.546212 ARP, Request who-has 42.112.22.189 tell 42.112.22.254, length 46
22:37:57.549223 ARP, Request who-has 42.112.22.162 tell 42.112.22.254, length 46
5 packets captured

2) Datenverkehr auf einem bestimmten Host erfassen

Sie können eingehende und ausgehende Pakete von einem bestimmten Host mit -host erfassen Option.

$ sudo tcpdump -i ens160 -c 5 -ttttnnvvS host 14.249.62.219

Jetzt können Sie sowohl Anforderungs- als auch Antwortpakete sehen:

tcpdump: listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
2020-06-22 06:07:36.407733 IP (tos 0x12,ECT(0), ttl 64, id 60196, offset 0, flags [DF], proto TCP (6), length 176)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x60a7 (incorrect -> 0x8547), seq 296088568:296088692, ack 3491435441, win 501, options [nop,nop,TS val 242630491 ecr 673952638], length 124
2020-06-22 06:07:36.407905 IP (tos 0x12,ECT(0), ttl 64, id 60197, offset 0, flags [DF], proto TCP (6), length 208)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x60c7 (incorrect -> 0xeed4), seq 296088692:296088848, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 156
2020-06-22 06:07:36.407967 IP (tos 0x12,ECT(0), ttl 64, id 60198, offset 0, flags [DF], proto TCP (6), length 288)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x6117 (incorrect -> 0x82ca), seq 296088848:296089084, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 236
2020-06-22 06:07:36.408018 IP (tos 0x12,ECT(0), ttl 64, id 60199, offset 0, flags [DF], proto TCP (6), length 408)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x618f (incorrect -> 0xebc8), seq 296089084:296089440, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 356
2020-06-22 06:07:36.408049 IP (tos 0x12,ECT(0), ttl 64, id 60200, offset 0, flags [DF], proto TCP (6), length 208)
    100.9.8.40.22 > 14.249.62.219.49396: Flags [P.], cksum 0x60c7 (incorrect -> 0x3db7), seq 296089440:296089596, ack 3491435441, win 501, options [nop,nop,TS val 242630492 ecr 673952638], length 156

3) Paket nach Port suchen

Um Pakete an eine bestimmte Portnummer zu finden, verwenden Sie -port Option.

Angenommen, Sie möchten die Netzwerkschnittstelle „ens160“ analysieren und die Anzahl der Pakete von Port 22 auf 5 begrenzen, führen Sie den folgenden Befehl aus:

$ sudo tcpdump -i ens160 -c 5 -nn port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
22:55:11.567754 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 904502461:904502649, ack 2322684399, win 501, options [nop,nop,TS val 216685651 ecr 765506106], length 188
22:55:11.567973 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 188:408, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 220
22:55:11.568102 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 408:604, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 196
22:55:11.568184 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 604:800, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 196
22:55:11.568262 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 800:996, ack 1, win 501, options [nop,nop,TS val 216685652 ecr 765506106], length 196

Um einen Port zu ignorieren, wenn Sie Pakete abfangen, verwenden Sie not port .

Wenn Sie einen anderen Port der Netzwerkschnittstelle „ens160“ als 22 analysieren möchten, führen Sie den folgenden Befehl aus:

$ sudo tcpdump -i ens160 -nn not port 22

Sie können eine Reihe von Ports verwenden, um Ihren Netzwerkverkehr zu erfassen.

Wenn Sie beispielsweise die Netzwerkschnittstelle ens160 im Portbereich analysieren möchten:von Port 20 bis Port 23, führen Sie den folgenden Befehl aus:

$ sudo tcpdump -i ens160 -c 3 -nns 0 portrange 20-23

4) Erfassen Sie Pakete von einem bestimmten Protokoll

Sie können entscheiden, ob nur ICMP- (Internet Control Message Protocol) oder TCP-Pakete (Transmission Control Protocol) erfasst werden sollen. Der folgende Befehl erfasst nur TCP-Pakete:

$ sudo tcpdump -i ens160 -c 5 -nn tcp
Output
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
23:13:04.283421 IP 10.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 904505569:904505677, ack 2322684631, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 108
23:13:04.283512 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 108:144, ack 1, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 36
23:13:04.283588 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 144:260, ack 1, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 116
23:13:04.283642 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 260:296, ack 1, win 501, options [nop,nop,TS val 217758367 ecr 766570531], length 36
23:13:04.283863 IP 100.9.8.40.22 > 14.249.62.219.50302: Flags [P.], seq 296:508, ack 1, win 501, options [nop,nop,TS val 217758368 ecr 766570531], length 212

5) Protokoll in einer bestimmten Datei speichern

Es ist möglich, die erfassten Pakete in einer Datei zu speichern. Standardmäßig werden beim Erfassen von Paketen in einer Datei nur 68 Bytes der Daten von jedem Paket gespeichert. Die restlichen Informationen werden ignoriert.

Sie können -s verwenden Option, um tcpdump linux mitzuteilen, wie viele Bytes für jedes Paket gespeichert werden sollen, und spezifizieren Sie 0 Da die Snapshot-Länge des Pakets tcpdump mitteilt, das gesamte Paket zu speichern, verwenden Sie den folgenden Befehl:

$ sudo tcpdump -i ens160 -c 5 -nn tcp -w packets-record.pcap -s 0

Output
tcpdump: listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes
5 packets captured

6) TCPdump-Aufzeichnungsdatei lesen

Sie können den Inhalt einer Datei, die tcpdump-Pakete speichert, nicht mit den üblichen Befehlen wie „cat“ oder „less“ lesen, aber Sie müssen den -r verwenden Parameter des tcpdump-Befehls:

$ sudo tcpdump -r packets-record.pcap 

Jetzt können Sie den Inhalt der tcpdump-Aufzeichnungsdatei lesen:

reading from file packets-record.pcap, link-type EN10MB (Ethernet)
23:18:57.823581 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 904507573:904507617, ack 2322684767, win 501, options [nop,nop,TS val 218111907 ecr 766921765], length 44
23:18:57.823697 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 44:160, ack 1, win 501, options [nop,nop,TS val 218111907 ecr 766921765], length 116
23:18:57.823778 IP Ubuntu.ssh > static.vnpt.vn.50302: Flags [P.], seq 160:196, ack 1, win 501, options [nop,nop,TS val 218111907 ecr 766921765], length 36
23:18:57.832656 IP static.vnpt.vn.50302 > Ubuntu.ssh: Flags [.], ack 44, win 2047, options [nop,nop,TS val 766921826 ecr 218111907], length 0
23:18:57.832685 IP static.vnpt.vn.50302 > Ubuntu.ssh: Flags [.], ack 160, win 2045, options [nop,nop,TS val 766921826 ecr 218111907], length 0

Sie können diese pcap-Datei auch zum Anzeigen mit Wireshark zur Analyse verwenden.

7) Pakete aus bestimmten Quellen filtern

Um Pakete zu filtern, die von einer bestimmten Quell-IP kommen, können Sie src verwenden Option.

$ sudo tcpdump src 100.9.8.40

Genauso, wenn Sie den Verkehr in eine andere Richtung sehen möchten, verwenden Sie dst Möglichkeit:

$ sudo tcpdump dst 14.249.62.219

8) Pakete nach Netzwerk erfassen

Um eingehende und ausgehende Daten aus einem Netzwerk zu erfassen, verwenden Sie -net Möglichkeit. Der folgende Befehl erfasst den Datenverkehr vom Netzwerk 192.168.0.0/24:

$ sudu tcpdump net 192.169.0.0/24

9) Pakete in ASCII erfassen

Um erfasste Pakete in ASCII anzuzeigen, verwenden Sie -A Option, die beim Erfassen von Webseiten praktisch ist.

$ sudo tcpdump -A -i eth0

Tcpdump kann auch Paketinhalte im Hex- und ASCII-Format anzeigen und dann -X verwenden Möglichkeit:

$ sudo tcpdump -X -i eth0

10) IPv6-Pakete erfassen

Wir können IPv6-Verkehr mit ip6 erfassen Option und proto zur Angabe des TCP- oder UDP-Protokolls.

proto 6 - TCP

proto 17 - UDP

Die folgenden erfassen den gesamten IPv6-Verkehr mithilfe des TCP-Protokolls:

$ sudo tcpdump -nn ip6 proto 6

11) Http User Agent filtern

Der folgende Befehl filtert den HTTP-Benutzeragenten und -Host aus dem HTTP-Anforderungsheader:

$ sudo tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

Um Cookies zu erfassen, verwenden Sie den folgenden Befehl:

$ sudo tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'

12) Verfügbare Schnittstellen auflisten

Sie können tcpdump verwenden, um die verfügbare Schnittstelle mit dem -D aufzulisten Option.

Zum Beispiel:

$ sudo tcpdump -D
Output
1.ens160 [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.docker0 [Up]
5.nflog (Linux netfilter log (NFLOG) interface)
6.nfqueue (Linux netfilter queue (NFQUEUE) interface)
7.usbmon1 (USB bus number 1)
8.usbmon2 (USB bus number 2)

13) Capture-Dateien drehen

Wenn Sie Datenverkehr über einen längeren Zeitraum mit tcpdump erfassen, ist es gut, eine neue Datei zu erstellen, wenn eine bestimmte Dateigröße oder Zeit erreicht ist.

Der folgende Befehl erstellt alle 30 Minuten eine neue Datei „network-02-30.pcap“ (-G 1800), wobei die Datei auf 100 MB begrenzt ist (-C 100) und die Dateianzahl 24 beträgt (-W 48).

$ sudo tcpdump -i ens160 -w /tmp/network-%H-%M.pcap -W 48 -G 300 -C 100

Tcpdump-Optionen

Tcpdump bietet mehrere Optionen, die seine Ausgabe verbessern oder modifizieren, prüfen Sie, welche das sind:

  • -i <interface> :Auf der angegebenen Schnittstelle lauschen.
  • -n :Hostnamen nicht auflösen. Sie können -nn verwenden Hostnamen oder Portnamen nicht aufzulösen.
  • -t :Drucken Sie einen für Menschen lesbaren Zeitstempel auf jeder Dump-Zeile, -tttt :Geben Sie maximal menschenlesbare Zeitstempelausgabe.
  • -X :Zeigt den Inhalt des Pakets in Hex und ASCII an.
  • -v , -vv , -vvv :Erhöhen Sie die Menge an Paketinformationen, die Sie zurückerhalten.
  • -c N :Nur N Pakete erhalten und dann stoppen.
  • -s :Definieren Sie die Fanglänge (Größe) der Aufnahme in Byte. Verwenden Sie -s0 um alles zu erhalten, es sei denn, Sie erfassen absichtlich weniger.
  • -S :Absolute Sequenznummern drucken.
  • -q :Weniger Protokollinformationen anzeigen.
  • -w <file name> :Schreiben Sie lieber die Rohpakete in eine Datei

Power of and, or and not operator

Der Tcpdump-Befehl unterstützt die Kombination der Operatoren „und“, „oder“ und „nicht“, um genauere Ergebnisse herauszufiltern.

Erfassen Sie Datenverkehr, der von 10.20.0.0/16 kommt und in das Netzwerk 10.30.0.0/16 geht, mit menschenlesbaren Zeitstempeln (tt), ohne Auflösung von Hostnamen oder Portnummern (nn), ausführlicher Ausgabe (vv) und unter Verwendung einer absoluten Sequenz Nummern (S):

$ sudo  -ttnnvvS tcpdump src net 10.20.0.0/16 and dst net 10.30.0.0/16

Datenverkehr von Quelle 192.168.0.10 anzeigen, die kein UDP-Protokoll ist:

$ sudo tcpdump src 192.168.0.10 and src net and not udp

So erfassen Sie Arp- oder Ping-Verkehr für einen bestimmten Host und speichern die Ausgabe in einer Datei namens packetfile.txt:

$ sudo tcpdump -nnti eth0 arp or icmp and host 192.168.0.1 -w packetfile.txt

Tcpdump-Ausgabeformat

Nehmen wir eine neue Zeile aus der tcpdump-Ausgabe, um ihr Format zu verstehen.

10:31:13.440803 IP Ubuntu.ssh > 117.6.129.86.50736: Flags [P.], seq 188:400, ack 1, win 501, options [nop,nop,TS val 468736347 ecr 335665367], length 212

Wo:

10:31:13.401128 - Zeitpunkt, zu dem das Paket in Ortszeit erfasst wurde.

IP - Es wurde angezeigt, dass das Paketprotokoll IPV4 ist.

Ubuntu.ssh - Dies zeigt die Quell-IP-Adresse oder den Quell-Hostnamen an und .ssh bedeutet Port (hier ist es 22).

117.6.129.86.50376 - Dies gibt die Ziel-IP-Adresse und einen Punkt (.) getrennt durch die Portnummer an.

Flaggen:

[P.] - Dies ist das TCP-Flags-Feld.

[.] - ACK (Bestätigung).

[S] - SYN (Verbindung starten).

[P] - PSH (Push-Daten).

[F] - FIN (Verbindung beenden).

[R] - RST (Verbindung zurücksetzen).

[P.] - SYN-ACK (SynAcK-Paket).

seq 188:400 - Die Sequenznummer gibt an, dass das Paket die Bytes '188' bis '400' an Daten enthält.

win 501 - Dieses Feld ist die Fenstergröße, die die Anzahl der im Empfangspuffer verfügbaren Bytes darstellt.

options [nop,nop,TS val 468736347 ecr 335665367] - Dies sind TCP-Optionen wie MSS (Maximum Segment Size) oder Window Scale. Weitere Informationen zu TCP-Protokolloptionen finden Sie hier.

length 212 - Dies stellt die Länge der Nutzdaten in Bytes dar.

Schlussfolgerung

Obwohl Packet Sniffer nützliche Diagnosewerkzeuge sind, können sie auch missbraucht werden. Zum Beispiel können skrupellose Personen Packet-Sniffer ausführen, um Passwörter abzufangen, die andere über das Netzwerk senden. Abhängig von Ihrer Netzwerkkonfiguration kann dieser Trick auch dann funktionieren, wenn der Paket-Sniffer weder auf dem sendenden noch auf dem empfangenden Computer ausgeführt wird.

Aus diesem Grund haben viele Organisationen Richtlinien, die die Verwendung von Paketschnüfflern verbieten, außer unter bestimmten Umständen.

Ich hoffe, Sie hatten Spaß beim Lesen der tcpdump-Befehle und hinterlassen Sie bitte Ihren Vorschlag im Kommentarbereich unten.


Linux
  1. 6 tcpdump-Filteroptionen für den Netzwerkverkehr

  2. Linux – Wie leitet man Datenverkehr zwischen Linux-Netzwerk-Namespaces weiter?

  3. 7 Beispiele für Linux-df-Befehle

  4. 8 Linux TR-Befehlsbeispiele

  5. Linux-Betriebssystemdienst „Netzwerk“

Network Manager unter Linux mit Beispielen

10 Beispiele für Linux ss-Befehle zur Überwachung von Netzwerkverbindungen

Linux ifconfig-Befehlsbeispiele

Nützliche tcpdump-Linux-Beispiele für den Netzwerkadministrator

10 Beispiele für Linux-brctl-Befehle für die Ethernet-Netzwerkbrücke

id-Befehlsbeispiele in Linux