gpt4 book ai didi

sockets - 如何编写没有任何绑定(bind)端口的用户态NAT?

转载 作者:可可西里 更新时间:2023-11-01 02:56:27 25 4
gpt4 key购买 nike

我想制作自己的用户模式 ​​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 接口(interface)上捕获 RAW IP 数据包。
  2. 一些来自 8.1 的数据包以这种方式传输到 9.1 接口(interface):8.2->9.2 替换为 9.1->9.2
  3. 一些来自 9.1 的数据包以这种方式传输到 8.1 接口(interface):9.2->9.1 替换为 9.2->8.2

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

我看到了这个场景:

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

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

我该如何处理?

更新:

user1202136,怎么可能:

Use Windows Firewall to block RST packets from the ports youruser-space NAT uses.

没有编写自己的 NDIS 驱动程序?

最佳答案

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

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

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

关于sockets - 如何编写没有任何绑定(bind)端口的用户态NAT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com