测试环境 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 | 广播地址 | 全网广播,设备不能用 |