HYPERCONCERTO株式会社のチーフエンジニア雑記Blog

hyperconcerto株式会社のチーフエンジニアが日々気づいたことを書いています

WireSharkをコマンドで使う方法

CPU自作は開発環境が壊れてしまったのでしばらくお休みです。

ネットワークのトラブルシューティングでキャプチャを取る事があると思います。
現象が頻発する場合は良いのですが単発で起きる現象の場合だと何日もキャプチャし続ける必要があります。
でもWireSharkって取りっぱなしだと重くて端末が落ちるんだよね…

 

今回のお題はWireSharkです。
ご存知WireSharkはパケットキャプチャーソフトの代表例です。
でもGUIなので短期間のキャプチャしかできないと思われています。
長期間の取得はtcpdumpじゃないとだめとか…
実はWireSharkLinuxtcpdumpと同様にコマンドで取れます。
オプションを適切に設定すれば長期間無人運転できますよ。

 

コマンド例
"C:\Program Files\Wireshark\dumpcap.exe" -a duration:3600 -b filesize:26000 -s 75 -i キャプチャーポート -B 50 -w D:\Capture\cap1.pcapng

●内容
1時間で自動停止し、約25MBずつでファイルを分割します。24時間などといった指定でも問題なく動作します
パケットの先頭から75バイトのみ記録し、キャプチャバッファに50MB確保します。
(先頭75バイトのみなので後ろのデータは捨てます)
キャプチャーポートというNICを対象とします。
キャプチャーデータはD:\Capture\cap1.pcapngという名前に対して連番で保存します。
この指定だとソースIPなどで制限かけていないのですぐにデータであふれてしまいます。

 

コマンド例
"C:\Program Files\Wireshark\dumpcap.exe" -a duration:86400 -b filesize:26000 -s 75 -f "src net 192.168.0.0/24 or dst net 192.168.0.0/24" -i キャプチャーポート -B 50 -w D:\Capture\cap1.pcapng
24時間192.168.0.0/24のトラフィックを記録し続けます。
さらに特定のホストが含まれる通信は除外したい場合は下記の通りになります。

 

"C:\Program Files\Wireshark\dumpcap.exe" -a duration:86400 -b filesize:26000 -s 75 -f "src net 192.168.0.0/24 or dst net 192.168.0.0/24 and not host 172.16.0.100" -i キャプチャーポート -B 50 -w D:\Capture\cap1.pcapng
172.16.0.100のホストは除外します。

 

さらに宛先ポートが80の物だけにする場合
"C:\Program Files\Wireshark\dumpcap.exe" -a duration:86400 -b filesize:26000 -s 1500 -f "src net 192.168.0.0/24 or dst net 192.168.0.0/24 and not host 172.16.0.100 and dst port 80" -i キャプチャーポート -B 50 -w D:\Capture\cap1.pcapng
となります。
この例に関しては絞り込んでいるので1500バイト記録するようにしています。

 

また、ポートは範囲で記入することもできます。
tcp portrange 10000-20000

 

●詳しくはこちら公式ヘルプのURL
https://www.wireshark.org/docs/man-pages/dumpcap.html
https://wiki.wireshark.org/CaptureFilters

 

上記の例ではプロセスの暴走を抑止するため24時間で停止させます。
なので毎日決まった時間タスクスケジューラで上記内容を記述したBATを起動すれば信頼性の高いキャプチャが可能です。
さらに7zipなどとコラボすればキャプチャしたデータを7z形式で圧縮して、元データを削除するなんてこともできます。