【问题标题】:Sending UDP packets across a LAN with LuaSocket使用 LuaSocket 通过 LAN 发送 UDP 数据包
【发布时间】:2017-06-06 01:32:01
【问题描述】:

我的局域网由一个 BT“Smart Hub”路由器、一台通过以太网连接到路由器的台式电脑和一台通过 wifi 连接到路由器的笔记本电脑组成。

我正在尝试使用名为“lua socket”的 lua 库在两台计算机之间发送 udp 数据包。

我从here 复制了一些非常通用的服务器和客户端脚本,以查看数据包是否真正到达。

我的桌面配置为在 LAN 中有一个静态私有 IP 地址,如果我使用随机端口和桌面的私有 IP 同时运行服务器脚本和客户端脚本,服务器会成功接收消息。

我希望我可以在笔记本电脑上启动客户端脚本并针对相同的 IP 和相同的端口,然后 udp 数据包会显示在桌面上,但这似乎不起作用。

由于我缺乏网络知识,我对此有很多疑问:

会不会是电脑的windows防火墙或者路由器的防火墙干扰了数据包?

我是否需要将数据包从笔记本电脑发送到默认网关并使用端口转发才能到达桌面?

笔记本电脑是通过 wifi 而不是以太网连接的事实是否会导致问题?

还有其他我目前不知道的问题吗?

感谢您给我的任何建议(或指向更多信息的指针)。

【问题讨论】:

  • 我注意到示例代码中有udp:setpeername("127.0.0.1", 53474)。您没有在客户端或服务器上使用 127.0.0.1,对吗?别。服务器端的 127.0.0.1 将排除接收来自任何其他机器的流量,而在客户端,这意味着发送给自己,当然。您是否尝试过相反的方向,在两台机器之间颠倒客户端和服务器?你关掉windows防火墙了吗?两台机器能互相ping通吗?你试过 Wireshark 吗?
  • 正确,127.0.0.1 是本地主机,所以我在客户端脚本上用 192.168.1.71 替换了它,这是我的桌面的静态 IP,它将运行服务器脚本。服务器脚本本身似乎会响应发送给它的任何数据包,因此它不需要指定任何 IP 地址目标。我会尝试相反的方向,我会研究 ping 和 Wireshark,谢谢你的建议。
  • 在我的笔记本电脑上托管服务器时,我已经成功接收到数据包,但是当我在桌面上托管服务器时,我无法复制它。我认为这是由于 Windows 配置设置的一些差异造成的。
  • 这是一个合理的假设。你能双向 ping 通吗?
  • UDP 协议没有任何跟踪数据包的方法 ...我不确定你从哪里得到这个想法,因为这根本不是一个准确的陈述。 UDP 没有连接,因此每个数据包都没有相对于任何其他数据包的上下文……但是您可以捕获它们并查看它们并用您的眼球读取它们的标头和有效负载,确认它们是否是到达目的地。 Wireshark 几乎是一个不可或缺的工具。

标签: sockets lua udp lan


【解决方案1】:

事实证明,我桌面上的 Windows 防火墙被配置为阻止来自我正在运行以执行 LuaSocket 脚本的任何 lua 可执行文件实例的所有传入数据。

我在笔记本电脑上运行其中一个以执行客户端脚本。

这解释了为什么来自服务器的响应(当托管在笔记本电脑上时) 能够通过:因为它们在技术上来自服务器,而不是来自可执行文件,因此得到了穿过防火墙。

一旦我允许这些连接,服务器就会正确接收所有定向到其端口的数据包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多