我见过例如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:输出指针数据包的数据/有效载荷。
但是,我不确定这是否会让我修改数据(也许它呢?),因为它似乎只会让我检索输出的数据包数据。
那么我将如何去编辑有效载荷?