我有 Freebsd 作为路由器。
本地网络位于接口 sk0 上:inet 10.254.239.1 netmask 0xffffff00 broadcast 10.254.239.255
在我的本地网络中,我有一台计算机(Windows 7),它从 Freebsd 上的 DHCP 服务器获取其 ip(10.254.239.2)。
- 对精确地址 10.254.239.2 进行 ping 操作正常。
当我尝试从 Freebsd 本身 ping bradcast 10.254.239.255 时什么也没有发生:
--- 10.254.239.255 ping statistics ---
3 packets transmitted, 0 packets received, 100.0% packet loss
#arp -a
说:
...
?(10.254.239.255)位于(不完整)sk0 上已过期 [以太网]
...防火墙允许此接口上的所有内容
在哪里可以找到?如何才能让广播正常工作?
答案1
如果您想要执行主机发现,请不要使用广播 ping,只需对给定子网的每个可能排列进行 ping 即可。这听起来很繁琐,但实际上只需几秒钟(括号很重要):
$ time ( s=192.168.0 ; for i in $(seq 1 254) ; do ( ping -n -c 1 -w 1 $s.$i 1>/dev/null 2>&1 && printf "%-16s %s\n" $s.$i responded ) & done ; wait ; echo )
192.168.0.5 responded
192.168.0.11 responded
192.168.0.2 responded
192.168.0.254 responded
192.168.0.4 responded
real 0m1.317s
user 0m0.004s
sys 0m0.084s
答案2
大多数操作系统默认忽略广播 ICMP ping,出于安全原因。你无需“让它工作”,它对其他类型的广播也不会产生任何影响。
在 FreeBSD 上,net.inet.icmp.bmcastecho
sysctl 切换此功能。
答案3
我知道这个问题很老了,但它是谷歌搜索“ubuntu broadcast ping”时最热门的结果之一。
我想补充一点能从 Linux 主机轻松发送广播 ping 请求(ICMP 回应请求),选项如下-b。微软由于某种原因不允许这样做。
以下是从 Ubuntu 主机发送的广播 ping:
ping -b 192.168.1.255
WARNING: pinging broadcast address
PING 192.168.1.255 (192.168.1.255) 56(84) bytes of data.
64 bytes from 192.168.1.247: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=0.960 ms (DUP!)
64 bytes from 192.168.1.202: icmp_seq=1 ttl=64 time=92.3 ms (DUP!)
注意 -b 选项允许广播。如你所见,我的网络上的几个主机都已回复,包括一台思科交换机、我自己的 Ubuntu 主机和一台 Apple 笔记本电脑。
是的,正如其他人之前所说,广播 ping 对于扫描网络来说很糟糕。有些主机会直接忽略回显请求。有更好的工具可用于此目的(例如 nmap)。