【问题标题】:Lua Networking - Passing data through a 'closed' portLua Networking - 通过“封闭”端口传递数据
【发布时间】:2016-10-21 08:40:41
【问题描述】:

这可能解释起来有点奇怪,但我会尽力而为。

我有一个 Lua 程序,旨在通过网络提供一些数据。具体来说,互联网。程序实际传输的数据只是存储在 UDP 数据包中的字符串。概括地说,这就是程序的运行方式:

  1. 第一个客户端启动程序并指定它们是连接的“主机”。程序在 UDP 端口 6000 上打开一个连接,主循环侦听在该端口上接收到的任何数据包。
  2. 第二个客户端启动程序并指定它们要连接到端口 6000 上的“主机”。用户输入 IP,客户端使用 6050 和 7000 之间的随机端口打开 UDP 连接
  3. 当客户端成功连接到服务器时,它们会发送一个“连接”数据包,其中仅包含一个“202 OK”字符串。 “主机”收到此信息并注册新客户端
  4. 现在连接已经初始化,程序可以使用注册的数据在彼此之间发送数据。

现在,在本地网络上,这个程序可以正常工作。 “主机”模式的目的是让多个客户端连接到主机,并让主机将数据包从一个客户端中继到所有当前注册的客户端。端口选择是任意的,来自客户端的随机端口选择只是为了允许从单台计算机进行调试和测试。这已经在物理网络上的两台或多台计算机之间进行了测试,并且成功运行。但是,当我尝试在互联网上运行它时,这是不行的。我知道端口已关闭,这就是它不起作用的原因。但是看到我将(私下)分发这个程序,我不能指望每个人都打开他们路由器上的端口(或知道如何)。安全性目前不是该程序关注的问题,在当前状态下应该被忽略。话虽如此,我承认通过网络使用该程序可能会出现很多问题,我接受这一点。关于主要问题,如何让主机和客户端通过 Internet 进行通信,而无需打开端口?

我会详细说明 - 例如,浏览器。虽然这项技术与我正在做的完全不同,但绘制图片更容易 - 浏览器从 Web 服务器请求数据,然后将其发送回客户端。但是等等,如果路由器处于默认状态(我希望)所有端口都关闭了?那么如果端口关闭,客户端如何接收这些数据呢?

我希望这有点道理,而且我听起来不像是个十足的傻瓜。

【问题讨论】:

  • 了解眩晕/转身。您还可以阅读有关 SIP 寄存器如何与 NAT 一起使用的信息。 SIP 使用您描述的机制。客户端发送注册和服务器响应 200 ok。
  • 您遇到了一个不小的问题。然而,要求“主机”打开端口的情况并不少见,this one 之类的网站就证明了这一点。对于每种替代解决方法,您仍然可能会发现它不起作用的情况。
  • 我确实想过只为主机打开端口,但我还没有尝试过那个 Michael-sqlbot。我想我可能会像@moteus 建议的那样选择使用 stun/turn - 我一直在查看一些常见问题解答和有关它的事情,这看起来像是我所追求的方式。从现在开始,我将面临的最大挑战是在 LUA 中找到/进行实现

标签: sockets networking lua udp port


【解决方案1】:

我设法找到了一些合适的库和实用程序,以便能够通过 Internet 进行通信(NAT 遍历现在是我熟悉的一个术语),这些库是由 NMAP 提供的。这些库包括在 LUA 中的 STUN 实现,以及其他有用的网络相关库和脚本的 HEAPS。

要真正回答我自己的问题(非常简单),客户端和服务器位于所谓的 NAT 网关后面。由于 IPv4 地址的限制,NAT 网关通过将客户端的内部网络与外部网络(在本例中为互联网)分离来绕过 IPv4 的限制(总共约 42 亿个地址)。为 NAT 提供一个 IP 地址,然后 NAT 为内部网络中的所有用户提供与他们所在网络相对应的 IP。因此,如果不将连接从 NAT 网关(通常是路由器)转发到客户端,则无法直接访问设备。但是,当使用 UDP 连接时,NAT 网关会为此连接打开一个端口,该端口会在连接终止后关闭。打开的这个端口与客户端打开连接时指定的端口不同,这是 STUN 方法的用武之地。STUN 允许主机找到客户端连接的端口并将数据发送回该端口,因此用户可以收到。请记住,这是对该技术如何工作的非常简单的解释,我建议您阅读Wiki 和一些Request for Comments 的STUN。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多