我编写了一个应用程序,必须将客户端直接相互连接并保持连接。在使用卓越技术(谷歌)进行一些研究后,我发现通过NAT-Punching或NAT-Traversal可以实现我所需要的。
大多数人似乎都是通过UDP使用NAT-Punching,但在我的情况下我需要用TCP做这个(这是事实,在有人问“为什么不是UDP?”之前)我找不到任何东西这个或至少是一个适当的教程的示例代码。所有我都能找到理论上的附属物,但没有套接字或TCP客户端(我更喜欢套接字。)。
有人可以给我链接一些示例代码,我可以连接两个NAT后面的客户端或链接到带有示例代码的完整教程吗? 我知道这个目标在.NET中很难做到(我使用VB.NET但我也能够阅读和理解C#),但它应该是可能的。
UPnP不是一个选项,因为一些NAT由于安全原因而被停用。
答案 0 :(得分:1)
除非您有权访问Raw套接字,否则无法通过TCP实现NAT冲孔。您需要对序列号和TTL值进行一些欺骗和操作才能使其正常工作。但是,在XP SP2之后的Windows所有版本的操作系统上,由于滥用原始套接字传播或执行DDoS的恶意软件的剪切量,不允许Windows Raw套接字。
您执行以下操作之一: