2017-06-27 1369 views
0

我见过例如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

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

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