编写 PATTERNMATCH 筛选器

模式匹配筛选器通知驱动程序接受具有特定模式的帧在特定偏移量处。 最多可以指定四个详细模式匹配项,可在网络监视器驱动程序评估的逻辑 AND 或 OR 语句中组合这些匹配项。

若要实现模式匹配,请使用以下网络监视器结构:

若要评估 OR 语句,请将 2 到 4 个模式与 ANDEXP 结构匹配 (PatternMatch1 ||PatternMatch2 ||PatternMatch3) 。 若要计算 AND 语句,请将一到四个 ANDEXP 结构和 EXPRESSION 结构组合 (AndExp1 && AndExp2) 。

模式匹配定义

单个模式匹配由 PATTERNMATCH 结构定义。 单个匹配可以通过以下两种方式之一运行。

通常,驱动程序将采用偏移基 (,可以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 的末尾开始。 请注意,如果基数不是这两者之一,则将忽略PATTERN_MATCH_FLAGS_PORT_SPECIFIED标志,并且模式将按上述方式进行评估。

若要计算单个模式匹配项, EXPRESSION 结构必须具有一个包含单个模式匹配项 的 AndExp 成员。

构建模式匹配筛选器涉及创建 PATTERNMATCH 结构,并在逻辑上将它们与 EXPRESSIONANDEXP 结构组合在一起。

编写 PATTERNMATCH 筛选器

  1. ANDEXP 结构中,使用模式匹配项填充数组。
  2. 使用 AndExp 成员数组填充 EXPRESSION 结构。
  3. 请勿超过捕获筛选器的总共四个模式匹配项。
  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}