tcpdumpコマンドでネットワークをみる

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で参照することができます。

タイトルとURLをコピーしました