使用shell查看当前局域网宕机的IP地址

62 阅读3分钟

测试环境 macOS 12

neil@192 ~ % sysctl -n hw.model
10Mac14,2
neil@192 ~ % sw_vers
ProductName: macOS
ProductVersion: 12.7.4
BuildVersion: 21H1123
neil@192 ~ %

用到的命令:

  • ifconfig : 我们需要使用这个命令来查看自己的局域网网段,从而才能使用ping来尝试连接。
  • ping : 我们使用ping来尝试连接,即测试是否宕机。
  • shell中的for循环

步骤:

1.使用ifconfig查看自己的局域网网段

  • 补充说明:grep -E 拓展的正则表达式
  • 第十行:找到我所在的局域网网段为192.168.1.xxx
# 使用ifconfig查看自己的局域网网段
neil@192 ~ % ifconfig | grep -E "(inet|netmask)"
inet 127.0.0.1 netmask 0xff000000 
inet6 ::1 prefixlen 128 
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
inet6 fe80::3482:e3ff:feed:b18%anpi1 prefixlen 64 scopeid 0x4 
inet6 fe80::3482:e3ff:feed:b17%anpi0 prefixlen 64 scopeid 0x5 
inet6 fe80::1818:edca:8495:3b76%en0 prefixlen 64 secured scopeid 0xb 
# 下面这一行就是我们的局域网所在网段
inet 192.168.1.7 netmask 0xffffff00 broadcast 192.168.1.255
inet6 240e:3ba:30b9:de60:1871:4e51:fb11:b7ac prefixlen 64 autoconf secured 
inet6 240e:3ba:30b9:de60:cd3e:16b3:6d8:f28 prefixlen 64 autoconf temporary 
inet6 fe80::78d5:4bff:fe0c:9a5d%awdl0 prefixlen 64 scopeid 0xc 
inet6 fe80::78d5:4bff:fe0c:9a5d%llw0 prefixlen 64 scopeid 0xd 
inet6 fe80::5aac:6efa:9d96:7e94%utun3 prefixlen 64 scopeid 0x12 
inet6 fe80::d617:1ed0:a01f:8bd4%utun4 prefixlen 64 scopeid 0x13 
inet6 fe80::ce81:b1c:bd2c:69e%utun5 prefixlen 64 scopeid 0x14

2.让我们来编写一个带有for循环的shell脚本来尝试ping所有本局域网内的地址:

#!/bin/bash

# 从192.168.1.1 到 192.168.1.254
for i in {1..254}; do
    # 使用ping
    ping -c 2 -i 0.5 192.168.1.$i    
    if [ $? -eq 0 ]; then
	echo "192.168.1.$i is up"
    else
	echo "192.168.1.$i is down"
    fi
done

别忘了赋予使用chmod +x ping.sh来赋予脚本执行权限。

3.执行脚本,得到测试结果。

一个小技巧改进输出结果

以上方法虽然已经足够实现功能,然而美中不足的地方在于,直接echo ping输出的内容又多又杂,可读性比较差,我们只关心IP地址和是否宕机的话,可以对pīng.sh如下改进:

#!/bin/bash

# from 192.168.1.1 to 192.168.1.254

for i in {1..254}; do
    
    # 现在,我们将无用的信息重定向进/dev/null当中
    
    ping -c 2 -i 0.5 192.168.1.$i &> /dev/null
    if [ $? -eq 0 ]; then
	echo "192.168.1.$i is up"
    else
	echo "192.168.1.$i is down"
    fi
done

再次运行,我们得到了清爽的结果:

neil@192 00_shell % ./ping.sh
192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is up
192.168.1.4 is down
192.168.1.5 is down
192.168.1.6 is up
192.168.1.7 is up
192.168.1.8 is down
192.168.1.9 is down
192.168.1.10 is down
192.168.1.11 is down

补充知识

IP地址用途说明
192.168.1.0网络地址标识整个网络,设备不能用
192.168.1.1通常为网关路由器/网关地址
192.168.1.2 - 192.168.1.254可用主机地址设备可以使用的IP
192.168.1.255广播地址全网广播,设备不能用