如何防止Windows在尝试通过Pcap.net连接到某人时发送RST数据包?

Ars*_*ray 6 sockets windows tcp pcap pcap.net

我正在尝试使用Pcap.Net打开tcp连接.

我发送以下包裹:

SYN数据包

服务器响应:

SYN-ACK

在此之后,Windows自己发送重置数据包:

RST

为什么会发生这种情况,如何阻止此行为?

我在Windows 7上这样做

Bas*_*sil 7

正如哈里斯先生所说,你可以使用WinDivert做你想做的事.例如,只需执行TCP握手,您可以编写如下内容:

// TCP handshake using WinDivert:
HANDLE handle = DivertOpen("inbound && tcp.SrcPort == 80 && tcp.Syn && tcp.Ack", 0, 0, 0);
DivertSend(handle, synPacket, sizeof(synPacket), dstAddr, NULL);
...
DivertRecv(handle, synAckPacket, sizeof(synAckPacket), &srcAddr, &length);
...
DivertSend(handle, ackPacket, sizeof(ackPacket), dstAddr, NULL);
...
Run Code Online (Sandbox Code Playgroud)

DivertRecv()函数在Windows TCP/IP堆栈处理之前将服务器响应重定向到用户空间.因此,不会生成任何讨厌的TCP RST.DivertSend()注入数据包.

这是WinDivert和WinPCAP之间的主要区别.后者仅仅是一个数据包嗅探器,而前者可以拦截/过滤/阻止流量.

WinDivert是用C语言编写的,因此您需要编写自己的.NET包装器.

(通常披露:WinDivert是我的项目).