WinDivert — Изменить данные пакета / содержимое полезной нагрузки

Я видел примеры и пример кода WinDivert, который используется для изменения свойств пакетов, например, их адресов назначения.

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

Вот код, который у меня есть:

HANDLE handle;          // WinDivert handle
WINDIVERT_ADDRESS addr; // Packet address
char packet[MAXBUF];    // Packet buffer
UINT packetLen;

handle = WinDivertOpen("...", 0, 0, 0);   // Open some filter
if (handle == INVALID_HANDLE_VALUE)
{
// Handle error
exit(1);
}

// Main capture-modify-inject loop:
while (TRUE)
{
if (!WinDivertRecv(handle, packet, sizeof(packet), &addr, &packetLen))
{
// Handle recv error
continue;
}

// Modify packet.

if (!WinDivertSend(handle, packet, packetLen, &addr, NULL))
{
// Handle send error
continue;
}
}

На // Модифицировать пакет. Шаг, мне нужно выполнить модификацию полезной нагрузки. В частности, я хочу либо заменить, либо полностью перезаписать данные новой строкой.

В документации по WinDivert единственное, что я мог найти в работе с пакетными данными, это метод анализа пакетов:

BOOL WinDivertHelperParsePacket(
__in PVOID pPacket,
__in UINT packetLen,
__out_opt PWINDIVERT_IPHDR *ppIpHdr,
__out_opt PWINDIVERT_IPV6HDR *ppIpv6Hdr,
__out_opt PWINDIVERT_ICMPHDR *ppIcmpHdr,
__out_opt PWINDIVERT_ICMPV6HDR *ppIcmpv6Hdr,
__out_opt PWINDIVERT_TCPHDR *ppTcpHdr,
__out_opt PWINDIVERT_UDPHDR *ppUdpHdr,
__out_opt PVOID *ppData,
__out_opt UINT *pDataLen
);

ppData: выходной указатель на данные / данные пакета.

Однако я не уверен, что это позволит мне изменить данные (возможно, так и будет?), Потому что кажется, что это позволит мне только получать данные пакета для вывода.

Так как же мне отредактировать полезную нагрузку?

0

Решение

https://github.com/basil00/Divert/issues/16
Видео и источник пользователя windivert.

0

Другие решения

Если кто-то в будущем ищет чрезвычайно простой способ сделать это, есть оболочка Python для WinDivert под названием «pydivert», которую я использовал. Это очень просто.

Ссылка на сайт: https://github.com/ffalcinelli/pydivert

0

По вопросам рекламы [email protected]