Реализация AttachProperties

Сетевой монитор вызывает функцию AttachProperties для сопоставления свойств, существующих в фрагменте распознанных данных. Функция AttachProperties сопоставляет свойства с определенным расположением.

Сетевой монитор использует следующий процесс для анализа данных в кадре.

  • Во-первых, сетевой монитор вызывает RecognizeFrame для распознавания всех протоколов, существующих в кадре.
  • Затем сетевой монитор вызывает AttachProperties для каждого средства синтаксического анализа, который распознает фрагмент данных.

Когда сетевой монитор вызывает функцию AttachProperties для распознанных данных, вызываемое средство синтаксического анализа должно проанализировать данные, а затем сопоставить каждое существующее свойство с расположением в распознанных данных. Средство синтаксического анализа определяет, какие свойства существуют, и где каждое свойство находится в данных. На следующем рисунке показаны данные, распознанные синтаксическим анализатором.

данные, распознанные синтаксическим анализатором

Во время реализации AttachPropertiesнеобходимо вызвать одну из следующих функций для каждого свойства, существующего в кадре данных.

  • Вызовите функцию AttachPropertyInstanceEx, если требуется изменить данные свойства в кадре.
  • Вызовите функцию AttachPropertyInstance, если не хотите изменять данные свойства в кадре.

Заметка

Рекомендуется использовать данные, как они существуют в момент захвата.

 

Следующая процедура определяет шаги, необходимые для реализации AttachProperties.

Чтобы реализовать функцию AttachProperties

  1. Определите, какие свойства существуют, а также расположение свойства в данных.
  2. Вызовите AttachPropertyInstanceEx для каждого свойства со значением, которое требуется изменить.
  3. Вызовите AttachPropertyInstance для каждого свойства со значением, которое не требуется изменять. Как правило, это единственная функция, которую необходимо вызвать.

Ниже приведена базовая реализация AttachProperties. Помните, что в примере нет кода, чтобы определить, какие свойства существуют, или код для поиска свойств.

#include <windows.h>

LPBYTE BHAPI MyProtocolAttachProperties( HFRAME   hFrame,
                                         LPBYTE   pMacFrame,
                                         LPBYTE   pBLRPLATEFrame,
                                         DWORD    MacType,
                                         DWORD    BytesLeft,
                                         HPROTOCOL  hPreviousProtocol,
                                         DWORD    nPrevProtocolOffset,
                                         DWORD    InstData)
{
  PBLRPLATEHDR pBLRPLATEHdr = (PBLRPLATEHDR)pBLRPLATEFrame;

  // Attach summary property.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_SUMMARY].hProperty,
                          (WORD)BytesLeft,
                          (LPBYTE)pBLRPLATEFrame,
                          0,        // No Help file.
                          0,        // Indent level.
                          0);      // Data flag.

  // Attach signature property.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_SIGNATURE].hProperty,
                          sizeof(DWORD),
                          &(pBLRPLATEHdr->Signature),
                          0,        // No Help file.
                          1,        // Indent level.
                          0);        // Data flag.


  // Attach opcode.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_OPCODE].hProperty,
                          sizeof(WORD),
                          &(pBLRPLATEHdr->Opcode),
                          0,        // No Help file.
                          1,        // Indent level.
                          0);        // Data flag.

  // Attach flags summary.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_FLAGS_SUMMARY].hProperty,
                          sizeof(BYTE),
                          &(pBLRPLATEHdr->Flags),
                          0,        // No Help file.
                          1,        // Indent level.
                          0);       // Data flag.

// Attach flags decode.
  AttachPropertyInstance( hFrame,
                          BLRPLATEPropertyTable[BLRPLATE_FLAGS_FLAGS].hProperty,
                          sizeof(BYTE),
                          &(pBLRPLATEHdr->Flags),
                          0,        // No Help file.
                          2,        // Indent level.
                          0);       // Data flag.

  RETURN null;

}