【保存版】Wiresharkのキャプチャフィルタ ~設定方法と注意点~
Wiresharkでは、2種類のフィルタ存在します。ひとつは、表示フィルタでありこちらは以前の記事でご紹介しました。今回は、もうひとつのフィルタである「キャプチャフィルタ」について説明します。
キャプチャフィルタは、条件に合致したパケットのみキャプチャを実施します。
2022年10月にWireshark Ver.4.0がリリースされました。記述にあるVer.3.xはVer.3.6.9、Ver.4.xは4.0.1でそれぞれ検証しています。
パケットキャプチャの開始方法とキャプチャフィルタの設定
パケットキャプチャを開始は、Welcom Pageからキャプチャする方法と、トレースファイルからキャプチャする方法の2種類あります。
1.Welcom Pageからのキャプチャ
Wiresharkを起動すると以下の画面が表示されます。
キャプチャするインターフェイスをダブルクリックするとキャプチャが開始されます。
その際、キャプチャフィルタをボックスに入力すると、定義されたパケットのみキャプチャされます。
2.トレースファイルからのキャプチャ
トレースファイルを開いた状態からのキャプチャは、ボタンまたはメニューより行います。
動作 | ボタン | メニュー | ショートカットキー |
---|---|---|---|
キャプチャ開始 (キャプチャが停止している場合有効) |
[Capture]menu>Start | Ctrl + E | |
キャプチャ停止 (キャプチャが開始している場合有効) |
[Capture]menu>Stop | Ctrl + E | |
キャプチャリスタート (キャプチャが開始している場合有効) |
[Capture]menu>Restart | Ctrl + R | |
キャプチャオプションを開く (キャプチャが停止している場合有効) |
[Capture]menu>Options... | Ctrl + K |
キャプチャオプションを開くとWelcome Pageと同様フィルタを設定できます。また、キャプチャ中のファイルの自動保存やキャプチャ中の表示などの設定が可能です。
キャプチャの開始、停止を頻繁に行う作業であれば、ショートカットキーを覚えておくととても便利です。地味に作業効率が上がります。そしてキーボード操作のみで作業が行えると手も疲れません。(私だけかもしれませんが...。)
キャプチャフィルタのパラメータ
キャプチャフィルタのパラメータは、Berkeley Packet Filter(BPF)構文となっています。
BPFは、パケットフィルタリング機構です。多くのパケット解析ツールがこの構文に対応したライブラリを使用しています。
tcpdumpもこの構文を採用していますので、馴染みがある方も多いと思います。
BPF構文は、1つ以上の「プリミティブ(要素)」で構成されています。プリミティブは、1つ以上の修飾子とその後に続くID文字列または数値のセットから構成されます。
修飾子は、以下の3種類があります。
修飾子の種類 | 説明 | 例 |
---|---|---|
Type | ID文字列や数値の意味 | ether、host、net、port なにも指定しない場合はhostが指定されたとみなされる |
Dir | ID文字列や数値の方向 | src、dst なにも指定しない場合は"src or dst"、つまり双方向で指定したとみなされる |
Proto | プロトコル名 | ether、arp、ip、icmp、tcp、udp |
論理演算子を使ってプリミティブを組み合わせて、複数の条件を指定することが可能です。
使える演算子は以下のとおりです。
論理結合 | 指定方法1 | 指定方法2 |
---|---|---|
AND結合 | and | && |
OR結合 | or | || |
NOT結合 | not | ! |
キャプチャフィルタの条件設定
キャプチャフィルタは、表示フィルタに比べ表現方法が少ないため、複雑な条件の設定をするためには少し工夫が必要です。実例でよく使う表現を説明します。
宛先MACアドレスが00:00:00:00:00:01のパケットをフィルタ
ether src host 00:00:00:00:00:01
MACアドレスでフィルタする場合のType修飾子は"ether host"となります。
単に"host"と指定した場合は、IPアドレスでの指定となります。
送信元か宛先にポート80番か443番が含まれるパケットをフィルタ
port 80 || port 443
修飾子にDirを省略した場合は、双方向での指定となります。
ICMパケットをフィルタ
icmp
ポートによる指定ができないアプリケーション層によるフィルタは、Proto修飾子を使用します。
Ping要求とPing応答のパケットをフィルタ
icmp[0] == 0x08 || icmp[0] == 0x00
アドレス、ポート、プロトコル以外の複雑な設定は、オフセットとデータパターンで設定します。
Ping要求(Echo Request)は、ICMPヘッダのオフセット"0"バイトのパターンが16進数で"08"です。
Ping応答(Echo Reply)は、ICMPヘッダのオフセット"0"バイトのパターンが16進数で"00"です。
16進数を指定する場合は、パターンの先頭に"0x"を指定します。
ですので、この例の場合は、ICMPヘッダのはじめのバイトが16進数で"08"か"00"のパケットをフィルタする、という意味となります。
キャプチャフィルタを使う際の注意点
キャプチャフィルタを使用する一番の目的は、リソースの節約です。
解析するパケットがあらかじめわかっている場合は、無駄なパケットを排除することができます。
また、大量のトラフィックで必要なパケットに限定して調査ができるため、解析作業を高速化できます。
しかしながら、キャプチャフィルタは慎重に設定すべきです。これはWiresharkに限らずパケットキャプチャ製品全般に当てはまります。
トラブルシューティングのような目的でパケットキャプチャを行う場合は、どの通信に原因があるかは特定できない場合が多いです。その場合は、パケットをすべてキャプチャし、そこから表示フィルタで排除していくほうが合理的です。
当社では、パケットキャプチャ製品「SYNESIS」を開発、販売しています。Wiresharkでキャプチャが困難な高速回線、高トラフィックな状況でもロスなくキャプチャが可能です。
パケットキャプチャの手段や方法は、状況に応じて適切に選択、設定することが重要です。
あとがき
表示フィルタと違い、キャプチャフィルタでは、Ver.3.xとVer.4.xの明確な差分は見当たりませんでした。
Welcome Pageのインターフェイスの選択は、トラフィックがあるものが上に表示されるようになっていて使いやすくなっていました。
また新たな発見がありましたら、共有したいと考えています。