一个networking服务器的UDP穿孔?

对于我的学术项目,我正试图做到这一点。 一个web服务器节点JS应用程序监听端口3000.所以,如果你curl http://localhost:3000你会得到Hello World! 。 (一个简单的网页。

现在我在本地机器上运行在webserver上面。 而我的调制解调器在NAT之后。 假设如果我在调制解调器端口转发到myip:3000那么它对世界开放。 但这里是我卡住的最大的东西 – 我不想使用调制解调器的端口转发,而是,我将使用第三方服务器的UDP冲孔。

现在我的要求是来自net的任何人都应该能够通过curl http://third-party-server-ip:3000来访问我的web curl http://third-party-server-ip:3000

我正在尝试写另一个客户端 – 它打开一个连接到第三方服务器。 说它在41234港口41234了一个洞。 那个港口是开放的。 第三方主机可以发送一些东西到那个端口。

现在任何人在互联网上启动此命令curl http://third-party-ip:3000到第三方主机。 所以第三方返回myip:udpPunchHolePortmyip:41234

任何人将再次curl到myip:41234它将被节点js UDP punch app收到,所以它将redirect到localhost:3000 。 最后, anyone将收到localhost:3000的响应。

我的两个问题 –

  1. 有没有比我在这里提出的更好的方法?
  2. 有没有什么知名的node-js lib这种东西,我看,我可以用UDP punch hole 。 或者我正在考虑编写一个Lib来完成这个工作 – 这听起来像是在重新发明轮子吗?

注意 – 在这个学术项目中,我们正试图学习如何让任何本地应用程序在没有调制解调器端口转发的情况下向世界开放。

我们阅读了Skype协议分析 ,这也是我们的灵感。

请求的流程

不,那不行。

  1. HTTP运行在TCP上,而不是UDP。 打孔一个UDP孔没有什么好处 – 任何到后端HTTP服务器的TCP连接都将失败。

  2. HTTPredirect并不神奇。 如果用户无法访问特定的主机:端口,则将其redirect到该主机:端口上的URL,只会在请求该URL时使其浏览器超时。

  3. 您不能从浏览器请求的不同主机:端口发送响应,因为没有与该端点build立TCP连接。