Поделиться через


Написание фильтра PATTERNMATCH

Фильтр сопоставления шаблонов уведомляет драйвер принять кадры с определенным смещением. Можно указать не более четырех подробных совпадений шаблонов, которые можно объединить в логических инструкциях AND или OR для оценки драйвера сетевого монитора.

Чтобы реализовать совпадения шаблонов, используйте следующие структуры сетевого монитора:

Чтобы оценить оператор OR , объединить два до четырех шаблонов соответствует структуре 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 и логически объединение их со структурами EXPRESSION и ANDEXP.

Запись фильтра PATTERNMATCH

  1. В структуре ANDEXP заполните массив совпадениями шаблонов.
  2. Заполните структуру EXPRESSION массивом элементов AndExp .
  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}