首页
学习
活动
专区
圈层
工具
发布

NAT实施
EN

Stack Overflow用户
提问于 2014-01-22 11:21:02
回答 1查看 860关注 0票数 1

我正在开发一个在Windows机器上执行NAT的应用程序,在Windows机器上执行NAT操作,而且我在理解所发生的事情上遇到了一些问题。

系统中有两个网络接口:

  • 一种物理网络接口(00:0c:29:bc:4c:11 192.168.133.130),用作网关00:50:56:eb:f5:15 - 192.168.133.2 (由VMware操作)
  • 我的应用程序使用的虚拟TAP网络接口(00:ff:15:08:ac:26 192.168.200.100),它用作网关03:03:03:03:03:03 :03- 192.168.200.1 (由我的应用程序操作)

我的应用程序是做什么的:

  • 响应ARP对192.168.200.1 (虚拟网关)的请求
  • 在TAP接口和物理接口之间为ICMP、UDP和TCP执行一对一的NAT。

为了演示发生了什么,我在测试期间附加了一个.cap文件,其中包含了Microsoft网络监视器3.4捕获的数据包(也可以用Wireshark打开)。测试包括建立与google.com:80的TCP连接。首先通过物理接口直接建立连接,以证明存在internet连接,然后通过TAP接口建立连接测试NAT。

从上到下的数据包分析:

  • 1- TCP SYN通过物理接口直接发送给google.com。
  • 2- TCP SYN通过物理if从google.com接收。
  • 3- TCP通过物理if发送到google.com
  • 4- TCP RST-ACK通过物理if发送到google.com以关闭连接。

很好,我们有互联网连接。现在,我将默认网关改为由我的应用程序操作的虚拟路由器(192.168.200.1)

  • 5- Windows注意到默认网关更改为192.168.200.1,并将ARP请求发送到192.168.200.1。
  • 6-我的应用程序回应说192.168.200.1是在03:03:03:03:03:03 :03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:
  • 7- TCP通过TAP接口(192.168.200.100)发送给google.com到虚拟路由器(192.168.200.1)
  • 8-我的应用程序对数据包执行NAT (源和目标MAC地址相应更改,IP源地址更改为192.168.133.130),并在物理接口上将数据包发送到00:50:56:eb:f5:15 (192.168.133.2)
  • 9-没有收到响应,因此如果
  • 10 -我的应用程序以同样的方式执行NAT,并在物理上发送数据包,如果
  • 再次没有回应,所以第三次尝试
  • 12 -我的应用程序以同样的方式执行NAT

经过NAT后,物理接口上发送的数据包与第一次测试中发送的数据包几乎完全相同,网络拓扑结构没有任何变化。为什么第二个TCP连接失败?这没有任何意义。

该程序正在使用WinPcap。如果感兴趣的话,这里就是代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 18:41:28

我已经检查了捕获的文件,我没有看到在TCP级别和MAC层报头上有任何不同(在继任SYN和失败的SYN之间)。我只看到在成功的SYN中,IP报头校验和是0,可能是因为计算被卸载到接口卡。在不成功的SYN中,根据Wireshark算法计算并修正校验和。如果校验和是正确的,那么这不应该是一个问题。这是我在IP层看到的唯一不同之处。

我会说,要么是谷歌,要么是中间的某个人正在过滤你的下一条信息。

现在,我感到奇怪的是,为什么当应用程序关闭流索引0中的套接字时,它会发送一个RST而不是FIN。也许某个节点试图从您的IP地址防止RST攻击?有没有办法关闭插座并发送FIN,ACK消息?在运行第二次测试之前,您能再等一段时间吗?

其他奇怪之处在于,在第二个测试中,连接192.168.200.100--您的应用程序(03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:03:-Google使用相同的源端口49181 )。这似乎不是一个问题,因为这是两台不同的机器,但我会调查那里的最后一个资源。不过,我不认为这是个问题。

编辑:

在您解释了TCP段未被修改后,我意识到问题在于您没有重新计算TCP校验和!两个SYN消息(框架7和8)具有相同的TCP校验和。如果IP地址更改,则TCP校验和必须更改。

顺便说一句,这是一个非常有趣的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21281513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档