PATTERNMATCH 필터 작성
패턴 일치 필터는 특정 오프셋에 특정 패턴이 있는 프레임을 허용하도록 드라이버에 알깁니다. 네트워크 모니터 드라이버 평가를 위해 논리 AND 또는 OR 문으로 결합할 수 있는 최대 4개의 자세한 패턴 일치를 지정할 수 있습니다.
패턴 일치를 구현하려면 다음 네트워크 모니터 구조를 사용합니다.
OR 문을 평가하려면 ANDEXP 구조체와 일치하는 2~4개의 패턴을 결합합니다(PatternMatch1 || PatternMatch2 || PatternMatch3). AND 문을 평가하려면 1~4개의 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 설정되면 비교가 더 복잡해집니다. 먼저 드라이버는 오프셋 기본 프로토콜이 있는지 확인한 다음 지정된 포트가 프레임의 포트와 일치하는지 확인합니다. 마지막으로 드라이버는 오프셋이 IP 또는 IPX의 끝에서 온 것을 제외하고 PatternToMatch 멤버가 이전과 일치하도록 합니다. 이 두 가지 중 하나가 아닌 경우 PATTERN_MATCH_FLAGS_PORT_SPECIFIED 플래그가 무시되고 패턴이 위와 같이 평가됩니다.
단일 패턴 일치를 평가하려면 EXPRESSION 구조에 단일 패턴 일치를 포함하는 하나의 AndExp 멤버가 있어야 합니다.
패턴 일치 필터를 빌드하려면 PATTERNMATCH 구조를 만들고 EXPRESSION 및 ANDEXP 구조체와 논리적으로 결합해야 합니다.
PATTERNMATCH 필터를 작성하려면
- ANDEXP 구조에서 배열을 패턴 일치 항목으로 채웁다.
- ANDExp 멤버의 배열로 EXPRESSION 구조를 채웁다.
- 캡처 필터에 대해 총 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}