tcpdumpの使い方まとめ
tcpdumpは TCP・UDP などに対応したパケットキャプチャツール。
詳細はマニュアル(man tcpdump)を読む。
|
|
上記expressionはネットワークスニッフ用データ形式pcapのフィルターを記述する。
詳細はman pcap-filterで読む。
基本的な使い方をメモしておく。
その場で出力する
以下のように打つ事でその場で出力する事が出来る。
|
|
使うオプション
| オプション | 意味 |
|---|---|
-n オプション |
IPアドレス・port番号をそのまま表示 |
-A オプション |
TCP/UDPのpayloadをASCIIで表示 |
-X オプション |
TCP/UDPのpayloadを16進, ASCIIで表示 |
-i オプション |
キャプチャ対象のNICを指定する |
-Z オプション |
実行ユーザを指定する(root -> $USERに落とす) |
表示形式
${日付} ${送信元 (<プロトコル> <ホスト>.<ポート>)} > ${送信先 (<プロトコル> <ホスト>.<ポート>)}: ${パケット詳細}
パケット詳細の内容
| 項目 | 意味 |
|---|---|
| Flags | [フラグに応じた内容](C\WR |
| seq | sequence number |
| ack | acknowledgement number |
| win | ウィンドウサイズ |
| length | パケット長 |
| options | tcp options(mss,wscale, …, eol) |
|
|
例えば、1行目ではIPv6 でエフェメラルポート51857からirdmi(8000) へSYNが飛んでいる。
返答としてIPv6 でRST・ACKを持ったパケットが返されている。
またウィンドウサイズは0となっている。
その後クライアントはポートを変更し(51858)IPv4 で再開している。
使用例
python -m SimpleHTTPServerに向けてcurlを使った画面を下に貼る。
画像にあるようにSYN, SYNACK, ACKとハンドシェイクが行われていることが確認できる。

同じ環境でcurlに-4オプションを使用しなかった場合も載せておく。
なぜIPv6対応できていないかは不明だがcurlは最初にIPv6でSYNするもPythonはRSTにより拒否している事がわかる。

キャプチャ可能なNIC情報を取得する
-iオプションでNICを指定する。対象となるデバイスリストを確認するには-Dで行える。
|
|
キャプチャデータをファイルに保存する
-w オプションを使って保存する。
|
|
ファイルに保存したキャプチャデータを使う
-rオプションを使って利用する。ファイルから読み込み表示する際にフィルタを更に加える事が出来る。
|
|
フィルターの使い方はman pcap-filterに目を通すとわかる。