運用
Windowsネットワーク・プロトコルの理解と検証(第2回)

2.キャプチャ・フィルタの使い方

デジタルアドバンテージ
2003/08/19

 ネットワークのトラブルシューティングなどの目的で、ある特定のパケットだけをキャプチャしたいということがある。例えば、特定のTCPポートへの接続要求だけとか、特定のプロトコルの使用だけをキャプチャ・解析したいのだが、いつ、そのパケットが発生するのかが事前には分からないので、キャプチャするのが難しいといった場合である。いつ起こるか分からない現象をネットワーク・モニタでキャプチャするためには、いくつかの方法がある。非常に大きなバッファを用意して長時間キャプチャし続けるか、その特定のパターンを持つパケットだけをキャプチャするようにネットワーク・モニタを構成するか(「フィルタリング」という)、特定の事象が起こった時点でキャプチャを停止させるか(「トリガ」という)、の3つである。ここでは、フィルタリングの使い方について解説しておく。

 「フィルタリング」とは、ある特定の条件を満たすパケットだけをキャプチャしたり、キャプチャした多数のパケットの中から特定の条件を持つものだけを選択して表示させる機能である。ネットワーク・モニタでは、キャプチャのときと、パケットの解析・表示のときに、それぞれフィルタを設定することができる。ただし、キャプチャの際にはフィルタ処理でシステムにあまり負荷を与えるわけにはいかないので(複雑な処理を行ってCPUの負荷が高くなると、キャプチャの取りこぼしが発生する可能性があるから)、簡単なパターン・マッチングといった、非常に限定的な機能しか利用できない。これに対して、表示時のフィルタ処理は、特に処理時間の制約はほとんどないので、より複雑なフィルタ処理を行うことができる。

キャプチャ・フィルタの設定

 キャプチャ時にフィルタを設定するためには、キャプチャのツール・バー上にある、[キャプチャ フィルタの編集]ボタン(「じょうご」の形のボタン)をクリックする。

キャプチャ・フィルタの設定
キャプチャ時に設定できるフィルタの機能は限定されている。アドレスによるフィルタリングか、パターン・マッチングのみが利用できる。デフォルトでは、一切フィルタリングは行われず、すべてのパケットがキャプチャ対象となる。なお、Windows Server 2003のネットワーク・モニタではデフォルト時の表示方法が少し異なっているが(「INCLUDE *ANY <--> *ANY」の行が存在しない)、意味は同じである。
  ここが[AND]だと、以下のすべて条件が満たされた場合に条件が成立し、パケットがキャプチャされる。
  キャプチャするプロトコル(SAP/ETYPE)の設定。デフォルトでは「Any(すべて)」となっており、すべてのプロトコルをキャプチャする。この行をダブル・クリックするか、この行を選択して右の[編集]ボタンをクリックすると、フィルタ条件を設定することができる。SAPやETYPEは、イーサネットのヘッダ中にある、上位プロトコルのタイプを表すフィールドのことを指す。
  キャプチャするパケットのアドレスの指定。ここで指定されたアドレス情報を持つパケットだけをキャプチャする。この[AND]の行を選んで、右の[追加]をクリックすると、複数のアドレス情報を指定することができる。指定できる条件としては、ある2つのコンピュータ間でのパケットや、あるコンピュータから別のコンピュータへの通信、ブロードキャスト、指定されたアドレスを含まないもの、などがある。デフォルトの「INCLUDE *ANY <--> *ANY」は、任意の2つのコンピュータ間での通信、つまりすべての通信をキャプチャするという指定である。
  アドレスによるフィルタリング条件を変更する場合は、この行をダブル・クリックするか、この行を選択して、右側の[編集]ボタンをクリックする。
  パターン・マッチングを利用する場合は、これをクリックする。
  1度作成したフィルタ条件は、キャプチャ・フィルタ設定としてファイルに保存しておくことができる。
  既存のキャプチャ・フィルタをロードする場合は、これを利用する。

 キャプチャ・フィルタにおけるプロトコル指定では、あるプロトコルが含まれているか/いないか、のどちらかしか指定できない。例えばIPプロトコル(ETYPE=0x0800)を選択すれば、TCP/IPv4のプロトコルはすべてキャプチャするが、それ以外は一切キャプチャしなくなる。だが、TCPの80番のポートに向けた通信だけキャプチャしたいといった、(上位)プロトコル中の特定のフィールドやフラグに基づいたフィルタリングは行えない。このプロトコル指定では、イーサネットのタイプ・フィールド(ETYPEもしくはSAP)に基づいた、非常にラフな分類でしか、フィルタ条件を指定することができないのである。より細かくフィルタリングしたければ、以下の「パターン・マッチング」を利用する。なお、イーサネットのパケット(フレーム)の構造については、別連載の「基礎から学ぶWindowsネットワーク第11回―MACアドレスを解決するARPプロトコル」や「詳説 TCP/IPプロトコル第7回―3.イーサネットのフレーム・フォーマット」なども参照していただきたい。そこでも述べているように、イーサネットのパケットの構造としては、DIX形式とIEEE802.3形式の2つが存在する。例えば、TCP/IPはDIX形式を使うのが一般的であるが、NetBEUIやNetWareのIPX/SPXなどはIEEE802.3形式を使っている。「ETYPE」とは、DIX形式におけるプロトコル・タイプ・フィールドを指し、「SAP」とは、IEEE802.3形式におけるプロトコル・タイプ・フィールド(正確にはDSAPという、サービス・タイプを規定するためのフィールド)を指している。

 上のダイアログで、[パターン マッチ]の行をダブル・クリックすると、次のような画面が表示される。

