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 フィルターを作成するには
- ANDEXP 構造体で、配列にパターン一致を設定します。
- EXPRESSION 構造体に AndExp メンバーの配列を設定します。
- キャプチャ フィルターに対して合計 4 つのパターン一致を超えないでください。
- PATTERNMATCH 構造体で、フラグの種類を選択します。
- オフセット基準を選択します。
- ポート値を列挙します。
- オフセット値を定義します。
- パターンの長さを定義します。
- パターン値を列挙します。
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}