2012-08-06 42 views
1

我写了一个应用程序,它将客户端直接相互连接并保持连接至关重要。在使用卓越技术(谷歌)做了一些研究之后,我发现通过执行NAT-Punching或NAT-Traversal可以实现我需要的功能。TCP NAT穿透/ - 用.NET打孔

大多数人似乎使用NAT穿孔UDP,但在我的情况下,我需要与TCP(这是一个事实,之前有人问“为什么不是UDP?”),我找不到任何示例代码或至少一个适当的教程。我可以找到理论附件的位置,但与Sockets或TCPClient无关(我更喜欢套接字)。

有人可以请我链接一些示例代码,我可以连接两个客户端后面的NAT或链接到一个完整的教程与示例代码? 我知道这个目标很难在.NET中完成(我使用VB.NET,但我也能够阅读和理解C#),但它应该是可能的。

UPnP不是一个选项,因为一些NAT由于安全原因而被取消激活。

+0

有些东西你可以用原始套接字来做,但我不想写它。 – CodesInChaos 2012-08-06 15:34:02

+0

所以我想我必须找出一些路由.... k thx! – Husky110 2012-08-06 17:39:56

回答

1

除非您有权访问原始套接字,否则NAT穿孔不能通过TCP完成。您需要对序列号和TTL值进行一些技巧性的操作,以使其工作。但是由于恶意软件的剪切量正在滥用原始套接字来传播或执行DDoS,所以在Windows XP之后的Windows版本的所有版本的操作系统上,Windows Raw Sockets都是不允许的。

您执行下列操作之一:

  1. 使用UDP,把代码重新请求丢失的包或重构代码来处理丢失的数据包,如果这是可以接受的。
  2. 使用服务器作为中间人流过
  3. 其中一端必须能够制作原始插座。
+0

打孔技术不需要原始插座。我用winSock成功完成了它。当然,你需要一个中间人服务器,这两个服务器可以同时连接两个对等体。 – 2015-01-20 15:34:33