次の方法で共有


PATTERNMATCH フィルターの記述

パターン一致フィルターは、特定のオフセットで特定のパターンを持つフレームを受け入れるようにドライバーに通知します。 最大 4 つの詳細なパターン一致を指定できます。これは、Network Monitor ドライバー評価用の論理 AND ステートメントまたは OR ステートメントで組み合わせることができます。

パターン一致を実装するには、次のネットワーク モニター構造を使用します。

OR ステートメントを評価するには、ANDEXP 構造体と一致する 2 ~ 4 個のパターンを結合します (PatternMatch1 ||PatternMatch2 ||PatternMatch3)。 AND ステートメントを評価するには、1 から 4 つの ANDEXP 構造体と EXPRESSION 構造体 (AndExp1 && AndExp2) を組み合わせます。

パターン 一致の定義

単一のパターン一致は、 PATTERNMATCH 構造体によって定義されます。 個々の一致は、2 つの方法のいずれかで動作できます。

通常、ドライバーはオフセット基準 (OFFSET_BASIS_RELATIVE_TO_FRAME、OFFSET_BASIS_RELATIVE_TO_EFFECTIVE_PROTOCOL、OFFSET_BASIS_RELATIVE_TO_IPX、またはOFFSET_BASIS_RELATIVE_TO_IP) を受け取り、そこでカウントを開始します。 ドライバーはそこからオフセット バイトをカウントし、見つけたデータを PatternToMatch の最初の長さバイトと照合します。 同じで、PATTERN_MATCH_FLAGS_NOT フラグが設定されていない場合、このパターンは渡されます。 それらが異なり、PATTERN_MATCH_FLAGS_NOTが設定されている場合は、パターンが渡されます。 それ以外の場合、このパターンは失敗します。

または:

PATTERN_MATCH_FLAGS_PORT_SPECIFIED フラグが設定され、基準が OFFSET_BASIS_RELATIVE_TO_IPX または OFFSET_BASIS_RELATIVE_TO_IP に設定されている場合、比較はより複雑になります。 最初に、ドライバーはオフセット基準プロトコルが存在することを確認し、次に、ドライバーは、指定したポートがフレーム内のポートと一致することを確認します。 最後に、ドライバーは PatternToMatch メンバーが以前と一致することを確認します。オフセットは IP または IPX の末尾からのものであることを除きます。 基準がこれら 2 つのうちの 1 つでない場合、PATTERN_MATCH_FLAGS_PORT_SPECIFIED フラグは無視され、パターンは上記のように評価されることに注意してください。

1 つのパターン一致を評価するには、 EXPRESSION 構造体に、1 つのパターン 一致を含む AndExp メンバーが 1 つ必要です。

パターン 一致フィルターを構築するには、 PATTERNMATCH 構造体を作成し、 それらを EXPRESSION および ANDEXP 構造体と論理的に組み合わせる必要があります。

PATTERNMATCH フィルターを作成するには

  1. ANDEXP 構造体で、配列にパターン一致を設定します。
  2. EXPRESSION 構造体に AndExp メンバーの配列を設定します。
  3. キャプチャ フィルターに対して合計 4 つのパターン一致を超えないでください。
  4. PATTERNMATCH 構造体で、フラグの種類を選択します。
  5. オフセット基準を選択します。
  6. ポート値を列挙します。
  7. オフセット値を定義します。
  8. パターンの長さを定義します。
  9. パターン値を列挙します。

PATTERNMATCH の例

このフレームは標準オフセットを表します。

標準オフセット フレーム

コード フラグメントは、次のように実装されます。

Basis  ->   IP
Offset ->   4 (bytes)
Length ->   2 (bytes)
PatternToMatch[ ] = {x00, x00}

このフレームは、(IPX に対して) ポート指定のオフセットを示しています。

ポート指定オフセット フレーム

コード例は、次のように実装されます。

Port   ->   544
Basis  ->   IPX
Offset ->   2 (bytes)
Length ->   2 (bytes)
PatternToMatch[ ] = {x00, x00}