这可能有点奇怪,但我会尽我所能。
我有一个Lua程序,旨在通过网络提供一些数据。具体来说,互联网。程序实际传输的数据只是存储在UDP数据包中的字符串。概括,这是该计划的运作方式:
现在,在本地网络上,这个程序运行正常。 “主机”模式的目的是让多个客户端连接到主机,并让主机将数据包从一个客户端中继到所有当前注册的客户端。端口选择是任意的,从客户端随机选择端口只是为了允许从一台计算机进行调试和测试。这已在物理网络上的两台或更多计算机之间进行了测试,并且已成功运行。但是,当我试图通过互联网运行时,这是不行的。我知道端口是关闭的,这就是为什么它不起作用。但看到我将分发这个程序(私下)我不能指望每个人都在他们的路由器上打开端口(或知道如何)。安全性目前不是该计划的关注点,在当前状态下应予以忽视。话虽如此,我认识到通过网络使用这个程序可能会出现很多问题,我接受了。在主要问题上,如何让主机和客户端通过互联网进行通信而无需打开端口?
我会详细说明 - 例如,浏览器。虽然这项技术与我正在做的完全不同,但绘制图片更容易 - 浏览器从Web服务器请求数据,然后将其发送回客户端。但是等一下,如果路由器处于默认状态(我希望)所有端口都关闭了?那么如果端口关闭,客户端如何接收这些数据呢?
我希望这有点意义,我听起来不是一个完全傻瓜。
答案 0 :(得分:0)
我设法找到一些合适的库和实用程序,以便能够通过互联网进行通信(NAT遍历现在是我熟悉的术语),这些库是由NMAP提供的。这些库包括LUA中STUN的实现,以及其他有用的网络相关库和脚本的HEAPS。
为了实际回答我自己的问题(非常简单),客户端和服务器落后于所谓的NAT网关。由于IPv4地址的限制,通过分离客户端来实现NAT网关以绕过IPv4的这种限制(总共大约42亿个地址)。来自外部网络的内部网络 - 在这种情况下是互联网。 NAT提供单个IP地址,然后NAT为内部网络内的所有用户提供与他们所在网络相对应的IP。因此,如果没有从NAT网关(通常是路由器)到客户端的转发连接,则不能直接访问设备。但是,当使用UDP连接时,NAT网关会打开一个端口,用于此连接,在连接终止后将关闭该端口。打开的端口与客户端在打开连接时指定的端口不同,这是STUN方法进入的位置.STUN允许主机找到客户端连接的端口并将数据发送回此端口用户可以收到它。请记住,这是对技术如何运作的一个非常简单的解释,我建议阅读Wiki和一些Request for Comments的STUN。