読者です 読者をやめる 読者になる 読者になる

conf t

インフラエンジニアのメモ

tcpdumpの使い方

linux

最近トラブルシューティングでtcpdumpを使うことがあるのでメモ

目次

1.インターフェースを指定してキャプチャ
2.プロトコルを指定してキャプチャ
3.ポートを指定してキャプチャ
4.ホストを指定してキャプチャ
5.特定ホストを除外してキャプチャ
6.キャプチャ結果をファイルへ書き込む
7.ファイル書き込みを一定の容量でローテーション
8.キャプチャファイルの開始と終了時刻を表示する
9.キャプチャファイルから特定期間を切り出す

インターフェースを指定してキャプチャ

# tcpdump -i eth1

インターフェースを指定してキャプチャする。
この場合は、eth1を通過するパケットをキャプチャする。
ifconfig等でインターフェース名を事前に調べ、それを指定する。
-i 1など数字で指定することもできるが、わかりずらいのでインターフェース名で指定するのが良い。

プロトコルを指定してキャプチャ

# tcpdump -i eth1 icmp

eth1を通過するパケットのうち、プロトコルicmpのパケットのみキャプチャする。
ping応答しない設定になっているホストへの疎通確認をしたい場合に、
sshでログインし、疎通確認したインターフェースで上記を実施しpingが来ていることを確認したりする。
tcpdumpで指定できるプロトコルはほかにtcp, udpなど。
httpなどは指定できないので、次のportで指定する。

ポートを指定してキャプチャ

# tcpdump -i eth1 port 80

httpなどはport番号を指定してキャプチャする。

ホストを指定してキャプチャ

# tcpdump -i eth1 icmp host 192.168.1.1
# tcpdump -i eth1 icmp dst host 192.168.1.1
# tcpdump -i eth1 icmp src host 192.168.1.1

eth1を通過するパケットのうち、プロトコルicmpで、かつ192.168.1.1が送受信するパケットのみキャプチャする。

192.168.1.1が宛先のものだけ→dst host 192.168.1.1
192.168.1.1が送信元のものだけ→src host 192.168.1.1

ある宛先への通信に不具合があり、検証端末-宛先間の通信を調べたい時などに。

特定ホストを除外してキャプチャ

# tcpdump -i eth1 icmp not host 192.168.1.200

特定のホストが送受信するパケットを除外することができる。
NTPサーバ宛の通信など、調査したい通信とは関係ないパケットを除外するときに使う。
上記の例は、192.168.1.200の送受信を除外している。

キャプチャ結果をファイルへ書き込む

# tcpdump -w test.pcap -i eth1 host 192.168.1.1

キャプチャ結果をターミナルではなくファイル書き込む。
wiresharkでも読める。じっくり解析したい場合や、キャプチャ結果を別担当やサポートへ送付するとき。

ファイル書き込みを一定の容量でローテーション

# tcpdump -w test.pcap -i eth1 host 192.168.1.1 -c 100

キャプチャファイルを、一定の容量になるごとにローテーションさせる。
ファイルアップロードシステムなどは決まった容量までしかアップできないことも多いので、 そういった場合に便利。

キャプチャファイルの開始と終了時刻を表示する

# tcpslice -t test.pcap
sliced_test.pcap        2015y04m12d23h51m08s383237u     2015y04m12d23h51m08s427872u

あとからキャプチャファイルを分割したい場合、tcpsliceが便利。
単純にファイル分割するだけであればsplitでもよいが、キャプチャファイル中の意味のある特定の期間だけ
抜き出したいなどの場合にはこれが便利。
上記はtest.pcapのキャプチャ開始時間と終了時間を表示する。
そして、実際に切り出す際は以下コマンドを使う。

キャプチャファイルから特定期間を切り出す

tcpslice -w sliced_test.pcap 2015y04m12d23h51m08s +60 test.pcap

2015y04m12d23h51m08sは切り出し始めの時間、+60は切り出し始めの時間から60秒分切り出すという意味。
test.pcapからsliced_test.pcapを作成している。

広告を非表示にする