安装 arp-scan ( sudo apt-get install arp-scan
) 并将以下行添加到脚本中:
IPs=$(sudo arp-scan --localnet --numeric --quiet --ignoredups | grep -E '([a-f0-9]{2}:){5}[a-f0-9]{2}' | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)
现在您拥有IPs
变量中的所有活动 IP 地址。
注意:这只适用于直接连接的网络,即不能通过路由器访问。
PS:如果安装gawk
命令可以缩短为(感谢belacqua):
IPs=$(sudo arp-scan --localnet --quiet --ignoredups | gawk '/([a-f0-9]{2}:){5}[a-f0-9]{2}/ {print $1}')
Run Code Online (Sandbox Code Playgroud)
此答案使用该nmap
命令来收集网络中活动主机的信息。
Nmap(“网络映射器”)是一个用于网络探索和安全审计的开源工具。它旨在快速扫描大型网络,尽管它对单个主机也能正常工作。Nmap 以新颖的方式使用原始 IP 数据包来确定网络上可用的主机、这些主机提供的服务(应用程序名称和版本)、它们运行的操作系统(和操作系统版本)、数据包过滤器/防火墙的类型正在使用中,以及其他数十种特性。
假设您需要扫描 192.168.0.X 范围,您可以尝试:
nmap -v -sP 192.168.0.0/24
Run Code Online (Sandbox Code Playgroud)
哪里192.168.0.0
是网络地址,/24
网络掩码等价于255.255.255.0
. 因此,上述命令将扫描 256 台主机。
要收集活动 IP 地址,可以使用以下行:
IPS_UP=$(nmap -nsP 192.168.0.0/24 2>/dev/null -oG - | grep "Up$" | awk '{printf "%s ", $2}')
Run Code Online (Sandbox Code Playgroud)
它实际上将活动 IP 地址列表(由 过滤grep
)连接到一个名为 的变量中IPS_UP
:
nmap
使用开关-n
(无名称解析)、-sP
(ping 扫描)运行并将-oG
grep 可处理输出输出到标准输出 ( -
)。grep
仅过滤在行尾(“$”)包含单词“Up”的行。awk
打印由 输出的列表中的第二列nmap
,即 IP 地址,并附加一个空格。$()
命令替换允许命令的链的输出被分配给IPS_UP
变量。可以使用 安装网络映射器sudo apt-get install nmap
。
注意
nmap
如果由特权用户运行,可能会发现更多主机。这是因为发送不同类型的数据包来扫描主机。通过修改上面的行来读取sudo nmap ...
允许以nmap
root身份运行命令。