HOME > ソフテックだより > 第335号(2019年8月7日発行) 技術レポート「Wiresharkの活用法 その3 〜表示フィルタで絞り込む〜」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第335号(2019年8月7日発行)
技術レポート

「Wiresharkの活用法 その3 〜表示フィルタで絞り込む〜」

1. はじめに

Wireshark活用法3回目は「表示フィルタ」の活用法をお伝えします。

第1回「〜長時間モニタリングとデータ解析について〜」ではネットワークの問題を解決するために大量にパケットを集める方法をお伝えしました。
その中で大量に集めたパケットを絞り込んで表示する表示フィルタについて簡単に説明しました。
今回はその「表示フィルタ」の設定方法と使い方を詳しくお伝えします。

なお、使用するWireshark はVersion 3.0.2です。本稿執筆時点(2019年06月30日)で最新バージョンとなっています。

2. 表示フィルタとは

表示フィルタとはキャプチャしたパケットを絞り込んで表示する機能です。
例えば「tcp」と指定するとTCPプロトコルだけのパケットを表示してくれます。

3. 「フィルタツールバー」で表示フィルタを設定する

フィルタツールバーはフィルタを入力する場所です。
入力して右側の⇒ボタンを押すとフィルタの条件に合うパケットのみが表示されます。

さらに便利な機能として、一度使ったフィルタを後から使う機能が2つ用意されています。
1つはドロップダウンリストです。バー右側の ボタンを押すと過去に入力したフィルタが表示されます。(図2参照)
もう1つはフィルタボタンです。 ボタンを押すとフィルタに名前を付けてツールバーに表示させることができますので指定してOKを押します。(図3参照)

フィルタツールバー
図1. フィルタツールバー

ドロップダウンリスト
図2. ドロップダウンリスト

フィルタボタン
図3. フィルタボタン

4. フィルタ条件の書き方

ここからはフィルタ条件の書き方を以下の6種類紹介します。

  1. プロトコル
  2. IPアドレス
  3. ポート番号
  4. バイト列
  5. 文字列
  6. データ長
  7. 演算子

1,2,3は特定の相手との通信に絞り込む方法です。マウス操作のみの指定も可能です。
4と5はパケットの中身の一部を指定して絞り込む方法です。
例えば画面に表示されている値が現場のセンサーと異なるとき、表示の値がセンサーから送られたものなのか否かの切り分けに使えます。
6はデータサイズを指定して絞り込む方法です。時々異常なサイズのデータが送られてくるときは規定のサイズより長いパケットに絞り込むことで異常なパケットの調査をすることができます。
7はフィルタ条件を複数組み合わせるときに使う演算子の一覧を示します。適切な条件が増えるほど表示を絞り込むことができます。
以下に書き方を説明します。

4.1 プロトコル

様々なプロトコルのパケットから必要なプロトコルのパケットだけを見る設定です。
「Wireshark活用法その2〜専用プロトコルを表示させる〜」でご紹介した専用プロトコルもここへ指定して絞り込みできます。

4.1.1 書式と設定例

フィルタ対象 書式 設定例 表示されるパケット
TCP tcp tcp TCPプロトコルのみ
UDP udp udp UDPプロトコルのみ
SOFTECH softech softech softechプロトコルのみ

表1. プロトコルフィルタの書式・設定例

4.1.2 プロトコル一覧からフィルタに設定する

キャプチャされたパケットに含まれるプロトコル一覧からフィルタを設定する方法です。
下図のようにメニュー[統計(S)]→[プロトコル階層]を選択し、キャプチャされたパケットに含まれるプロトコル一覧画面を表示します。
このなかからプロトコルを選択してフィルタに設定します。

プロトコル一覧でフィルタ指定(キャプチャされたプロトコル一覧から選択)
図4. プロトコル一覧でフィルタ指定(キャプチャされたプロトコル一覧から選択)

4.2 IPアドレス

特定IPアドレスのパケットに絞り込む設定です。

4.2.1 書式と設定例

フィルタ対象 書式 設定例 表示されるパケット
送信元 ip.src ip.src == 192.168.11.5 送信元が192.168.11.5のみ
宛先 ip.dst ip.dst == 192.168.11.1 宛先が192.168.11.1のみ
宛先
(ネットワーク単位)
ip.dst ip.dst ip.src == 192.168.11.0/24 192.168.11.0のネットワークのみ。具体的には192.168.11.1〜192.168.11.254。

表2. IPアドレスフィルタの書式・設定例

4.2.2 画面のIPアドレスをクリックしてフィルタに設定する

下図のように「Source」や「Destination」列のIPアドレスをマウス右クリックで指定してフィルタに設定できます。キーボード操作は不要です。

IPアドレスをクリックしてフィルタ指定
図5. IPアドレスをクリックしてフィルタ指定

4.3 ポート番号

特定ポートのパケットに絞り込む設定です。

4.3.1 書式と設定例

