GNU/Linux >> Linux の 問題 >  >> Linux

初心者向けのLinuxtcpdumpコマンドチュートリアル(8例)

コンピューターでWebページを開くたびに、データパケットがネットワークインターフェイスで送受信されます。これらのパケットの分析は、多くの理由で重要になる場合があります。ありがたいことに、Linuxは、これらのデータパケットに関連する情報を出力にダンプするコマンドラインユーティリティを提供しています。

この記事では、問題のツールの基本について説明します- tcpdump 。ただし、その前に、ここでのすべての例はUbuntu 18.04LTSマシンとDebian10でテストされていますが、CentOS、Fedora、Gentoo、ArchLinuxなどの他のLinuxディストリビューションでも機能します。

>

Linuxtcpdumpコマンド

Linuxのtcpdumpコマンドを使用すると、ネットワーク上のトラフィックをダンプできます。簡単に言うと、その構文は次のとおりです。

tcpdump [OPTIONS]

詳細な構文は次のとおりです。

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 ]

そして、ツールのマニュアルページで説明されているのは次のとおりです。

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.

以下は、tcpdumpコマンドがどのように機能するかについてのより良いアイデアを提供するQ&Aスタイルの例です。

Q1。 tcpdumpの使用方法は?

tcpdumpを使用してデータパケットをスニッフィングする前に、理想的には、ツールで動作させるネットワークインターフェイスを知っておく必要があります。システムで使用可能なネットワークインターフェイスのリストについては、tcpdumpで-Dコマンドラインオプションを使用してください。

tcpdump -D

マニュアルページでこのオプションを説明する方法は次のとおりです。

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.

たとえば、私の場合、次の出力が生成されました。

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)

インターフェイスのリストができたので、1つを選択し、その名前をtcpdumpの-iコマンドラインオプションへの入力として渡すことができます。例:

tcpdump -i wlx18a6f713679b

以下は、私の場合、このコマンドによって生成される出力の一部です。

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。設定された数のパケットを受信した後にtcpdumpを終了させる方法は?

これは、-cコマンドラインオプションを使用して実現できます。たとえば、tcpdumpで10パケットに関連する情報のみを表示する場合は、次の方法で行うことができます。

tcpdump -c 10

たとえば、私の場合、次のコマンドを実行しました:

tcpdump -c 10 -i wlx18a6f713679b

生成された出力は次のとおりです。

つまり、10個のパケットがキャプチャされたことがわかります。

Q3。 tcpdumpでリンクレベルのヘッダーを出力に表示するにはどうすればよいですか?

これは、-eコマンドラインオプションを使用して実行できます。例:

tcpdump -e -i wlx18a6f713679b

そして、生成される出力は次のとおりです。

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
...
...

したがって、リンクレベルのヘッダーが出力で生成されたことがわかります。

Q4。 tcpdumpに外部IPアドレスを数値で表示させる方法は?

これは、-fコマンドラインオプションを使用して実現できます。

tcpdump -f -i [INTERFACE]

tcpdumpに「外部」IPv4アドレスをシンボリックではなく数値で表示させることには、特定の状況での利点があります。そのような例の1つは、ツールのマニュアルページに記載されています:

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

Q5。 tcpdumpに出力でパケット番号を生成させる方法は?

tcpdumpで出力にパケット番号を生成するには、-numberを使用します コマンドラインオプション。

たとえば、次のコマンドを実行しました:

tcpdump --number -i wlx18a6f713679b

そして、生成された出力の一部は次のとおりです。

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
...
...
...

したがって、各行が数字で始まることがわかります。

Q6。 tcpdumpの出力を短くするにはどうすればよいですか?

これは、-qコマンドラインオプションを使用して実行できます。ツールのマニュアルページで説明されている方法は次のとおりです。

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

このオプションの例を次に示します。

そのため、今回の出力で生成された情報が少なくなっていることがわかります。

Q7。 tcpdump出力からタイムスタンプ情報を省略する方法は?

これには、-tコマンドラインオプションを使用します。コマンドの例を次に示します。

tcpdump -t -i wlx18a6f713679b

そして、その出力は次のとおりです。

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
...
...

したがって、タイムスタンプ情報(通常は各行の先頭にあります)が出力に表示されていないことがわかります。

Q8。 tcpdumpに詳細な出力を生成させる方法は?

この場合、-vコマンドラインオプションを使用できます。以下は、ツールのマニュアルページでこのオプションを説明する方法です。

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
結論

tcpdumpコマンドは多くのコマンドラインオプションを提供するため、ここで表面をかじったところです。これらの練習が終わったら、ツールのマニュアルページにアクセスして詳細を確認できます。


Linux
  1. 初心者向けのLinuxcdコマンドチュートリアル(8例)

  2. 初心者向けのLinux日付コマンドチュートリアル(8例)

  3. 初心者向けのLinuxホスト名コマンドチュートリアル(5つの例)

  1. 初心者向けのLinux通信コマンドチュートリアル(5例)

  2. 初心者向けのLinuxdfコマンドチュートリアル(8例)

  3. 初心者向けのLinuxduコマンドチュートリアル(10例)

  1. 初心者向けのLinuxechoコマンドチュートリアル(5つの例)

  2. 初心者向けのLinuxenvコマンドチュートリアル(5つの例)

  3. 初心者向けのLinuxサイズのコマンドチュートリアル(6つの例)