关于跨子网接收UDP广播的问题

400 views
Skip to first unread message

冯建波

unread,
Aug 18, 2011, 10:49:36 AM8/18/11
to sz...@googlegroups.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层是有数据包的,有没有什么好办法可以确定在那一层被过滤的,已经如果让其不被过滤?

sujun

unread,
Aug 18, 2011, 8:54:12 PM8/18/11
to sz...@googlegroups.com
是在IP层被过滤掉的。

Rico

unread,
Aug 18, 2011, 9:04:18 PM8/18/11
to sz...@googlegroups.com
广播分为两种,子网内广播和全局广播

子网地广播地址只有主机位为全1,全局广播地址32位全1,即 255.255.255.255

我不太清楚套接字处理 INADDR_BROADCAST 是不是被翻译成子网内广播地址 192.168.0.255,但从现象上看,是这样的。

把地址改成 4 个255, 应该就都能收到了。

2011/8/19 sujun <sunny...@gmail.com>:

Bryton Lee

unread,
Aug 18, 2011, 9:05:48 PM8/18/11
to sz...@googlegroups.com


2011/8/18 冯建波 <fe...@jianbo.de>

我最近遇到一个问题,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的操作系统一样、网卡一样。通过上面两种方式都可以收到。
通过哪两种方式?  tcpdump等抓包工具或者原始套接字是可以抓包两种方式吗?


不知道诸位有没有遇到过类似问题的?

另外,因为确认至少到IP层是有数据包的,有没有什么好办法可以确定在那一层被过滤的,已经如果让其不被过滤?

你用wireshark找到的包的目地MAC地址是ff:ff:ff:ff:ff:ff吗? ff:ff:ff:ff:ff:ff是以太网的广播地址, 跟IP层没有关系, 链路层会接收, 在IP层过滤。

--
Best Regards

Bryton.Lee


冯建波

unread,
Aug 19, 2011, 9:58:10 AM8/19/11
to sz...@googlegroups.com
sujun:如何设置能够不被过滤掉呢?
rico:是全网广播,255.255.255.255
bryton:第一种方式指的是对联的两台电脑是同一个网段的,第二种方式是不同网段。
wireshark抓到的MAC广播地址是全ff,IP地址是全255

在 2011年8月19日 上午9:05,Bryton Lee <bryto...@gmail.com>写道:
通过哪两种方式?  tcpdump等抓包工具或者原始套接字是可以抓包两种方式吗?

sujun

unread,
Aug 19, 2011, 9:12:54 PM8/19/11
to sz...@googlegroups.com
即使你发出的全网广播包不被目标机器过滤掉,它的回包也会被源机器过滤掉,因为他们不在同一个网段。
Reply all
Reply to author
Forward
0 new messages