teketeke_55の日記

技術メモとか

dumpcapでパケットフィルタリング

tcpdumpのようにコマンドラインでパケットをキャプチャするツール。
wiresharkをインストールすると一緒に入ってくる。

wiresharkは長時間動かしているとハングしたりメモリを使いすぎて落ちたりすることがあるので
長期間キャプチャをする場合はこれをバックグラウンドで動かす方がいいかもしれない。

マニュアルはこちら
dumpcap
http://www.wireshark.org/docs/man-pages/dumpcap.html
capture firter
http://wiki.wireshark.org/CaptureFilters#CaptureFilters-1


今回は特定のネットワークを通過しているHTTPのパケットを条件指定して取得してみる。

  • HTTPのGETだけ取得
dumpcap -i 1 -f "src net 172.16.40.0/24 and port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 "
  • HTTPのPOSTだけ取得
dumpcap -i 1 -f "src net 172.16.40.0/24 and port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 "

HTTPSも取りたい場合はportをor条件で追加してやる。

  • 上記3つをファイル出力しつつ時間指定でローテーション
dumpcap -i 1 -f "src net 172.16.40.0/22 and port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or port 443" -b duration:3600  -w log.pcap

特定のホストをを取りたい場合src netをsrc hostにしてやればよい。
 -b オプションにはほかにも容量指定や保持ファイル指定などできて便利。