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

标签 windows sockets tcp pcap pcap.net

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

我要发送以下包裹:

SYN packet

服务器响应:

SYN-ACK

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

RST

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

我在 Windows 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);
...

DivertRecv() 函数将服务器响应重定向到用户空间,然后再由 Windows TCP/IP 堆栈处理。因此不会生成讨厌的 TCP RST。 DivertSend() 注入(inject)数据包。

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

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

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

关于windows - 尝试通过 Pcap.net 连接到某人时如何防止 Windows 发送 RST 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13008340/

相关文章:

java - 通过套接字发送数据的格式

C++ 套接字无法正常工作

c# - 多个 tcpip 客户端连接到同一台服务器?

java - 是否可以获取有关任务管理器“进程”选项卡中某个项目的信息 (Windows)

python - 是否可以覆盖请求中的默认套接字选项?

c# - 检查用户是否是组的成员

c - 读取/写入在我的 TCP 代码中不起作用

c - 相当于 Windows 中的 TIOCOUTQ/SIOCOUTQ

c++ - 我如何(有没有办法)将 HRESULT 转换为系统特定的错误消息?

c++ - 在类中创建新线程(windows)