GNU/Linux >> Znalost Linux >  >> Linux

Linux tcpdump Command Tutorial pro začátečníky (8 příkladů)

Pokaždé, když otevřete webovou stránku na vašem počítači, jsou datové pakety odeslány a přijaty na vašem síťovém rozhraní. Někdy je analýza těchto paketů důležitá z mnoha důvodů. Naštěstí Linux nabízí nástroj příkazového řádku, který vypisuje informace související s těmito datovými pakety na výstup.

V tomto článku probereme základy příslušného nástroje – tcpdump . Ale než to uděláme, stojí za zmínku, že všechny příklady zde byly testovány na počítači Ubuntu 18.04 LTS a na Debianu 10, ale bude fungovat i na jiných distribucích Linuxu, jako je CentOS, Fedora, Gentoo a Arch Linux.

Příkaz tcpdump pro Linux

Příkaz tcpdump v Linuxu umožňuje vypsat provoz v síti. Následuje stručná syntaxe:

tcpdump [OPTIONS]

Zde je podrobná syntaxe:

tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
               [ -c count ]
               [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
               [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
               [ --number ] [ -Q in|out|inout ]
               [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E [email protected] algo:secret,...  ]
               [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
               [ --time-stamp-precision=tstamp_precision ]
               [ --immediate-mode ] [ --version ]
               [ expression ]

A zde je návod, jak to vysvětluje manuálová stránka nástroje:

Tcpdump prints out a description of the contents of packets on a network interface that match the 
boolean expression; the description is preceded by a time stamp, printed, by default, as hours,
minutes, seconds, and fractions of a second  since  midnight.  

It can  also  be  run with the -w flag, which causes it to save the packet data to a file for
later analysis, and/or with the -r flag, which causes it to read from a saved packet file rather
than to read packets from a network interface.  It can also be run with the -V  flag,  which causes
it to read a list of saved packet files.

In all cases, only packets that match expression will be processed by tcpdump.

Následuje několik příkladů ve stylu otázek a odpovědí, které by vám měly poskytnout lepší představu o tom, jak příkaz tcpdump funguje.

Q1. Jak používat tcpdump?

Před použitím tcpdump k čichání datových paketů byste měli ideálně vědět, na kterém síťovém rozhraní chcete, aby nástroj fungoval. Pro seznam síťových rozhraní dostupných v systému použijte volbu -D příkazového řádku s tcpdump.

tcpdump -D

Manuál vysvětluje tuto možnost takto:

Print the list of the network interfaces available on the system and on which tcpdump can capture 
packets. For each network interface, a number and an interface name, possibly followed by a text
description of the interface, is printed. The interface name or the number can be supplied to the
-i flag to specify an interface on which to capture.

This can be useful on systems that don't have a command to list them (e.g., Windows systems, or
UNIX systems lacking  ifconfig -a); the number can be useful on Windows 2000 and later systems,
where the interface name is a somewhat complex string.

The  -D  flag  will not be supported if tcpdump was built with an older version of libpcap that
lacks the pcap_findalldevs() function.

Například v mém případě byl vytvořen následující výstup:

1.wlx18a6f713679b [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.enp3s0 [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)
9.usbmon3 (USB bus number 3)
10.usbmon4 (USB bus number 4)

Nyní, když máte seznam rozhraní, můžete si jedno vybrat a předat jeho název jako vstup do volby -i příkazového řádku tcpdump. Například:

tcpdump -i wlx18a6f713679b

Následuje část výstupu vytvořeného tímto příkazem v mém případě:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlx18a6f713679b, link-type EN10MB (Ethernet), capture size 262144 bytes
11:53:11.408964 IP 192.168.2.132.52898 > 239.255.255.250.3702: UDP, length 656
11:53:11.409492 IP himanshu.57383 > one.one.one.one.domain: 8572+ [1au] PTR? 250.255.255.239.in-addr.arpa. (57)
11:53:11.409588 IP 192.168.2.140.49690 > 239.255.255.250.1900: UDP, length 174
11:53:11.409954 IP 192.168.2.147.mdns > 224.0.0.251.mdns: 1 [2q] PTR (QU)? _%9E5E7C8F47989526C9BCD95D24084F6F0B27C5ED._sub._googlecast._tcp.local. PTR (QU)? _googlecast._tcp.local. (94)
11:53:11.499220 IP one.one.one.one.domain > himanshu.57383: 8572 NXDomain 0/1/1 (114)
11:53:11.499950 IP himanshu.34201 > one.one.one.one.domain: 12068+ [1au] PTR? 132.2.168.192.in-addr.arpa. (55)
11:53:11.591291 IP one.one.one.one.domain > himanshu.34201: 12068 NXDomain* 0/1/2 (278)
11:53:11.592195 IP himanshu.55501 > one.one.one.one.domain: 31630+ [1au] PTR? 1.1.1.1.in-addr.arpa. (49)
11:53:11.842603 IP himanshu.57253 > one.one.one.one.domain: 16905+ [1au] PTR? 140.2.168.192.in-addr.arpa. (55)
11:53:11.951226 IP himanshu.52662 > one.one.one.one.domain: 52377+ [1au] PTR? 251.0.0.224.in-addr.arpa. (53)
11:53:12.428931 IP 192.168.2.140.49690 > 239.255.255.250.1900: UDP, length 174
11:53:12.437905 IP 192.168.2.147.mdns > 224.0.0.251.mdns: 2 [2q] PTR (QM)? _%9E5E7C8F47989526C9BCD95D24084F6F0B27C5ED._sub._googlecast._tcp.local. PTR (QM)? _googlecast._tcp.local. (94)
11:53:12.438730 IP6 fe80::eccc:59f2:fc78:9e07.52899 > ff02::c.3702: UDP, length 656
11:53:12.439017 IP himanshu.33194 > one.one.one.one.domain: 15679+ [1au] PTR? c.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.f.f.ip6.arpa. (101)
11:53:12.572386 IP one.one.one.one.domain > himanshu.33194: 15679 NXDomain 0/1/1 (165)
11:53:12.642129 IP 192.168.2.11.mdns > 224.0.0.251.mdns: 0*- [0q] 1/0/3 PTR Google-Home-Mini-e3a3ae72a03e3d1c60d24653d4666ca6._googlecast._tcp.local. (356)
...
...

Q2. Jak provést ukončení tcpdump po přijetí nastaveného počtu paketů?

Toho lze dosáhnout pomocí volby příkazového řádku -c. Pokud například chcete, aby tcpdump zobrazoval pouze informace související s 10 pakety, můžete to udělat následujícím způsobem:

tcpdump -c 10

Například v mém případě jsem provedl následující příkaz:

tcpdump -c 10 -i wlx18a6f713679b

Následuje výstup, který byl vytvořen:

Můžete tedy vidět, že bylo zachyceno 10 paketů.

Q3. Jak zajistit, aby tcpdump zobrazoval ve výstupu záhlaví na úrovni odkazu?

To lze provést pomocí volby příkazového řádku -e. Například:

tcpdump -e -i wlx18a6f713679b

A zde je vytvořený výstup:

listening on wlx18a6f713679b, link-type EN10MB (Ethernet), capture size 262144 bytes
12:14:07.951396 3c:a8:2a:a7:7b:c1 (oui Unknown) > Broadcast, ethertype IPv4 (0x0800), length 197: 192.168.2.55.17500 > 255.255.255.255.17500: UDP, length 155
12:14:07.952111 3c:a8:2a:a7:7b:c1 (oui Unknown) > Broadcast, ethertype IPv4 (0x0800), length 197: 192.168.2.55.17500 > 192.168.2.255.17500: UDP, length 155
...
...

Takže můžete vidět, že ve výstupu byla vytvořena záhlaví na úrovni odkazů.

4. Jak zajistit, aby tcpdump zobrazoval cizí IP adresy číselně?

Toho lze dosáhnout pomocí volby -f příkazového řádku.

tcpdump -f -i [INTERFACE]

To, že tcpdump zobrazuje „cizí“ adresy IPv4 spíše číselně než symbolicky, má v určitých situacích své výhody. Jeden takový příklad je zmíněn na manuálové stránce nástroje:

this option is intended to get around serious brain damage in Sun's NIS server — usually it hangs 
forever translating non-local internet numbers

O5. Jak zajistit, aby tcpdump produkoval na výstupu čísla paketů?

Chcete-li, aby tcpdump produkoval na výstupu čísla paketů, použijte --number možnost příkazového řádku.

Například jsem provedl následující příkaz:

tcpdump --number -i wlx18a6f713679b

A zde je část výstupu, který byl vytvořen:

listening on wlx18a6f713679b, link-type EN10MB (Ethernet), capture size 262144 bytes
    1  12:38:35.522944 ARP, Request who-has 192.168.2.196 tell _gateway, length 46
    2  12:38:35.523265 IP6 fe80::8ab4:a6ff:fe9d:a6bb > ff02::16: HBH ICMP6, multicast listener report v2, 1 group record(s), length 28
    3  12:38:35.523578 IP6 fe80::8ab4:a6ff:fe9d:a6bb > ip6-allrouters: ICMP6, router solicitation, length 16
    4  12:38:35.523861 ARP, Request who-has 192.168.2.15 tell 192.168.2.170, length 28
...
...
...

Nyní tedy můžete vidět, že každý řádek začíná číslem.

O6. Jak zajistit, aby tcpdump tiskl kratší výstup?

To lze provést pomocí volby příkazového řádku -q. Zde je návod, jak to vysvětluje manuálová stránka nástroje:

Quick (quiet?) output.  Print less protocol information so output lines are shorter.

Následuje příklad této možnosti:

Můžete tedy vidět, že na výstupu bylo tentokrát vyprodukováno méně informací.

O7. Jak vynechat informace o časovém razítku z výstupu tcpdump?

K tomu použijte volbu -t příkazového řádku. Zde je příklad příkazu:

tcpdump -t -i wlx18a6f713679b

A následuje jeho výstup:

listening on wlx18a6f713679b, link-type EN10MB (Ethernet), capture size 262144 bytes
IP himanshu.56992 > mails11.telegram.org.https: Flags [.], ack 3090054317, win 965, options [nop,nop,TS val 226976758 ecr 3781653930], length 0
IP himanshu.41122 > one.one.one.one.domain: 12755+ [1au] PTR? 22.171.154.149.in-addr.arpa. (56)
IP mails11.telegram.org.https > himanshu.56824: Flags [.], ack 273652159, win 1001, options [nop,nop,TS val 3781656472 ecr 226966324], length 0
ARP, Request who-has 192.168.2.48 tell _gateway, length 46
ARP, Request who-has 192.168.2.135 tell _gateway, length 46
...
...

Takže můžete vidět, že informace o časovém razítku (které jsou obvykle na začátku každého řádku) nejsou nyní ve výstupu přítomny.

O8. Jak zajistit, aby tcpdump produkoval podrobný výstup?

V tomto případě můžete použít volbu -v příkazového řádku. Manuálová stránka nástroje vysvětluje tuto možnost následovně:

tcpdump -v -i [INTERFACE]
When parsing and printing, produce (slightly more) verbose output. For example, the time to live,
identification, total length and options in an IP packet are printed. Also enables additional
packet integrity checks such as verifying the IP and ICMP header checksum.

When writing to a file with the -w option, report, every 10 seconds, the number of packets captured

Závěr

Právě jsme zde poškrábali povrch, protože příkaz tcpdump nabízí mnoho možností příkazového řádku. Jakmile si je procvičíte, můžete přejít na manuálovou stránku nástroje, kde se o něm dozvíte více.


Linux
  1. Linux cd command tutorial pro začátečníky (8 příkladů)

  2. Linux Date Command Tutorial pro začátečníky (8 příkladů)

  3. Linux hostname Command Tutorial pro začátečníky (5 příkladů)

  1. Výuka příkazů Linux pro začátečníky (5 příkladů)

  2. Linux df Command Tutorial pro začátečníky (8 příkladů)

  3. Linux du Command Tutorial pro začátečníky (10 příkladů)

  1. Výukový program Linux echo Command pro začátečníky (5 příkladů)

  2. Linux env Command Tutorial pro začátečníky (5 příkladů)

  3. Návod k příkazu velikosti Linuxu pro začátečníky (6 příkladů)