Linux : Ping 子网中的所有主机

use*_*141 7 linux solaris subnet ping

有一个 solaris 命令可以通过发出以下命令来 ping 子网中的所有主机:

ping -s 255.255.255.255
Run Code Online (Sandbox Code Playgroud)

linux中有没有类似的东西?我的目的是在 ping 所有主机后找到一个如下所示的 mac 地址:

arp -an | grep mac_address
Run Code Online (Sandbox Code Playgroud)

小智 8

您始终可以尝试 ping 子网的广播地址。这取决于您的本地网络设置,但您可以通过以下方式找到它

$ ifconfig wlp4s0 | grep Bcast
      inet addr:192.168.199.47  Bcast:192.168.199.255  Mask:255.255.255.0
Run Code Online (Sandbox Code Playgroud)

从 Linux ping 需要-b命令行开关,这是命令的一种预防措施。

但是,这并不能保证您将从连接到您的子网的所有设备中收集所有 MAC 地址,因为它是实际响应发送到广播地址的 ICMP ECHO 请求的设备,即使在TCP/IP RFC(查看是否/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts设置为 1)。

为了更确定覆盖所有地址,请分别使用

$ for ip in 192.168.199.{1..254}; do ping -c1 ${ip} & done
Run Code Online (Sandbox Code Playgroud)

如果您使用特殊的 nmap 扫描类型与

$ sudo nmap -sn -PE -n 192.168.179.1-254
Run Code Online (Sandbox Code Playgroud)

这也是我推荐的探测方式,因为您可以微调向客户端询问其 MAC 地址的方式。


use*_*517 3

您所做的就是 ping 广播地址。GNU/Linux 版本的 ping 要求您使用-b开关

-b 允许 ping 广播地址

似乎也没有与 Solaris-s交换机直接等效的东西(它只是每秒 ping 一次并收集统计数据),但也许它隐藏在Linux 手册页中- 非常值得一读(可能是Solais 手册页)。

我也不会去 ping 255.255.255.255(可能需要一段时间才能完成),我会使用我所连接的网络的广播地址。