子网地广播地址只有主机位为全1,全局广播地址32位全1,即 255.255.255.255
我不太清楚套接字处理 INADDR_BROADCAST 是不是被翻译成子网内广播地址 192.168.0.255,但从现象上看,是这样的。
把地址改成 4 个255, 应该就都能收到了。
2011/8/19 sujun <sunny...@gmail.com>:
我最近遇到一个问题,A、B、C三台电脑,都安装同样的Linux操作系统。当A和B通过网线对连时,A的IP配置为192.168.0.1、B配置为192.168.0.3,子网掩码自然是255.255.255.0。然后在A通过普通套接字,发UDP广播(addr为INADDR_BROADCAST),B用UDP接受广播(addr为INADDR_ANY)。可以收到。但是如果将A的IP修改为192.168.1.1,也就是说,物理相连的两台IP地址在不同网段的电脑,就接受不到广播消息了。但是在B上面用tcpdump等抓包工具或者原始套接字是可以抓到这个数据包的。而更离谱的是,电脑C和电脑B的操作系统一样、网卡一样。通过上面两种方式都可以收到。
不知道诸位有没有遇到过类似问题的?另外,因为确认至少到IP层是有数据包的,有没有什么好办法可以确定在那一层被过滤的,已经如果让其不被过滤?