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 / -nn | IP アドレスを数字のまま出す。-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 0443 番を通るパケットを 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章 街道の整備(ネットワークの設定と調査))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
すべてのレベルが、ゴールド以上のプランで遊べます。