我有 2 个盒子: - 一个嵌入式设备(带有 linux 的 ARM Omap),我将其称为“ Omap ”。- PC(可以是 Windows 或 linux)。
方案 1
两个盒子都在同一个网络中(例如:我的办公室)。
Omap 从 DHCP 服务器获取其地址(例如:192.168.10.110)。PC 始终具有相同的地址(例如 192.168.10.104)。
我可以在任何端口上成功交换 UDP 广播数据包。
成功。
方案 2
这两个盒子位于没有 DHCP 服务器的网络中。
PC 有一个静态 IP 地址(例如:10.10.10.20)。
Omap 启动,寻找 DHCP 服务器,但没有找到,并且处于我所说的“错误 IP 地址”状态。 现在...从Omap
广播 UDP 数据包可以工作:PC 可以看到它们。
反之则不行:Omap 看不到 PC 广播的 UDP 数据包。我在另一台 PC 上使用 Wireshark 来验证数据包是否正在发送。
失败。
我试图更改 Omap ip 地址(使用 ifconfig)... 不走运。
我错过了什么?
完成图片,当 Omap 在场景 2 中时,如果我运行 udhcpc ... 它可以与 DHCP 服务器通信并获取 IP 地址。我还看到了 Wireshark 的数据包。所以这意味着 DHCP 客户端能够广播 UDP 数据包。(是的,我尝试使用 DHCP 端口 67/68 但它不起作用)。
我正在使用 Boost C++ Asio UDP 套接字。具体来说,我采用了多播示例并将它们更改为广播。
任何帮助表示赞赏。
谢谢,贝内代托
PS:一些澄清。
Omap 设备是嵌入式设备,我的目标是客户不必在现场设置其 IP 地址。这就是为什么我要与 PC 交换广播数据包,以从我在 PC 上运行的其他软件获取“好的”IP 地址(即使在具有静态 IP 地址且没有 DHCP 服务器的网络中,它也知道当前子网是什么)。
基本上我实现了一个非常简单的 DHCP 协议。PC 可以收听 Omap 广播的数据包,反之则不行。