0

我想制作自己的用户模式 ​​NAT 应用程序。

我有以下方案:

VM2[192.168. 8.2 ] ------ [192.168。8.1 ]Win2003[192.168. 9.1 ] ------ [192.168. 9.2 ]VM1

VM3[192.168. 8.3 ]_/

VM4[192.168. 8.4 ] _/

  1. 我在 8.1 和 9.1 接口上捕获 RAW IP 数据包。
  2. 一些来自 8.1 的数据包以这种方式传输到 9.1 接口:8.2->9.2 替换为 9.1->9.2
  3. 一些来自 9.1 的数据包以这种方式传输到 8.1 接口:9.2->9.1 替换为 9.2->8.2

我的应用程序根本没有绑定任何端口 - 它只是从接口捕获。

我看到了这样的场景:

  1. 8.2->9.2 翻译成 9.1->9.2 包含 SYN 标志
  2. 9.2->9.1 转换为 9.2->8.2 包含 SYN+ACK 标志
  3. 第 2 步包含 9.1->9.2 和 RST 标志...

Windows Server 2003 重置了我的 NATed 连接。我根本不想绑定任何端口。

我该如何处理?

更新:

user1202136,怎么可能:

使用 Windows 防火墙阻止来自用户空间 NAT 使用的端口的 RST 数据包。

无需编写自己的 NDIS 驱动程序?

4

1 回答 1

5

根据TCP规范,当在未绑定到任何进程的端口上接收到 ACK(或 SYN+ACK)时,始终会发送 RST。这样做是为了确保可以可靠地检测到节点崩溃。

在您的情况下,生成 RST 数据包的是 Windows Server 2003 中的 TCP/IP 实现。您应该阻止 ACK 到达 TCP 层或阻止 RST 到达线路。您可以尝试通过以下几种方式执行此操作:

  1. 在您的接口上禁用 TCP(但不是 IP)。
  2. 使用 Windows 防火墙阻止来自用户空间 NAT 使用的端口的 RST 数据包。
  3. (不确定这是否有效)使用 Windows 防火墙阻止所有 TCP 数据包到您的用户空间 NAT 使用的端口。恐怕这也会阻止数据包到达您的 RAW 套接字。
于 2012-03-29T14:55:53.217 回答