tcpdump の使い方

流れているパケットを見る

書き方

sudo tcpdump -i 装置 -nn [-c 数] [条件]
sudo tcpdump -i ens5 -w ファイル
tcpdump -r ファイル

条件は host・port・src・dst・net・icmp・tcp・udp・arp と and・or・not。-n は IP を、-nn はポートも数字のまま出します。Flags [S] は接続の始まり(SYN)、[S.] はその返事、[R.] は断り(RST)。動き出してから流れたパケットだけが見えます。止めるまで待ち続けるので、-c で数を決めるか Ctrl+C で止めます。後ろで動かすなら & を付け、kill %1 で止めます。

よく使うオプション

オプション意味
-i 装置見るネットワークの装置(any で全部)
-n / -nnIP アドレスを数字のまま出す。-nn はポートも数字のまま
-c 数その数だけ見たら止まる
-w ファイル画面に出さず、ファイルに書く(pcap)
-r ファイル書いたファイルを読む
-A中身を文字で出す(HTTP などを読むとき)
-v詳しく出す

例

$ sudo tcpdump -i ens5 -nn -c 5 port 44310:14:02.118 IP 10.0.4.25.51822 > 10.0.4.40.443: Flags [S], seq 1203, length 0
10:14:02.119 IP 10.0.4.40.443 > 10.0.4.25.51822: Flags [S.], seq 88, ack 1204, length 0
10:14:02.119 IP 10.0.4.25.51822 > 10.0.4.40.443: Flags [.], ack 1, length 0

443 番を通るパケットを 5 つだけ見て止まります。-c を付けないと Ctrl+C まで出続けます。

$ sudo tcpdump -i ens5 -nn host 10.0.4.40 and tcp

相手の番地と種類で絞ります。and・or・not で条件を組み合わせられます。

$ sudo tcpdump -i ens5 -nn 'tcp[tcpflags] & tcp-rst != 0'

接続を断ったパケット(RST)だけを見ます。ポートが閉じている相手を探すときに使います。

$ sudo tcpdump -i ens5 -nn -c 200 -w /tmp/web.pcap port 80

200 個をファイルに書きます。あとで tcpdump -r や Wireshark で読み返せます。

$ tcpdump -nn -r /tmp/web.pcap | head

書いておいたファイルを読みます。読むだけなら root は要りません。

よくある間違い・注意

  • 動き出してから流れたパケットしか見えません。先に tcpdump を動かしてから、確かめたい通信を起こします。
  • Flags [S] に返事が無いときは途中で止められている、[R.] が返るときは相手が待ち受けていない見込みです。
  • -w で書いたファイルは、パスワードなどの中身を含むことがあります。終わったら消します。

実際に打って練習する

Linux レベル2 コースの Lv59「流れをのぞく tcpdump」で覚えます(第4章 街道の整備(ネットワークの設定と調査))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、ゴールド以上のプランで遊べます。

Linux サーバー構築のコマンド一覧(LinuC レベル2 の範囲)へ戻る