Я видел примеры и пример кода 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: выходной указатель на данные / данные пакета.
Однако я не уверен, что это позволит мне изменить данные (возможно, так и будет?), Потому что кажется, что это позволит мне только получать данные пакета для вывода.
Так как же мне отредактировать полезную нагрузку?
https://github.com/basil00/Divert/issues/16
Видео и источник пользователя windivert.
Если кто-то в будущем ищет чрезвычайно простой способ сделать это, есть оболочка Python для WinDivert под названием «pydivert», которую я использовал. Это очень просто.
Ссылка на сайт: https://github.com/ffalcinelli/pydivert