Wiresharkの表示フィルタ ~基本操作編~
エンジニアノート
Wiresharkをここ15年くらい使用していて圧倒的に使いやすくなったと思う機能は、「表示フィルタ」です。ドラッグアンドドロップでパラメータの指定ができるようなったことにより、フィールド名を意識せずに設定できます。
私の記憶では、WiresharkバージョンのVer.2.xの後半くらいでこの機能がリリースされたはずです。ですので、ドラッグアンドドロップでフィルタが設定できない、と言うのであれば、まずバージョンを確認してください。
バージョンは、[Hepl] menu > "About Wireshark"で確認できます。 なお今回の記事は、現時点で最新版であるVer.3.6.2で検証しています。
Wiresharkの保存フィルタは、内容がたくさんありますので、何度かにわけて記事をアップする予定です。
今回は、保存フィルタの基本的な操作方法について解説します。
表示フィルタの設定方法
表示フィルタは画面上部のフィルタボックスにパラメータを指定して設定します。設定方法は、以下の3つの方法があります。
- 直接パラメータを入力
- 右クリックで関連したパラメータを指定
- Packet Detail画面でヘッダ情報からドラッグアンドドロップでパラメータを指定
1.の方法はよく知られている一般的な方法です。検索をすればよく使うフィルタパラメータがたくさんヒットしますので、それらをコピーして設定することが可能です。
2.の方法も覚えておくと便利です。画面上で右クリックし"Apply as Filter"と出てきたら関連するフィルタが適用できます。
Packet List画面やPacket Detail画面だけでなく、[Statistics] menuから表示できるProtocol Hierarchy、Conversations、Endpointsなどでも右クリックからフィルタが設定できます。
この設定方法は、特にL2やL3の双方向の通信を素早く設定する際にはとても有効です。
かなり古いバージョンから右クリックのフィルタは可能でしたが、意外と翻訳画面以外でも適用できることを知らない方が多いです。ぜひ、いろいろな画面で試してみてください。(笑)
おすすめは、3.の方法です。パケットのヘッダ情報を確認しながら実施できるので非常に簡単です。
例えば、TCPヘッダのSYNフラグのビットが"1"のパケットだけフィルタする場合は、以下のように関連するフィールドを上部のフィルタボックスにドラッグアンドドロップします。
フィルタパラメータの書式
パラメータは、「フィールド名のみ」を指定するか、「フィールド名に対する値と関係性」を指定します。(と書くと少し難しそうですが、実際は簡単です。)
フィールド名は、上記の2.か3.の方法で指定すれば、覚える必要はありません。1.の方法でもテキストを入力すれば、予測変換機能が働きます。
基本的には、"protocol.feature.subfeature"形式のスキームに則っていますので使っていれば覚えます。
関係性は演算子で指定することがほとんどですので、こちらも慣れは必要ですが覚える必要はありません。
プロトコルからフィールド名を調べる場合は、フィルタボックスを右クリックして、"Display Filter Expression"を開きます。また、関係性と値もこのダイアログから入力ができますので、この画面でフィルタ設定を行うことも可能です。
No. | 項目 | 説明 |
---|---|---|
1 | Field Name | フィールド名を選択します。この項目は必須です。 |
2 | Relation | フィールド名と値の比較演算子および関係性を指定します。 指定できる項目は、比較演算子と関係性で説明します。 |
3 | Value | フィルタするフィールド名の値を指定します。 |
4 | Search | 入力したキーワードを含むフィールド名を"Field Name"に表示します。 正規表現でも指定が可能です。たとえば、"ipv4"から始まるフィールド名は"^ipv4"で検索できます。 |
5 | フィルタパラメータ | このダイアログで設定したフィルタパラメータです。 [OK]ボタンを押すと、Wiresharkの画面でフィルタパラメータがフィルタボックスに自動入力され、表示フィルタが適用されます。 |
比較演算子と関係性
比較演算子と関係性は、以下のとおりです。比較演算子は()内の記述でも指定可能です。
Relation | 説明 | フィルタパラメータの例 | 例の説明 |
---|---|---|---|
is present | プロトコルのみを指定する場合に選択 | http | HTTPのみ |
== (eq) | 等しい | ip.addr == 192.168.1.1 | IPアドレスが192.168.1.1のみ |
!= (ne) | 等しくない | udp.port != 123 | UDPポート123番以外 |
> (gt) | より大きい | udp.port > 1023 | UDPポートが1023より大きい |
< (lt) | より小さい | tcp.port < 1023 | TCPポートが1023より小さい |
>= (ge) | 以上 | udp.port >= 1024 | UDPポートが1024以上 |
<= (lt) | 以下 | tcp.port <= 1024 | TCPポートが1024以下 |
contains | 含まれる | htt contains "text" | HTTPプロトコルに"text"の文字列が含まれる |
matches | 正規表現で指定 | http matches "(?i)(^text|^json)" | HTTPプロトコルに"text"か"json"の文字列が含まれ、かつ文字列の大文字、小文字は区別しない |
in | 複数の引数を指定 | ip.proto in {6 17} | IPプロトコル番号が6か17 |
今回のまとめ
Wiresharkには「表示フィルタ」と「キャプチャフィルタ」があります。今回は、表示フィルタについての内容です。表示フィルタとキャプチャフィルタは表記法が異なりますのでご注意ください。
ほとんどの方は、表示フィルタのほうがよく使うのではないでしょうか。
今回は、表示フィルタの指定方法とフィルタパラメータの書式について解説しました。
次回は、保存フィルタで複数の条件を組み合わせる方法について解説する予定です。
関連記事
WiresharkTIPS関連
Wiresharkの表示フィルタ ~基本操作編~(本記事)