Платформа фильтрации Windows — где полезная нагрузка моего пакета?

Я модифицировал пример «проверить» WFP (в комплекте с WinDDK), чтобы иметь возможность анализировать полезную нагрузку всех входящих TCP-пакетов (с указанного IP-адреса) для определенных строк. (Я уже модифицировал «проверку», чтобы фильтр перехватывал только TCP-пакеты)

До сих пор мои модификации касались classifyFn TLInspectTransportClassify, как показано ниже. Моя цель — получить доступ к полезной нагрузке каждого перехваченного TCP-пакета.

FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket = (FWPS_STREAM_CALLOUT_IO_PACKET*)layerData;
FWPS_STREAM_DATA* streamData;
SIZE_T streamLength;
BYTE* stream = NULL;
SIZE_T bytesCopied = 0;

[...]

if(ioPacket == NULL) {
   DbgPrint("ioPacket == NULL\n");
   return STATUS_INSUFFICIENT_RESOURCES;
}
streamData = ioPacket->streamData;

if(!streamData) {     // why is this always NULL?  shouldn't our payload be here?
   DbgPrint("streamData == NULL: no data\n");   
   classifyOut->actionType = FWP_ACTION_PERMIT;
     classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE;
     goto Exit;
}

DbgPrint("tcp packet has some data\n");

streamLength = streamData->dataLength;

stream =  ExAllocatePoolWithTag(NonPagedPool,
                               streamLength,
                               'yftN');

if (!stream)
  return STATUS_INSUFFICIENT_RESOURCES;

RtlZeroMemory(stream,streamLength);
FwpsCopyStreamDataToBuffer0(
  streamData,
  stream,
  streamLength,
  &bytesCopied);

// should now have our tcp payload in 'stream' buffer(?)

DbgPrint("reached parsing code\n");

[...]

Насколько я понимаю, после объявления ioPacket, как указано выше, ioPacket->streamData должен содержать полезную нагрузку пакета. Однако для меня ioPacket->streamData ВСЕГДА NULL. Как получить полезную нагрузку пакета? Я делаю что-то неправильно.

Заранее спасибо.


person user628158    schedule 22.02.2011    source источник


Ответы (1)


'TLInspectTransportClassify' находится на TRANSPORT_LAYER, где layerData следует преобразовать в NET_BUFFER_LIST.

FWPS_STREAM_CALLOUT_IO_PACKET для FWPM_LAYER_STREAM_V4/FWPM_LAYER_STREAM_V6

См. MSDN classifyFn0. http://msdn.microsoft.com/en-us/library/ff544890(VS.85).aspx

Идентификаторы уровня фильтрации управления http://msdn.microsoft.com/en-us/library/ff557101(VS.85).aspx

person Peter    schedule 29.04.2011