用于Web服务器的UDP打孔?

时间:2017-07-14 01:29:07

标签: node.js sockets curl hole-punching

对于我的学术项目,我正在努力实现这一目标。 侦听端口3000的Web服务器节点JS应用程序。 因此,如果您curl http://localhost:3000,您将获得Hello World!。 (一个简单的网页。

现在我在本地计算机上运行webserver。我的调制解调器支持NAT。假设如果我在调制解调器中向前移植到myip:3000那么它向全世界开放。但这是我遇到的最大问题 - 我不想使用调制解调器进行端口转发,相反,我将使用第三方服务器进行UDP打孔。

现在我的要求是来自网络的任何人都应该能够访问curl http://third-party-server-ip:3000的网络服务器。

我正在尝试的是编写另一个客户端 - 它打开与第三方服务器的连接。说它在港口41234打了一个洞。那个港口是开放的。第三方主机可以向该端口发送内容。

现在互联网上的任何人都会向第三方主机发起此命令curl http://third-party-ip:3000。所以第三方返回 myip:udpPunchHolePort ,即myip:41234

任何人都会再次卷曲到myip:41234节点js UDP punch app会收到它,因此会重定向到localhost:3000。最后,anyone将收到localhost:3000的回复。

我的两个问题 -

  1. 有没有比我在这里提出的更好的方式?
  2. 对于这种东西,有没有任何着名的node-js lib,我知道, 我可以使用UDP punch hole我正在考虑写一个Lib来做这件事 - 这听起来像重新发明轮子吗?
  3. 注意 - 在这个学术项目中,我们正在尝试学习如何在调制解调器中没有端口转发的情况下向世界开放任何本地应用程序。

    我们在skype protocol analysis上阅读,这也是我们的灵感。

    Flow of request

1 个答案:

答案 0 :(得分:4)

不,那不行。

  1. HTTP通过TCP运行,而不是UDP。打破UDP漏洞对你没有任何好处 - 任何与后端HTTP服务器的TCP连接仍然会失败。

  2. HTTP重定向不是魔术。如果用户无法访问特定主机:端口,请将其重定向到该主机上的URL:端口只会在请求该URL时使浏览器超时。

  3. 您无法从其他主机发送响应:来自浏览器请求的端口,因为没有与该端点建立TCP连接。