フィルタ対象 書式 設定例 表示されるパケット
TCPのパケット tcp.port tcp.port==44444 TCPの送信元または宛先のポートが44444のみ
UDPのパケット udp.port udp.port==54351 UDPの送信元または宛先のポートが54351のみ
TCPで送信元のポート番号 tcp.dstport tcp.dstport==44444 TCPの送信元ポートが44444のみ
UDPで宛先のポート番号 udp.srcport udp.srcport==54351 UDPで宛先のポートが54351のみ

表3. ポート番号フィルタの書式・設定例

4.3.2 画面のポート番号をクリックしてフィルタに設定する

下図のようにポート番号を右クリックしてフィルタ設定できます。

IPアドレスをクリックしてフィルタ指定
図6. IPアドレスをクリックしてフィルタ指定

4.4 バイト列指定

16進数でバイト列を指定して絞り込む設定です。
検索対象をフレーム全体、アプリケーションデータのみ、と指定できますので絞り込む精度を上げることができます。
なお、一致しても表示されない注意点がありますので下表に示します。

4.4.1 書式と設定例

書式 設定例 表示されるパケット
frame contains HH
(HHは16進数)
frame contains 0a.7a フレーム全体のどこかに[0a.7a]のバイト列が含まれているパケット
frame[m:n] contains HH
m=起点位置(0起算)
n=長さ(バイト)
frame[0:5] contains 0a.7a フレームの先頭から6バイトまでの間に[0a.7a] のバイト列が含まれているパケット
data[m-n] contains HH

m=起点位置(0起算)
n=終点位置(0起算)
data[0-9] contains 0a.0b.0c Dataフィールドの先頭から10バイトまでの間に[0a.0b.0c]の並びのバイト列が含まれているパケット

表4. バイト列フィルタの書式・設定例

注意:[]へ指定した分のデータがパケットにないとフィルタ対象外になります。
「data[0-9] contains 0a.0b.0c」ならdataフィールドが10バイト未満のパケットは一致するバイト列が含まれていても表示されません。

4.5 文字(列)指定

文字や文字列を指定して絞り込むための設定です。
探したい文字列データがわかっているときやドメイン名の検索などに使えます。
大文字・小文字は区別されません。

4.5.1 書式と設定例

書式 設定例 表示されるパケット
frame matches *** frame matches SFT フレームのどこかに“SFT”が含まれているパケット。
data matches *** data matches SFT Dataフィールドのどこかに“SFT”が含まれているパケット。
tcp matches *** data matches SFT TCPプロトコルのパケットを対象に “SFT”が含まれているパケット。
data[m:n] matches ***

m=起点位置(0起算)
n=長さ(バイト)
data[45:10] matches SFT Dataフィールドの46バイトから10バイト(56バイト)の間に“SFT”が含まれているパケット。
data[m-n] matches ***

m=起点位置(0起算)
n=終点位置(0起算)
data[45-55] matches SFT Dataフィールドの46バイトから56バイトに“SFT”が含まれているフレーム。

表5. 文字列フィルタの書式・設定例

4.6 データ長

フレームやデータフィールドのデータ長を条件に絞り込みできます。

4.6.1 書式と設定例

書式 設定例 設定例の説明
len(frame) len(frame) >= 101 フレーム長が101バイト以上のフレーム
len(data) !(len(data) == 47) データフィールドが47バイトのフレーム以外

表6. データ長フィルタの書式・設定例

4.7 演算子について

フィルタを組み合わせる、値を比較するのに演算子が使えます。
1種類の演算子には2つの表記法がありますがどちらも同じ意味です。

4.7.1 演算子一覧

論理演算子(複数フィルタを組み合わせて指定できる)
and, && →AND
or, || →OR
not ,  !  →NOT
比較演算子(値の比較に使う)
eq, == →同じ
ne, != →違う
gt, →より大きい
lt, →より小さい
ge, >= →以上
le, <= →以下

表7. 演算子一覧

4.7.2 指定の例

TCPプロトコルのパケットでフレーム長が78バイトより大きいパケット
→tcp && len(frame)>78

5. おわりに

今回は集めたパケットから解析に必要なパケットだけを表示させる表示フィルタの使い方をまとめました。
IPアドレスやポート番号で特定の相手とのやり取りを見るだけではなく、バイト列や文字列でデータを検索する使い方も出来るため、データがわかっている時や流れているデータを推測して検索することで再現性の低い不適合現象を調べるときに活用できます。
是非活用して頂きたいと思います。

なお、本レポートを書くにあたり普段使わないメニューや操作をしてマウス操作だけでフィルタを設定できるのは新しい発見でした。Wiresharkは効率よく使うために仕様をよく考えて作られているなと感じました。
今後も便利な機能を発見したら紹介したいと思います。

(N.K.)

[参考文献]
・Wireshark User’s Guide https://www.wireshark.org/docs/wsug_html_chunked/index.html
・Wireshark Wiki https://wiki.wireshark.org/

関連ページへのリンク

関連するソフテックだより

ページTOPへ