当前位置: 首页 > 知识库问答 >
问题:

实现C#Tcp打孔时出错-无法在NAT后连接

吕自怡
2023-03-14

2)服务器获取消息并进行解析

3)第三,我在服务器端获得了remoteEndPoint Ip地址和端口号(=NAT路由器Ip和端口

4)第4次尝试连接到套接字(NAT Ip、NAT端口)并从服务器=>means=我已将套接字连接到NAT路由器,希望路由器将我的消息发送到NAT后的客户端

谁能帮我解决这个问题。

提前道谢。

共有1个答案

耿俊
2023-03-14

你的问题可能就在这里:

并希望路由器将我的消息发送到nat后的客户端

Nat遍历(如穿孔)取决于特定Nat的实现。假设NAT看到来自客户端端口17000的数据包,并将其映射到某个NAT端口X,那么它将从端口X将所有数据包转发回客户端。不是所有的NAT都这么做的!

受限NAT:一种NAT,其中NAT转换表项存储内部地址和端口号与外部地址和端口号之间的映射,用于特定源地址或特定源地址和端口号。来自未知外部地址或端口号的与外部目的地址和端口号的NAT转换表条目匹配的入站数据包将被静默丢弃。

对称NAT:将相同的内部地址和端口号映射到不同的外部地址和端口的NAT,具体取决于外部目的地址(对于出站流量)。

您的打孔方法将适用于锥形和地址受限的NAT。不适用对称NAT的端口限制NAT(您的情况可能就是NAT)。

 类似资料:
  • 大多数人似乎都通过UDP使用NAT穿孔,但在我的例子中,我需要使用TCP(这是事实,在有人问“为什么不使用UDP?”之前)我找不到任何示例代码或至少一个适当的教程。我能找到的都是理论上的附属物,但没有使用套接字或TCPClients(我更喜欢套接字)。 有人能给我链接一些示例代码吗?我可以用这些示例代码连接两个NAT后的客户端,或者用示例代码链接到完整的教程?我知道在.NET中很难实现这个目标(我

  • null 如果或都不能通过TCP启动连接,我将如何管理这种情况?(使用UDP?) 如果在这种情况下TCP打孔不起作用,我可以发送UDP包吗?(UDP在传递方面是不可靠的,所以发送多个重复的数据包能保证传递吗?) 我通常知道穿孔是如何工作的,必须将两个客户端的endpoint相互提供给对方,以便它们都可以尝试发起连接。而且我也很了解纳特的 对于TCP漏洞打孔无效的较少见的情况,可以充当代理

  • 问题内容: 我试图在Java中实现UDP-Holepunching的简单草图以测试其概念,并稍后在我的C / C ++应用程序中使用它。 从Wikipedia来说,我的理解是:A和B是未定义网络结构背后的客户端,C是著名的公共可访问服务器。 A将数据包发送到服务器C,服务器保存其IP地址和端口。C将获得A的NAT的公共IP地址。这样做,A前面的NAT将创建一条路由,该路由会将此端口上的所有数据包传

  • 问题在下面。这是我当前的测试代码,它没有成功。 如何做TCP打孔?我正在使用远程服务器进行测试。我正在运行。我已经为端口80设置了路由器,所以它不需要打孔。我的代码有关联。现在我尝试其他端口,但我不知道如何打孔。 我所做的是(C#代码) 如何做TCP打孔?

  • 我已经尝试TCP打孔一段时间了,论坛似乎对基于TCP的方法和C编程语言没有多大帮助。主要参考文献如下, 我的设置是 客户端A--NAT-A--Internet--NAT-B--Client B。 假设客户机A知道B的公共endpoint和私有endpoint,而B知道A的endpoint(我已经编写了一个服务器'S',用于在对等点之间交换endpoint信息),并且两个NAT都不对称,如果两个客户

  • 我知道这个话题并不新鲜。虽然存在各种信息,但健壮的解决方案并没有出现(至少我没有找到)。我有一个用python3编写的P2P守护进程,pie上的最后一个元素是通过TCP连接NAT后面的两个客户端。我得此主题得参考资料: https://bford.info/pub/net/P2pnat/ 如何使两个客户机在连接了一个汇点服务器后直接连接? TCP穿孔问题 到目前为止我所做的: 服务器: 现在,当前