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

UDP穿孔-目标不可达

蓬宾白
2023-03-14

首先,创建到服务器的UDP连接:

        send = new IPEndPoint(IPAddress.Any, 0);
        server = new UdpClient(send);
        server.AllowNatTraversal(true);

没有任何直接连接(没有ip,没有端口,只是随机端口上的endpoint)。

我使用直接server.send([..],[..],serverip,serverport)在服务器的ip和端口上发送一些数据包到服务器,并获取有关另一个对等方的信息(远程ip,用于连接到服务器的端口

现在,我试图通过使用服务器连接在对等方的IP:端口上发送简单的UDP数据包(但再次使用直接server.send([..],[..],peerip,peerport))来解决问题。我知道第一个数据包总是被丢弃,所以我以100ms的间隔发送它50,而远程对等体也会做同样的事情。

如果我理解UDP打孔的方法,从第一个对等体(A)发送数据包会打开A的NAT中的NAT记录,并且由于NAT中没有记录而被B的NAT丢弃。因此,当B向A发送数据包时,在A的NAT中有一个记录是用第一个数据包(为B)创建的,数据包应该由B接收。B的NAT中的NAT记录是创建的。A应成功地向B发送另一个数据包。

附注:http://nattest.net.in.tum.de/test.php测试成功http://nattest.net.in.tum.de/IndividualResult.php?hash=a5f229d156d4f5409a305c37729d9510 http://nattest.net.in.tum.de/IndividualResult.php?hash=3fd60e888721908a9480cd12836b97af-在第二个VM上使用VPN

附注:我在虚拟盒子中使用虚拟窗口。

共有1个答案

卢元龙
2023-03-14

您应该从两个endpoint获得网络捕获跟踪并研究结果。密切注意端口号的所有方面,因为端口号可能得到重新映射和IP地址。

很难推断你在问什么。如果您收到ICMP错误,可能是NAT或endpoint未准备好接收您的UDP数据包。多重复几次打孔试验可能会解决这个问题。

我怀疑您认为远程对等体正在侦听的端口号映射与您认为的不同。如果您在对称NAT上,情况就会如此,这对于VM上的VPN来说是很有可能的。

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

  • 我试图在一个软件中实现一个打孔功能。问题是,我用一个已经制作好的TCP服务器来实现它,以便与用户通信。 以下是我目前掌握的情况: “a”向UDP服务器“US”(端口9333上)发送消息 “用户”将其连接的端口(端口31000-本地端口31005)发送回“A” “a”向TCP服务器“TS”发送消息,表示他想要连接到B(并提供端口31000) “ts”向“b”发送消息,将“a”的端口(31000)和I

  • 到目前为止还不错,但这里有一个问题:它只适用于特殊情况。 我知道对称NAT(将您的专用IP和端口映射到您想要到达的每个目的地址的特定不同地址的NAT)引起的问题,因此假设我向S1和S2发送一个数据包,S1将看到端口为50263的公共地址,而S2将看到50264)。我还知道,某些非对称NAT要求您先将UDP数据包发送到特定地址,然后才能从同一地址接收数据包。 所以到目前为止我所理解的是,只要您的NA

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

  • 我目前正在开发一款网络游戏。在游戏中,需要通过TCP和UDP将数据从服务器发送到客户端。实现UDP漏洞穿孔很容易,但我不太确定如何实现TCP漏洞穿孔: null 是3。或者是4。该怎么走?

  • stackoverflow用户! 我有一个必须处理p2p的应用程序,这就是我使用UDP打孔的方法。但我在执行上遇到了麻烦。希望你能给我一些提示。 我已经有了服务器,它运行得很好,可以把客户介绍给彼此,但是客户不能连接,可能是因为我使用套接字的经验不足。因此,客户端算法是: < li >创建udp套接字(socket(AF_INET,SOCK_DGRAM,IP proto _ UDP);) < li