Wiresharkコマンド版【Tshark】の使い方~フィルタ設定,pcapファイル出力/分割,オプション~

Wireshark の負荷が大きいときは Tshark を使うべし

Wireshark でパケットキャプチャをするとき、大量にデータが入ってくるとPCが重くなりますよね。それもそのはず。パケットをメモリ上に溜め込んでいるのですから

トラブルシューティングをする際に、再現する時刻がバラバラの事象の場合、Tshark がお勧めです。メモリ上ではなくディスクにファイルとして書き込んでいくようになりますので、メモリ消費が無いのです。

Tshark は Windows 版の tcpdump と考えればよいでしょう。Wireshark をインストールすれば使えるようになります。

Tshark の使い方

まずはインタフェースの ID を確認するため、以下コマンドを打ちます。(tshark -D でも同等の結果が出力されますが、ASCII のみの対応のようで、日本語は文字化けしてしまいます。)

c:\>"c:\Program Files\Wireshark\dumpcap.exe" -D
出力結果の例:
1. \Device\NPF_{ECD2CEFE-5C05-4AB5-8180-23900F2A01E7} ABCDEFG

一番左の番号がインタフェース ID。複数出てきた場合はどのインタフェースをキャプチャしたいかを確認し、そのインタフェース ID を覚える。

そして次のコマンドを打ちます。

c:\>"c:\Program Files\Wireshark\tshark.exe" -i [インタフェースID] -w nwwatch.pcap -b filesize:10000

オプションについて

-w は出力するファイル名の指定です。実行ディレクトリ(今回はc:\)にnwwatch.pcapというファイルが生成されます。もしくはフルパスを書けばその場所に保存されます。

-b filesize: これは言わずもがな、ファイルサイズ指定です。10000KB = 10MB に達したら新たなファイルを作ります。

また、-b duration: を使えば、秒単位でのローテーションが可能です。

c:\>"c:\Program Files\Wireshark\tshark.exe" -i [インタフェースID] -w nwwatch.pcap -b duration:3600

キャプチャフィルタ

先ほどの例では使っていませんが、キャプチャフィルタを使えば、狙った通信だけをキャプチャすることができます。キャプチャフィルタは Wireshark の閲覧時のフィルタとはフォーマットが異なり、tcpdump (正確には libpcap) と同じです。

例えば 192.168.1.1 に関する tcp:80 のパケットだけを見たい場合(192.168.1.1 が送信元 IP もしくは宛先 IP であり、かつ tcp:80 が送信元ポートもしくは宛先ポートである通信)

-f "host 192.168.1.1 and tcp port 80"

もう 1 つの例として、宛先が 172.16.0.0/16 の範囲で、かつ DNS および http を除外する例

-f "net 172.16.0.0 mask 255.255.0.0 and not (port 53 or port 80)"

TCP の 16000 ~ 16100 までの範囲を見たい場合

-f "tcp portrange 16000-16100"

リードフィルタ

取り込んだファイルはGUI のwireshark で閲覧可能ですが、CLI の tshark (-rオプション) でも閲覧可能です。-Yオプションでフィルタを指定しますが、フォーマットはキャプチャフィルタと異なり、Wireshark のものになります。

c:\>"c:\Program Files\Wireshark\tshark.exe" -r nwwatch.pcap -Y "ip.addr==192.168.1.1"