tcpdumpコマンド

システム上のネットワークトラフィックをキャプチャして分析します。

概要

tcpdumpは強力なコマンドラインパケットアナライザで、ネットワーク経由で送受信されるTCP/IPやその他のパケットをキャプチャして表示することができます。ネットワークのトラブルシューティング、セキュリティ分析、ネットワークアクティビティの監視によく使用されます。

オプション

-i インターフェース

リッスンするネットワークインターフェースを指定します

$ tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:45:22.357932 IP host1.ssh > host2.52986: Flags [P.], seq 1:37, ack 1, win 501, options [nop,nop,TS val 1089067 ecr 1089067], length 36

-n

アドレス(ホストアドレス、ポート番号など)を名前に変換しません

$ tcpdump -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:46:12.357932 IP 192.168.1.10.22 > 192.168.1.20.52986: Flags [P.], seq 1:37, ack 1, win 501, options [nop,nop,TS val 1089067 ecr 1089067], length 36

-c カウント

指定した数のパケットをキャプチャした後に終了します

$ tcpdump -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
5 packets captured
5 packets received by filter
0 packets dropped by kernel

-w ファイル

パケットを解析して表示する代わりに、生のパケットをファイルに書き込みます

$ tcpdump -w capture.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
45 packets captured
45 packets received by filter
0 packets dropped by kernel

-r ファイル

ファイルからパケットを読み込みます(以前に-wオプションで作成したもの)

$ tcpdump -r capture.pcap
reading from file capture.pcap, link-type EN10MB (Ethernet)
13:45:22.357932 IP host1.ssh > host2.52986: Flags [P.], seq 1:37, ack 1, win 501, options [nop,nop,TS val 1089067 ecr 1089067], length 36

-v, -vv, -vvv

詳細レベルを上げます(より多くのパケット情報を表示)

$ tcpdump -v
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:45:22.357932 IP (tos 0x10, ttl 64, id 12345, offset 0, flags [DF], proto TCP (6), length 104) host1.ssh > host2.52986: Flags [P.], seq 1:37, ack 1, win 501, options [nop,nop,TS val 1089067 ecr 1089067], length 36

使用例

特定のインターフェースでパケットをキャプチャする

$ tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:45:22.357932 IP host1.ssh > host2.52986: Flags [P.], seq 1:37, ack 1, win 501, options [nop,nop,TS val 1089067 ecr 1089067], length 36

ホストでトラフィックをフィルタリングする

$ tcpdump host 192.168.1.10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:45:22.357932 IP 192.168.1.10.ssh > host2.52986: Flags [P.], seq 1:37, ack 1, win 501, options [nop,nop,TS val 1089067 ecr 1089067], length 36

ポートでトラフィックをフィルタリングする

$ tcpdump port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:45:22.357932 IP host1.http > host2.52986: Flags [P.], seq 1:37, ack 1, win 501, options [nop,nop,TS val 1089067 ecr 1089067], length 36

パケットをキャプチャしてファイルに保存する

$ tcpdump -w capture.pcap -i eth0
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
45 packets captured
45 packets received by filter
0 packets dropped by kernel

ヒント:

完全なアクセスのためにsudoで実行する

ほとんどのシステムではパケットをキャプチャするために管理者権限が必要です。適切な権限を確保するためにsudo tcpdumpを使用してください。

対象を絞ったキャプチャにはフィルタ式を使用する

フィルタを組み合わせてトラフィックを絞り込みます:tcpdump 'tcp port 80 and host 192.168.1.10'は特定のホストとの間のHTTPトラフィックのみをキャプチャします。

高速なキャプチャのために名前解決を無効にする

特に混雑したネットワークでは、DNSルックアップによってパケットキャプチャが遅くなる可能性があるため、-nを使用してください。

パケットの内容全体をキャプチャする

ヘッダーだけでなくパケット全体をキャプチャするには-s 0を使用します(最新バージョンのデフォルトは262144バイトです)。

分析にはWiresharkを使用する

-w ファイル名.pcapでキャプチャを保存し、詳細なグラフィカル分析のためにWiresharkで開きます。

よくある質問

Q1. 特定のインターフェースでパケットをキャプチャするにはどうすればよいですか?

A. tcpdump -i インターフェース名を使用します(例:tcpdump -i eth0)。

Q2. キャプチャしたパケットをファイルに保存するにはどうすればよいですか?

A. tcpdump -w ファイル名.pcapを使用して生のパケットをファイルに保存します。

Q3. IPアドレスでトラフィックをフィルタリングするにはどうすればよいですか?

A. tcpdump host 192.168.1.10を使用して、そのIPとの間のトラフィックをキャプチャします。

Q4. ポート番号でフィルタリングするにはどうすればよいですか?

A. tcpdump port 80を使用してHTTPトラフィックまたはポート80上のすべてのトラフィックをキャプチャします。

Q5. より詳細なパケット情報を見るにはどうすればよいですか?

A. -v-vv、または-vvvフラグを使用して詳細レベルを上げます。

参考文献

https://www.tcpdump.org/manpages/tcpdump.1.html

改訂履歴