■ よく使うオプションとexpression
tcpdump [options] [expression]
オプション
# -t タイムスタンプを出力しない
# -n アドレスを名前に変換しない
# -i <INTERFACE> パケットキャプチャ対象のネットワークインターフェースを指定
# -e イーサネットヘッダを出力する
# -l 標準出力を行バッファリングする
# -A パケット(イーサネットヘッダを除く)をASCIIで表示 (webページのキャプチャで便利)
# -x パケット(イーサネットヘッダを除く)の内容を16進数で出力
# -xx パケット(イーサネットヘッダを含む)の内容を16進数で出力
# -x パケット(イーサネットヘッダを除く)の内容を16進数とASCIIで出力
# -XX パケット(イーサネットヘッダを含む)の内容を16進数とASCIIで出力
# -v 出力情報を増やす
# -vv 出力情報をさらに増やす
# -vvv 出力情報をもっと増やす
expression
ダンプするパケットを選択するための条件を指定します。複数指定する場合は or
, and
で接続します。
# ether dst <MAC_ADDR> 宛先が指定したMACアドレスの場合
# ether src <MAC_ADDR> 送信元が指定したMACアドレスの場合
# ether host <MAC_ADDR> 宛先もしくは送信元が指定したMACアドレスの場合
# dst host <HOST> 宛先が指定したホスト名もしくはIPアドレスの場合
# src host <HOST> 送信元が指定したホスト名もしくはIPアドレスの場合
# host <HOST> 宛先もしくは送信元が指定したホスト名もしくはIPアドレスの場合
# dst net <NETWORK> 宛先が指定したネットワークの場合 (例) 10.0.0.0/8
# src net <NETWORK> 送信元が指定したネットワークの場合 (例) 10.0.0.0/8
# net <NETWORK> 宛先もしくは送信元が指定したネットワークの場合 (例) 10.0.0.0/8
# dst port <PORT> 宛先が指定したポートの場合
# src port <PORT> 送信元が指定したポートの場合
# port <PORT> 宛先もしくは送信元がが指定したポートの場合
# <PROTOCOL> ether, ip, icmp, arp, rarp, tcp, udp, etc...
# vlan [VLAN_ID] パケットが IEEE 802.1Q VLAN パケットの場合
■ ユースケース別よく使う組み合わせ
ARPのキャプチャ
```bash
# -t タイムスタンプを表示しない
# -n アドレスを名前に変換しない
# -e イーサネットのヘッダ情報を表示する
# -l 標準出力を行バッファリングする
tcpdump -tnel -i any arp
# 00:00:5e:00:53:01 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.0.2.2 tell 192.0.2.1, length 28
# 00:00:5e:00:53:02 > 00:00:5e:00:53:01, ethertype ARP (0x0806), length 42: Reply 192.0.2.2 is-at 00:00:5e:00:53:02, length 28
pingのキャプチャ
# -t タイムスタンプを表示しない
# -n アドレスを名前に変換しない
# -e イーサネットのヘッダ情報を表示する
# -l 標準出力を行バッファリングする
tcpdump -tnel -i any icmp
# 00:00:5e:00:53:01 > 00:00:5e:00:53:02, ethertype IPv4 (0x0800), length 98: 192.0.2.1 > 192.0.2.2: ICMP echo request, id 17365, seq 1, length 64
# 00:00:5e:00:53:02 > 00:00:5e:00:53:01, ethertype IPv4 (0x0800), length 98: 192.0.2.2 > 192.0.2.1: ICMP echo reply, id 17365, seq 1, length 64
UDPのキャプチャ
# -i <interface> パケットキャプチャ対象のネットワークインターフェース
# -t タイムスタンプを表示しない
# -n アドレスを名前に変換しない
# -l 標準出力を行バッファリング
# -A キャプチャした内容をASCII文字として表示する
tcpdump -tnlA -i any "udp and port 54321"
# IP 127.0.0.1.43058 > 127.0.0.1.54321: UDP, length 12
# E..(0.@.@............2.1...'hello world
TCPのキャプチャ
# -t タイムスタンプを表示しない
# -n アドレスを名前に変換しない
# -l 標準出力を行バッファリング
# -A キャプチャした内容をASCII文字として表示する
sudo tcpdump -tnlA -i any "tcp and port 54321"
# === === === 3wayハンドシェイク === === ===
# IP 127.0.0.1.44760 > 127.0.0.1.54321: Flags [S], seq 1295360057, win 65495, options [mss 65495,sackOK,TS val 4208188012 ecr 0,nop,wscale 7], length 0
# E..<.5@.@.L............1M5.9.........0.........
# ...l........
# IP 127.0.0.1.54321 > 127.0.0.1.44760: Flags [S.], seq 3835090924, ack 1295360058, win 65483, options [mss 65495,sackOK,TS val 4208188012 ecr 4208188012,nop,wscale 7], length 0
# E..<..@.@.<..........1......M5.:.....0.........
# ...l...l....
# IP 127.0.0.1.44760 > 127.0.0.1.54321: Flags [.], ack 1, win 512, options [nop,nop,TS val 4208188012 ecr 4208188012], length 0
# E..4.6@.@.L............1M5.:.........(.....
# ...l...l
# === === === クライアントからデータの送信 === === ===
# IP 127.0.0.1.44760 > 127.0.0.1.54321: Flags [P.], seq 1:15, ack 1, win 512, options [nop,nop,TS val 4210427304 ecr 4208188012], length 14
# E..B.7@.@.L|...........1M5.:.........6.....
# .......lHello, World!
# === === === サーバーからの確認応答(ack) === === ===
# ※ ack の後ろの数字は確認応答番号で、15バイトまでは正常に受信できた旨をクライアントに応答する
# IP 127.0.0.1.54321 > 127.0.0.1.44760: Flags [.], ack 15, win 512, options [nop,nop,TS val 4210427304 ecr 4210427304], length 0
# E..4.k@.@.8W.........1......M5.H.....(.....
# ........