编写 PATTERNMATCH 筛选器

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

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

若要评估 OR 语句,请组合两到四个模式与 PATTERNMatch1 (PatternMatch1 ||的 ANDEXP 结构匹配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 示例

此帧表示标准偏移量。

standard offset frame

代码片段实现为:

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

此帧描绘了针对 IPX) 的端口指定的偏移量 (。

port-specified offset frame

示例代码实现为:

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