パターン・マッチングの指定
これはTCPのSynフラグを持つパケットだけをキャプチャする例。TCPのフラグは、イーサネット・パケットの先頭から0x02f bytes目の位置にあり、その内容が0x02ならば、Sフラグだけがセットされた状態を意味する。
  一致させる内容。指定されたバイト位置のデータ内容がこの値ならば、パケットはキャプチャされる。
  内容をチェックする位置(オフセット)の指定。このあたりの数値は、プロトコルごとに異なるので、事前に調べておく必要がある。このためには、キャプチャしたパケットを表示させて、16進ダンプの内容を調べればよい。
  パケットの先頭バイトからの位置を指定する場合はこちらを指定する(これはデフォルト)。
  最下位のプロトコル(通常はイーサネット)のヘッダ部分を除外して、オフセットを数える場合はこちらを指定する。イーサネットやPPP、PPPoEなど、最下位のプロトコルがいろいろ変わる場合は、こちらを使って、最下位のプロトコルに依存しないようにオフセットを指定する。

 このダイアログは、パケット中の特定のバイト位置を指定して、そこに含まれる値がマッチするかどうかを指定するためのものである。この例では、パケットの先頭から(イーサネットの先頭から数えて)0x2f bytes目のバイトの値が「0x02」であるという条件を指定している。このオフセット位置には、TCPヘッダのフラグ・フィールドが置かれており、その値が2であるということは、「S」フラグだけがセットされた状態を表している。つまり、TCPプロトコルにおける接続開始要求のパケット(クライアントからサーバ側に最初に送られるTCPパケット)を表している。これにより、TCPの接続要求だけをキャプチャすることができる(プロトコル・フィールドには「IPプロトコル(ETYPE=0x0800)」という条件を設定しておくこと)。

 以上のように、キャプチャ時にフィルタを利用することもできるが、その使い方は煩雑で、制約も多いので、実際には、キャプチャ時にはフィルタなしですべてのパケットを取り込んでおき、解析のときにフィルタを利用するのがよいだろう。ただし、SMS版のネットワーク・モニタでは、デフォルトではほかのコンピュータ同士のトラフィックもすべてキャプチャしてしまうので、簡単なアドレス限定のフィルタをかけて、必要なパケットだけに限定してキャプチャするのもよい。

 なお、各プロトコルごとのヘッダの構成や、どのフィールドにどのような値が入っているかを調べるには、キャプチャしたパケットを詳細表示させて、16進ダンプの内容を調べればよいだろう。


 INDEX
  [運用]ネットワーク・プロトコルの理解と検証
  第2回 ネットワーク・モニタのフィルタ機能を使う
    1.ホスト名の編集
  2.キャプチャ・フィルタの使い方
    3.表示フィルタの使い方
 
 運用
 
更新履歴
 【2003/08/20】イーサネットのフレーム・タイプ(ETYPE/SAP)に関する情報を追加しました。


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間