tcpdumpコマンドを使って、ネットワークの中身をみる方法です。tcpdumpコマンドでキャプチャをしてwiresharkで解析を行なうというのが一般的です。
環境
$ cat /etc/almalinux-release
AlmaLinux release 9.7 (Moss Jungle Cat)
$ uname -r
5.14.0-611.5.1.el9_7.x86_64
インストール
tcpdumpがインストールされていない場合は、インストールを行ないます。
$ sudo which tcpdump
which: no tcpdump in (/sbin:/bin:/usr/sbin:/usr/bin)
$ sudo dnf install tcpdump
:
Installed:
libibverbs-57.0-2.el9.x86_64 libpcap-14:1.10.0-4.el9.x86_64
tcpdump-14:4.99.0-9.el9.x86_64
Complete!
基本的な使い方
$ ip -o address show up scope global | awk '{$1=$1}1' ・・・ インターフェース名を確認
2: enp0s3 inet 192.168.11.111/24 brd 192.168.11.255 scope global noprefixroute enp0s3\ valid_lft forever preferred_lft forever
$ sudo tcpdump -i enp0s3 -nn icmp ・・・ icmp(ping)でフィルタ
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), snapshot length 262144 bytes
08:23:05.849208 IP 192.168.11.99 > 192.168.11.111: ICMP echo request, id 1, seq 51, length 40
08:23:05.849259 IP 192.168.11.111 > 192.168.11.99: ICMP echo reply, id 1, seq 51, length 40
08:23:06.857779 IP 192.168.11.99 > 192.168.11.111: ICMP echo request, id 1, seq 52, length 40
08:23:06.857831 IP 192.168.11.111 > 192.168.11.99: ICMP echo reply, id 1, seq 52, length 40
08:23:07.862737 IP 192.168.11.99 > 192.168.11.111: ICMP echo request, id 1, seq 53, length 40
08:23:07.862791 IP 192.168.11.111 > 192.168.11.99: ICMP echo reply, id 1, seq 53, length 40
08:23:08.868819 IP 192.168.11.99 > 192.168.11.111: ICMP echo request, id 1, seq 54, length 40
08:23:08.868872 IP 192.168.11.111 > 192.168.11.99: ICMP echo reply, id 1, seq 54, length 40
^C ・・・ [Ctrl]+[c]で止める
8 packets captured
9 packets received by filter
0 packets dropped by kernel
解析するときによく使うコマンドライン
$ : インターフェース enp0s3 のパケットを、ホスト名やサービス名に変換せず表示する
$ sudo tcpdump -i enp0s3 -nn
$ : すべてのネットワークインターフェース (any) のパケットを、ホスト名やサービス名に変換せず表示する
$ sudo tcpdump -i any -nn
$ : インターフェース enp0s3 のパケットを、ホスト名やサービス名に変換せず数値のままファイル packet.pcap に保存する
$ sudo tcpdump -i enp0s3 -nn -w packet.pcap
$ : インターフェース enp0s3 のポート 80(HTTP)のパケットを、ホスト名やサービス名に変換せず表示する
$ sudo tcpdump -i enp0s3 -nn port 80
$ : インターフェース enp0s3 の TCP ポート 443(HTTPS)のパケットを、ホスト名やサービス名に変換せず表示する
$ sudo tcpdump -i enp0s3 -nn tcp port 443
$ : インターフェース enp0s3 の UDP ポート 53(DNS)のパケットを、ホスト名やサービス名に変換せず表示する
$ sudo tcpdump -i enp0s3 -nn udp port 53
$ : インターフェース enp0s3 の送信元IP(192.168.11.111)から宛先ポート(443)へのTCPパケットを、ホスト名やサービス名に変換せず表示する
$ sudo tcpdump -i enp0s3 -nn tcp and src 192.168.11.111 and dst port 443
$ : インターフェース enp0s3 の ARP または TCP パケットを、ホスト名やサービス名に変換せず表示する
$ sudo tcpdump -i enp0s3 -nn arp or tcp
Wiresharkで見れるようにする
実際は、tcpdumpとWiresharkを併用して、パケットをみることが多いと思います。
$ sudo tcpdump -i enp0s3 -nn icmp -w ping.pcap
dropped privs to tcpdump
tcpdump: listening on enp0s3, link-type EN10MB (Ethernet), snapshot length 262144 bytes
^C ・・・ [Ctrl]+[c]で止める
8 packets captured
8 packets received by filter
0 packets dropped by kernel
$ ls -l ping.pcap
-rw-r--r--. 1 tcpdump tcpdump 744 Feb 11 11:38 ping.pcap
ping.pcapをWiresharkがインストールされているローカルPCに持ってきて、そのファイルを開くと、Wiresharkで参照することができます。
