gpt4 book ai didi

.net - TCP NAT-Traversal/- 使用 .NET 打洞

转载 作者:可可西里 更新时间:2023-11-01 02:52:44 28 4
gpt4 key购买 nike

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

大多数人似乎通过 UDP 使用 NAT-Punching,但就我而言,我需要使用 TCP(这是事实,在有人问“为什么不使用 UDP?”之前),但我找不到任何这个或至少一个适当的教程的示例代码。所有我能找到的理论附件在哪里,但没有关于套接字或 TCPClient 的东西(我更喜欢套接字。)。

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

UPnP 不是一个选项,因为某些 NAT 出于安全原因将其停用。

最佳答案

除非您有权访问原始套接字,否则无法通过 TCP 完成 NAT 穿孔。您需要对序列号和 TTL 值进行一些技巧和操作才能使其正常工作。但是,在 Windows 中,原始套接字在 XP SP2 之后所有版本的 Windows 上的非服务器版本操作系统上是不允许的,因为大量恶意软件滥用原始套接字来传播或执行 DDoS。

您执行以下操作之一:

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

关于.net - TCP NAT-Traversal/- 使用 .NET 打洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11829527/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com