tcpdumpコマンド入門
パケットをキャプチャして分析する
tcpdumpはネットワークインターフェースを通過するパケットをキャプチャして表示するコマンドラインツールです。通信内容の確認、問題の原因特定、セキュリティ調査に不可欠です。
こんな人向けの記事です
- ネットワーク通信の内容を詳細に確認したい人
- 通信トラブルの原因をパケットレベルで調査したい人
- セキュリティ監視やフォレンジック調査を行いたい人
Step 1tcpdumpとは・インストール
tcpdumpはUnix/Linux系OSで標準的に使われるパケットキャプチャツールです。macOSにもプリインストールされています。通常は管理者権限(sudo)が必要です。
ターミナル
# Debian/Ubuntu系
sudo apt-get install tcpdump
# RHEL/CentOS/Fedora系
sudo yum install tcpdump
# macOS(プリインストール済み)
tcpdump --version
# Arch Linux
sudo pacman -S tcpdump
ポイント: Windowsでは直接のtcpdumpはありませんが、WSL内で使用するか、Wiresharkのコマンドラインツール「tshark」が代替として利用できます。
Step 2基本的な使い方
ターミナル
# 全パケットをキャプチャ(Ctrl+C で停止)
sudo tcpdump
# 特定インターフェースを指定
sudo tcpdump -i eth0
# パケット数を制限(10パケットで停止)
sudo tcpdump -c 10
# 詳細表示
sudo tcpdump -v
# さらに詳細な表示
sudo tcpdump -vv
基本的な出力例:
ターミナル
12:34:56.789012 IP 192.168.1.5.54321 > 142.250.207.68.443: Flags [S], seq 1234567, win 65535, length 0
12:34:56.799012 IP 142.250.207.68.443 > 192.168.1.5.54321: Flags [S.], seq 7654321, ack 1234568, win 65535, length 0
12:34:56.799112 IP 192.168.1.5.54321 > 142.250.207.68.443: Flags [.], ack 1, win 65535, length 0
| 項目 | 意味 |
|---|---|
| 12:34:56.789012 | タイムスタンプ |
| IP 192.168.1.5.54321 | 送信元IP.ポート |
| > 142.250.207.68.443 | 宛先IP.ポート |
| Flags [S] | TCPフラグ(S=SYN, .=ACK, P=PSH, F=FIN, R=RST) |
| length 0 | ペイロードのバイト数 |
Step 3フィルタ式の書き方
ターミナル
# 特定ホストのトラフィック
sudo tcpdump host 192.168.1.100
# 特定ポートのトラフィック
sudo tcpdump port 80
# 特定プロトコル
sudo tcpdump tcp
sudo tcpdump udp
sudo tcpdump icmp
# 送信元を指定
sudo tcpdump src 192.168.1.5
# 宛先を指定
sudo tcpdump dst 192.168.1.100
# 複合条件(AND/OR/NOT)
sudo tcpdump host 192.168.1.5 and port 443
sudo tcpdump port 80 or port 443
sudo tcpdump not port 22
# ネットワーク範囲の指定
sudo tcpdump net 192.168.1.0/24
Step 4ファイルへの保存と読み込み
ターミナル
# pcap形式でファイルに保存
sudo tcpdump -w capture.pcap
# フィルタ付きで保存
sudo tcpdump -w capture.pcap host 192.168.1.5 and port 443
# 保存したファイルを読み込み
tcpdump -r capture.pcap
# 保存ファイルにフィルタを適用して読み込み
tcpdump -r capture.pcap port 80
# ファイルサイズを制限(100MBごとにローテーション、最大5ファイル)
sudo tcpdump -w capture.pcap -C 100 -W 5
ポイント: pcap形式で保存したファイルはWiresharkで開くことができ、GUIで詳細な分析が可能です。
Step 5実践的な使用例
HTTPトラフィックの監視:
ターミナル
# HTTP/HTTPSトラフィック
sudo tcpdump -i eth0 port 80 or port 443 -n
# HTTPリクエストのASCII表示
sudo tcpdump -i eth0 -A port 80
DNS通信の監視:
ターミナル
sudo tcpdump -i eth0 port 53 -vv
TCP接続の確立(3ウェイハンドシェイク)の確認:
ターミナル
# SYNパケットのみキャプチャ
sudo tcpdump "tcp[tcpflags] & (tcp-syn) != 0"
# SYN/FINパケットをキャプチャ
sudo tcpdump "tcp[tcpflags] & (tcp-syn|tcp-fin) != 0"
特定サイズ以上のパケットをキャプチャ:
ターミナル
sudo tcpdump greater 1000
Step 6出力の読み方とトラブルシューティング
| 主なオプション | 説明 |
|---|---|
| -i [interface] | キャプチャするインターフェースを指定 |
| -c [数] | 指定数のパケットをキャプチャして停止 |
| -n | 名前解決を無効化(高速化) |
| -v / -vv / -vvv | 詳細度を上げる |
| -A | ASCII形式でペイロードを表示 |
| -X | HEXとASCIIの両方で表示 |
| -w [file] | pcap形式でファイルに保存 |
| -r [file] | pcapファイルを読み込み |
| -s [bytes] | キャプチャするパケットサイズ(0=全体) |
注意: tcpdumpは暗号化されていない通信の内容を見ることができるため、使用は正当な目的(自身のネットワーク診断等)に限定してください。他者の通信を無断でキャプチャすることは法律で禁止されている場合があります。また、本番環境での長時間キャプチャはディスク容量やパフォーマンスに影響する可能性があります。