TCP NAT-Traversal / - 使用.NET进行打孔

时间:2012-08-06 13:44:19

标签: .net tcp connection nat nat-traversal

我编写了一个应用程序,必须将客户端直接相互连接并保持连接。在使用卓越技术(谷歌)进行一些研究后,我发现通过NAT-Punching或NAT-Traversal可以实现我所需要的。

大多数人似乎都是通过UDP使用NAT-Punching,但在我的情况下我需要用TCP做这个(这是事实,在有人问“为什么不是UDP?”之前)我找不到任何东西这个或至少是一个适当的教程的示例代码。所有我都能找到理论上的附属物,但没有套接字或TCP客户端(我更喜欢套接字。)。

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

UPnP不是一个选项,因为一些NAT由于安全原因而被停用。

1 个答案:

答案 0 :(得分:1)

除非您有权访问Raw套接字,否则无法通过TCP实现NAT冲孔。您需要对序列号和TTL值进行一些欺骗和操作才能使其正常工作。但是,在XP SP2之后的Windows所有版本的操作系统上,由于滥用原始套接字传播或执行DDoS的恶意软件的剪切量,不允许Windows Raw套接字。

您执行以下操作之一:

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