对已存在的应用程序进行 UDP 打孔

Posted

技术标签:

【中文标题】对已存在的应用程序进行 UDP 打孔【英文标题】:UDP hole punching for an already existent application 【发布时间】:2016-01-05 10:37:45 【问题描述】:

我正在尝试在我的大学网络上使用 YAWCam。我将它用作另一个网络后面的另一个应用程序需要访问的 mjpg 流媒体。不幸的是,没有办法在我的大学网络上进行端口转发。输入udp-hole punching。当我得知它时,我认为这太棒了,但很快意识到,除非我能弄清楚如何实际修改这个程序(它不是开源的),否则我将无法让 UDP 打孔按常规方式工作。

我的问题是,有没有办法在不改变原始程序的情况下打孔?可能通过从 yawcam 用来打洞的同一端口发送数据包,然后让常规请求刷新它?我对网络代码有点陌生,所以我不完全确定“正确”的方法是什么。

【问题讨论】:

不妨先试试最简单的方法。 UPNP 端口映射。 github.com/kaklakariada/portmapper 很可能是大学被屏蔽了。 如何使用端口映射工具?我没有实际访问任何路由器的权限。那是最初的问题。事实上,YAWCam 可以在我家工作只是因为我家的路由器启用了 upnp。不需要端口转发。简单地运行 YAWCam(并假设在他们的网络上启用了 upnp)是行不通的。 (对 IP 和端口的请求不通过。)这就是为什么我想尝试编写一些可以“为 YAWCam 打洞”的东西,这样它就可以更像Skype(在我的 unis 网络上工作) 【参考方案1】:

不,这是不可能的。两个不同的程序不能绑定到同一个端口。端口号的目的是识别将流量路由到哪个正在运行的应用程序实例。如果两个应用程序分别将两个套接字绑定到同一个端口号,那么路由就变得不可能了。

【讨论】:

以上是关于对已存在的应用程序进行 UDP 打孔的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中进行 UDP 打孔?

UDP打孔只能部分工作c#

UDP打孔:单机可测试性

UDP打孔无法外接

[VB.NET]Upnp/udp打孔聊天程序tcp/udp sockets

UDP 打孔 (c++/winsock)