WinDivert - 修改数据包数据/有效负载内容

时间:2017-06-27 05:47:30

标签: c++ c payload man-in-the-middle packet-injection

我已经看到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:输出指向数据包数据/有效负载的指针。

但是我不确定这是否会让我修改数据(可能会这样做?)因为它似乎只能让我检索数据包输出。

那么我将如何编辑有效载荷呢?

2 个答案:

答案 0 :(得分:0)

https://github.com/basil00/Divert/issues/16 视频和源用户windivert。

答案 1 :(得分:0)

如果将来有人正在寻找一种非常简单的方法来实现这一点,那么我使用的是WinDivert的Python包装器,名为“pydivert”。这很简单。

链接:https://github.com/ffalcinelli/pydivert