tcpdumpは、ネットワーク トラフィックをキャプチャして解析するための強力なコマンドラインツールです。SNMPのような高水準プロトコルに依存せず、直接レイヤ2~レイヤ4のパケット情報(ヘッダやペイロード)を取得可能であり、診断やセキュリティ監査に広く利用されます。
基本的な構文とオプション
基本的な構文は以下の通り:
tcpdump [オプション] [フィルタ式]
主な設定オプション
-c 回数:指定したパケット数をキャプチャしたら終了-i インターフェース名/番号:監視対象のネットワークインターフェースを指定(例:eth0、wlp3s0など)-n:IPアドレスをドット表記で出力(DNS逆引きを実行しない)-nn:ポート番号もサービス名ではなく数値で表示(例:80 → 80)-P in|out|inout:パケット方向(受信/送信/双方向)を制限-s 長さ:1パケットあたりの取得長(デフォルトは65535バイト。短すぎるとペイロード切断)
出力形式制御オプション
-e:データリンク層(例:MACアドレス)ヘッダを表示-q:最小限の情報のみ表示(短縮出力)-X:16進数+ASCIIでペイロードを表示(攻撃文字列検出に有効)-XX:-Xに加え、データリンク層も16進+ASCIIで表示-v系:-v、-vv、-vvvで詳細度を段階的に上げる(TTLやオプションフィールドも展開)
保存・再実行系オプション
-D:利用可能なインターフェース一覧を番号と名前で表示-F ファイル:フィルタ式をファイルから読み込み(コマンドラインの他の式を無効化)-w ファイル名:キャプチャ結果をバイナリファイル(libpcap形式)で保存-r ファイル:保存済みファイルからパケットを読み込み再解析
代表的なフィルタ式の記述例
フィルタ式はBPF(Berkeley Packet Filter)構文に従います。演算子・キーワードを組み合わせて柔軟な抽出が可能です。
- 全トラフィックを監視(デフォルト)
tcpdump -i eth0
最初のネットワークインタフェースを対象に全パケットを出力(サンプル数多のため、-cや-fで制限推奨) - 指定ホストとの通信のみ
tcpdump -i eth0 host 192.168.1.100
192.168.1.100宛または同ホスト発のIPパケットのみをキャプチャ - 特定ホスト間の通信のみ
tcpdump -i eth0 host 10.0.0.5 and host 10.0.0.7
2ホスト間の双方向通信を抽出 - 送信元/宛先指定
tcpdump -i eth0 src host webserver and dst port 443
webserverホストが443番ポートへ発信するTLSパケットのみ抽出 - ポート・ポートタイプ制御
tcpdump -i eth0 tcp port 80
80番ポートを対象とするHTTPーパケットを抽出
tcpdump -i eth0 udp port 53
DNSクエリ/レスポンスをID/tcpdump -i eth0 'udp port 53' - ネットワーク単位でのフィルタ
tcpdump -i eth0 net 172.16.0.0/16
172.16.x.xネットワークへの疎通パケットを一括抽出 - 際立つtraffic種別の抽出
tcpdump -i eth0 icmp
ping(ICMP Echo)パケットを画面表示または保存対象に指定可能
実用的なキャプチャ・解析コマンド例
- HTTPS通信の入手
tcpdump -i eth0 -s 0 -XX tcp port 443
-XXで16進とASCIIをペアで表示し、TLSハンドシェイクの詳細を確認。-s 0で完全パケット取得 - 簡易ping監視
tcpdump -c 10 -i eth0 icmp
ICMP Echo Request/Replyのみ10パケット取得。-nnでIPアドレス短縮my! - SSH接続ログの記録
tcpdump -i eth0 -w /tmp/ssh.pcap tcp dst port 22
22番ポート(SSH)への宛先接続をpcapファイルに保存。後続解析にWireshark等が利用可能 - 文字列検索を組み合わせた探索(tcpdump+grep)
tcpdump -s 0 -A -i eth0 'tcp port 80' | grep -i 'POST\|GET'
-Aオプション(ASCII専用出力)と組み合わせることでHTTP メソッドをリアルタイムフィルタ
出力ファイルの後処理
保存したpcapファイルは、tcpdumpに加えてtshark、Wiresharkで読み込み可能です:
tcpdump -r /tmp/session.pcap -X | less
とすると、 saved trafficを tears TCP流ごとにデコードして確認できます。