Linuxコマンド辞典 tcpdumpコマンド(ネットワーク)
ネットワークトラフィックを出力する「tcpdump」コマンドの概要と使い方を記載しています。
RHEL Fedora CentOS Vine Deblan Ubuntu Plamo
参考サイト:Man page of INSTALL
概要・使用方法
書式
$ tcpdump [オプション] [評価式]
ネットワークインターフェースを通過するパケットを監視し、評価式にマッチしたパケットの概要を表示します。標準出力への出力以外にオプション(-w/-r)を指定することで、ファイルにパケットデータを書き出したり、書き出したパケットデータを読み込むことができます。
パケットの評価式は1つ以上の基本要素からなります。また、基本要素は1つ以上の装飾要素からなります。装飾要素は「type」「dir」「proto」を定義しています。「type」はhost/port/netを利用し、「host www.yahoo.co.jp」や「port 80」などのように利用します。「dir」はsrc/dst/src or dst/src and dstのいずれかを利用し、パケットの宛先、送信元を限定します。「proto」はプロトコルについて、ip/ip6/arp/tcp/udpなどを利用します。
tcpdumpコマンドを実行すると、ネットワークデバイスはプロミスキャスモードで動作します。通常は自分宛のパケットしか受け取らないが、プロミスキャスモード(無差別透過モード)では自分宛以外のパケットも受け取ります。
オプション
-A | すべてのパケットを(最小限で)ASCII表示する | ||||||||
-a | ネットワークアドレスとブロードキャストアドレスを名前解決する | ||||||||
-c 数 | 指定した数のパケットを受信したら終了する | ||||||||
-C サイズ | 出力ファイルの最大サイズを指定(MiB単位)し、超えた場合は別ファイルにローテートする | ||||||||
-D | キャプチャできるネットワークインターフェース一覧を表示する | ||||||||
-e | すべてのパケットのリンクレベルヘッダを表示する | ||||||||
-F ファイル名 | 入力に使用するファイルを指定する | ||||||||
-G 秒数 | ダンプファイルをローテート出力する秒数を指定する。ローテートする数は-Wオプションで指定する | ||||||||
-i インターフェース名 | 指定したネットワークインターフェースのパケットを見る。指定しない場合は、loopbackを除いたリスト(「tcpdump -D」の出力)の1番目のインターフェースを待ち受ける | ||||||||
-l | バッファを標準出力にも出力する | ||||||||
-n | アドレスやポート番号の名前解決を行わない | ||||||||
-p | プロミスキャストモード(無差別透過モード)にしない | ||||||||
-q | 簡易的な出力とする | ||||||||
-N | ホスト名のドメイン部分を表示しない | ||||||||
-r ファイル名 | -wオプションで作成したパケットのrawファイルを読み込む。「-」を指定すると標準入力を利用する | ||||||||
-s サイズ | キャプチャするバイト数を指定する(例:0であればデフォルトの65535が使われる) | ||||||||
-S | TCPシーケンス番号を相対値ではなく絶対値で表示する | ||||||||
-t | ダンプ表示に時間を表示しない | ||||||||
-v | やや詳細に出力する(TTLなども表示される) | ||||||||
-vv | -vよりも詳細に出力する | ||||||||
-vvv | -vvよりも詳細出力する | ||||||||
-w ファイル名 | パケットを指定したファイルにrawで出力する | ||||||||
-W 数 | -Gオプションと併用して、ローテート数を指定する | ||||||||
-x | 出力を16進数で表示する | ||||||||
-X | 出力を16進数でASCII文字も表示する | ||||||||
評価式 | 与えられない場合は、ネットワークインターフェースを通るすべてのパケットを出力する
|
特定ポート宛のパケットをキャプチャする
80や443ポート番号を指定すると、httpやhttpsのアクセスをパケットキャプチャーすることができる。
$ tcpdump -ni インターフェース dst port ポート番号
実行結果
[root@centos ~]# tcpdump -ni eth0 dst port 22
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:07:51.447478 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 250464274, win 8206, length 0
19:07:51.498523 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 53, win 8212, length 0
19:07:51.544247 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 97, win 8212, length 0
19:07:51.591868 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 141, win 8212, length 0
19:07:51.638927 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 185, win 8211, length 0
19:07:51.684231 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 229, win 8211, length 0
19:07:51.729882 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 273, win 8211, length 0
19:07:51.776376 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 317, win 8211, length 0
19:07:51.823171 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 361, win 8211, length 0
19:07:51.868936 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 405, win 8211, length 0
19:07:51.915432 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 449, win 8210, length 0
19:07:51.961072 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 493, win 8210, length 0
19:07:52.006948 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 537, win 8210, length 0
19:07:52.052887 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 581, win 8210, length 0
19:07:52.099820 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 625, win 8210, length 0
19:07:52.146298 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 669, win 8210, length 0
19:07:52.192842 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 713, win 8209, length 0
19:07:52.238679 IP 192.168.0.29.61763 > 192.168.0.60.ssh: Flags [.], ack 757, win 8209, length 0
^C
18 packets captured #←キャプチャしたパケット数
19 packets received by filter #←指定した条件にマッチしたパケット数
0 packets dropped by kernel #←カーネルが破棄したパケット数
[root@centos ~]#
特定ポート宛のパケットをキャプチャしASCII文字も併せて表示
$ tcpdump -X -i インターフェース dst port ポート番号
実行結果
[root@centos ~]# tcpdump -X -i eth0 dst port 22
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:10:39.822184 IP 192.168.0.29.61763 > centos.ssh: Flags [.], ack 250466690, win 8208, length 0
0x0000: 4500 0028 29a6 4000 8006 4f80 c0a8 001d E..().@...O.....
0x0010: c0a8 003c f143 0016 ca5e dbef 0eed d182 ...<.C...^......
0x0020: 5010 2010 9602 0000 P.......
19:10:39.889197 IP 192.168.0.29.61763 > centos.ssh: Flags [.], ack 197, win 8208, length 0
0x0000: 4500 0028 29a7 4000 8006 4f7f c0a8 001d E..().@...O.....
0x0010: c0a8 003c f143 0016 ca5e dbef 0eed d246 ...<.C...^.....F
0x0020: 5010 2010 953e 0000 P....>..
19:10:39.935021 IP 192.168.0.29.61763 > centos.ssh: Flags [.], ack 273, win 8207, length 0
0x0000: 4500 0028 29a8 4000 8006 4f7e c0a8 001d E..().@...O~....
0x0010: c0a8 003c f143 0016 ca5e dbef 0eed d292 ...<.C...^......
0x0020: 5010 200f 94f3 0000 P.......
19:10:39.981796 IP 192.168.0.29.61763 > centos.ssh: Flags [.], ack 349, win 8207, length 0
0x0000: 4500 0028 29a9 4000 8006 4f7d c0a8 001d E..().@...O}....
0x0010: c0a8 003c f143 0016 ca5e dbef 0eed d2de ...<.C...^......
0x0020: 5010 200f 94a7 0000 P.......
特定のプロトコルパケットをキャプチャする
$ tcpdump -i インターフェース プロトコル
実行結果
[root@centos ~]# tcpdump -i eth0 icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
[root@centos ~]#
特定のトラフィックをダンプする
標準出力ではなくファイルにキャプチャ結果を出力する
$ tcpdump -i eth0 port 22 -w ./tcp-22.raw
実行結果
[root@centos ~]# tcpdump -i eth0 port 22 -w ./tcp-22.raw
dropped privs to tcpdump
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C2 packets captured
3 packets received by filter
0 packets dropped by kernel
[root@centos ~]# wireshark ./tcp-22.raw
ファイルから読み込んで表示する
$ tcpdump -r ダンプファイル -i eth0 icmp
実行結果
[root@centos ~]# tcpdump -w dumplog -i eth0 tcp
dropped privs to tcpdump
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C2 packets captured
3 packets received by filter
0 packets dropped by kernel
[root@centos ~]# tcpdump -r dumplog -i eth0 tcp
reading from file dumplog, link-type EN10MB (Ethernet)
dropped privs to tcpdump
19:17:12.298703 IP centos.ssh > 192.168.0.29.61763: Flags [P.], seq 250475746:250475782, ack 3395220691, win 245, length 36
19:17:12.298849 IP 192.168.0.29.61763 > centos.ssh: Flags [.], ack 36, win 8208, length 0
[root@centos ~]#
特定のインターフェースに流れるパケットを30分ごとにひとまとめにし、10個のファイルに保存する
$ tcpdump -i インターフェース -G $(expr 60 \* 30) -W 10 -w tcpdump_%Y-%m-%d_%H-%M.cap
実行結果
[root@centos ~]# tcpdump -i eth0 -G $(expr 60 \* 30) -W 10 -w tcpdump_%Y-%m-%d_%H-%M.cap
dropped privs to tcpdump
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C17 packets captured
20 packets received by filter
0 packets dropped by kernel
[root@centos ~]#