测试NAT突破代码

时间:2009-10-26 17:53:42

标签: c# networking nat

我非常感兴趣,至少尝试为我的高级项目实施NAT突破。 (我正在做一个网络API)。 这甚至不是我的项目的要求,只是我的兴趣。 我知道它是如何工作的基础知识,如果我错了,请纠正我: 两个客户端连接到不在NAT后面的服务器,这个服务器知道这两个客户端的IP,告诉客户端同时连接到彼此。因此,“突破”。

这似乎不是非常简单或非常难以编码。 但是,我坚持的部分是对此的测试。有一个合理的设置我只能使用一个路由器/一个NAT和我的三台可用计算机吗?

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

让我看看我是否直截了当。您有两个客户端,它们都支持NAT,而服务器则不支持。两个客户端都连接到服务器,并被告知另一个客户端的公共IP地址。由于每个都有一个目的地,它们与服务器断开连接并通过各自的NAT盒直接相互连接。那是你的想法吗?如果是这样,我可能会有一些坏消息。

为了使其完全正常工作,您必须在每个NAT配置中设置专用端口,以将至少一个外部端口转发到预定义的内部IP地址/端口号。在通用NAT设置中,NAT将捕获传出连接请求,这将打开临时外部端口。该外部端口号仅用于与该一个始发地址和端口的通信。当连接关闭时,该外部端口消失,稍后将重新分配给另一个连接。因此,如果两个客户端都与服务器通信然后断开连接,则服务器发送它们的信息现在无效。

假设你已经以某种方式解决了这个问题,将两个客户端连接到NAT的“内部”端和服务器PC连接到“外部”端应该相当容易。然后你必须希望你的NAT盒足够聪明,可以将数据包从一个本地外部端口循环回另一个端口。我确信netfiler可以这样配置,但我怀疑家庭互联网“路由器”(例如,Linksys,NetGear等)会做到这一点。

答案 1 :(得分:1)

关于NAT破解的代码/理论,我不能提供建议,但我可以就建立测试环境提出一些建议。

您可以下载m0n0wall的副本并在虚拟PC映像内运行(两者都是免费的)。这将为您提供第二台路由器,无需购买任何其他硬件。使用这个额外的路由器,您可以为两个客户端创建一个单独的子网。

另一个更容易掌握的选择就是拿起第二个路由器,你可以得到一个相当便宜的好。

然后按原样设置现有路由器和服务器,即192.168.1.x / 24子网;然后将第二个路由器(m0n0wall /硬件路由器)设置为192.168.2.x / 24子网,并将第二个路由器的“Internet”端口插入第一个路由器上的“PC”端口之一。然后将两个客户端插入第二个路由器。

(我意识到这有点令人困惑,如果你不能按照我的意思发表评论)