无法接收UDP广播包

时间:2010-06-10 23:37:19

标签: c++ udp ip-address broadcast

我有2个盒子: - 嵌入式设备(带有Linux的ARM Omap),我将其称为“ Omap ”。 - PC (可以是Windows或Linux)。

场景1

两个盒子都在同一个网络中(例如:我的办公室)。
Omap从DHCP服务器获取其地址(例如:192.168.10.110)。 PC始终具有相同的地址(例如192.168.10.104)。
我可以在任何端口上成功交换UDP广播包。
成功。


场景2

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套接字。具体来说,我拿了多播示例并将其更改为广播。

感谢任何帮助。

谢谢,   Benedetto的

PS:有些澄清。

Omap设备是一个嵌入式设备,我的目标是客户不必在该字段上设置其IP地址。这就是为什么我要与PC交换广播数据包,以便从我在PC上运行的其他软件(它知道当前子网是什么,即使在具有静态IP地址且没有DHCP服务器的网络中)获得“良好”的IP地址。

我实际上实现了一个非常简单的DHCP协议。 PC可以监听Omap广播的数据包,但反之亦然。

2 个答案:

答案 0 :(得分:0)

一些想法......

1)ifconfig eth0 - 接口是否正常,是否有IP地址,合适的网络掩码等?

2)路由 - 配置是否正确? (Netstat -r或route)(如果IP地址位于不同的未路由子网上,这可能是一个问题,具体取决于网络掩码。)

3)防火墙 - 我无法告诉你有多少时间我遇到了防火墙问题。确认它没有在那里停止。

4)直接在各自的系统上尝试tcpdump - 它显示了什么?什么是通过?

5)你能从一个系统ping到另一个系统吗? (ICMP可能有不同于UDP的规则。)

(我打赌在下行接口,网络掩码阻止不同的子网,或者没有首先遇到主机问题的路由。)

答案 1 :(得分:0)

如果您使用ifconfig设置IP地址,则可能不够。通常,您还必须配置路由表,通常包括添加两个路由:一个表示“此网络附加在eth0”,另一个表示“这是默认网关”。 (后者不是严格要求的。)

“网络无法访问” - 我假设您尝试从OMap ping PC?如果你的电脑是192.something.something.something,而你的“OMap”有你的评论路由表:

Destination  Gateway  Genmask    Flags  MSS  Window  irtt  Iface
10.0.0.0     *        255.0.0.0  U      0    0       0     eth0

...然后它将无法发送。只有当您尝试向10.something发送内容时,该路由表才有效:这是它知道的唯一路由。如果您没有运行10.0.0.0/8网络,那么该路由是错误的。

如果要执行此操作,请在路由表,IP地址等上查找一些材料。虽然,如果你想让普通人“插上电源” - 他们将会运行DHCP - 这有什么不妥?如果没有某种形式的中介,您不能只选择网络上的IP地址:人工调解,手动设置,或者使用类似DHCP服务器的东西。否则,你可能会选择别人的地址。此外,您需要知道您是在10.0.0.0/8网络,192.168.0-255.0/8网络,其他局域网还是互联网...... DHCP为您做的事情......