我正在尝试使用Pcap.Net打开tcp连接.
我发送以下包裹:
服务器响应:
在此之后,@L_404_0@自己发送重置数据包:
为什么会发生这种情况,如何阻止此行为?
我在Windows 7上这样做
正如哈里斯先生所说,你可以用
WinDivert做你想做的事.例如.只需执行TCP握手,您可以编写如下内容:
// TCP handshake using WinDivert: HANDLE handle = DivertOpen("inbound && tcp.SrcPort == 80 && tcp.Syn && tcp.Ack",0); DivertSend(handle,synPacket,sizeof(synPacket),dstAddr,NULL); ... DivertRecv(handle,synAckPacket,sizeof(synAckPacket),&srcAddr,&length); ... DivertSend(handle,ackPacket,sizeof(ackPacket),NULL); ...
DivertRecv()函数在Windows TCP / IP堆栈处理之前将服务器响应重定向到用户空间.因此,不会生成任何讨厌的TCP RST. DivertSend()注入数据包.
这是WinDivert和WinPCAP之间的主要区别.后者仅仅是一个数据包嗅探器,而前者可以拦截/过滤/阻止流量.
WinDivert是用C语言编写的,因此您需要编写自己的.NET包装器.
(通常披露:WinDivert是我的项目).