我正在尝试将所有 tcp 数据包重定向到我的本地代理以修改 html 内容(类似广告拦截器)。我想使用 WinDivert 但它似乎不起作用。
我像这样启动驱动程序:
handle = WinDivertOpen("outbound", WINDIVERT_LAYER_NETWORK, 0, 0);
然后在捕获和修改数据包时:
if (ip_header != NULL && tcp_header != NULL) {
//redirect to proxy
if (ntohs(tcp_header->DstPort) == 80)
{
UINT32 dst_addr = ip_header->DstAddr;
ip_header->DstAddr = ip_header->SrcAddr;
ip_header->SrcAddr = dst_addr;
tcp_header->DstPort = htons(PROXY);
addr.Direction = DIVERT_DIRECTION_INBOUND;
}
else if (ntohs(tcphdr->SrcPort) == PROXY)
{
// proxy to browser
uint32_t dst_addr = iphdr->DstAddr;
iphdr->DstAddr = iphdr->SrcAddr;
iphdr->SrcAddr = dst_addr;
tcphdr->SrcPort = htons(80);
addr.Direction = DIVERT_DIRECTION_INBOUND;
}
WinDivertHelperCalcChecksums(packet, packet_len, 0);
if (!WinDivertSend(handle, packet, packet_len , &addr, &send_len))
{
qWarning() << "warning: failed to reinject packet" << GetLastError() << send_len;
}
但是在代理端,我看不到任何传入的流量,并且页面没有在网络浏览器中加载。