- 主机地址:
192.168.0.13
- 网络:
192.168.0.0 255.255.255.0
- 路由器:Cisco DPC3825 DOCSIS 3.0 网关(用户手册)
我的家庭网络将192.168.0.0 /24
网络用于我的(主要是无线)设备。在我经常使用的许多其他网络上,我将 ping 适用的广播地址以在我的(Windows 7 x64)结果中显示所有当前活动的设备arp -a
。 ping 网络的广播地址有助于我识别当前在同一网络上通信的设备。
在我的家庭网络中,我丢失了 100% 发送到 的数据包192.168.0.255
。因此,arp -a
无法显示我网络上的所有实时设备。所有设备都直接连接到我的路由器,然后连接到我的 ISP。
为什么我无法 ping 通此网络中的广播地址?直接登录路由器检查 DHCP 客户端表很不方便。
更新:这些 ping 尝试都是通过以太网直接连接到路由器的计算机进行的。我尝试过从多个无线设备进行相同的 ping 尝试,但无济于事。
答案1
我认为操作系统响应广播 ping 的时代早已一去不复返。据我所知,每个现代操作系统都会忽略这些请求,作为一种避免广播风暴的安全措施。
Linux 中的默认设置:
$ sysctl net.ipv4.icmp_echo_ignore_broadcasts
net.ipv4.icmp_echo_ignore_broadcasts = 1
如果您想要发现机器,您将不得不采取单播 ping(nmap、ping loop 或其他方式),但请注意,可以将机器配置为始终忽略 ping 请求。
答案2
已经有人讨论过,对广播地址的 ping 响应不再被视为良好做法。您也可以对使用 IP 224.0.0.1 的全主机多播组进行 ping。理论上,每个支持多播的主机都应该响应对此 IP 的 ping,但我听说有些主机没有这样做。
有关多播地址的更多信息,请阅读 tldp:http://www.tldp.org/HOWTO/Multicast-HOWTO-2.html
另一种选择是仅单播网段中的所有 IP 地址,这可以通过大多数系统上的内置工具轻松实现。我只了解 GNU/Linux 和 MS Windows,所以我只能为您提供这些系统的示例。
GNU/Linux
for lastoctet in $(seq 254); do ping -c 1 192.168.0.$lastoctet; done
微软视窗
for /l %i in (1,1,254) do ping -n 1 192.168.0.%i
虽然不那么容易,ping 192.168.0.255
但在大多数情况下确实有效。
答案3
参照#Jorge Nerin 所说:
将忽略参数设置为0。即;
$ sysctl net.ipv4.icmp_echo_ignore_broadcasts
net.ipv4.icmp_echo_ignore_broadcasts=0
在网络中的所有设备上以 root 权限执行此操作。它将允许响应广播 ping。
PS:这样做可能会带来安全威胁。