如何使用 bash 脚本发现网络中的 IP 地址?

Tar*_*run 7 bash scripts

是否可以使用 bash 脚本确定网络中系统的 IP 地址?如何?

Eri*_*lho 8

安装 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)


lga*_*rzo 7

此答案使用该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 扫描)运行并将-oGgrep 可处理输出输出到标准输出 ( -)。
  • grep 仅过滤在行尾(“$”)包含单词“Up”的行。
  • awk打印由 输出的列表中的第二列nmap,即 IP 地址,并附加一个空格。
  • $()命令替换允许命令的链的输出被分配给IPS_UP变量。

可以使用 安装网络映射器sudo apt-get install nmap

注意
nmap如果由特权用户运行,可能会发现更多主机。这是因为发送不同类型的数据包来扫描主机。通过修改上面的行来读取sudo nmap ...允许以nmaproot身份运行命令。