当位于大型局域网的时候,可能需要检查网络上其他的主机是否位于活动状态,一台非活动的主机要么没有开机,要么网络连接有问题,我们可以通过shell脚本来判断是否活动
我们首先采用两种方式,一种使用ping,一种使用fping,fping没有默认包括在Linux发行版中
我们看下是否可以找出网络上所有活动主机的脚本,以及实现这一目标的其他方法
ping同一网段的主机如下
#! /bin/bash
for ip in 192.168.103.{1..255} ; do ping $ip -c 2 &> /dev/null ; if [ $? -eq 0 ]; then echo $ip is alive; else echo $ip is not alive; fi done; |
我们也可以使用fping来进行查询
fping -a 192.168.10.10/24 -g 2 > /dev/null
192.168.0.0
192.168.0.9
fping -a 192.168.1.1 192.168.1.255 -g
我们使用了循环来ping出所有活动主机
会依次的遍历,从192.168.0.1 ~ 192.168.0.255到头
依次类推到192.168.0.255
ping $ip -c 2 &> /dev/null 会在每个循环中ping对应的IP地址,然后根据返回是否是0来进行判断,
但是如果需要处理255乃至更多的IP地址,那么就比较麻烦的,我们每一次的发送,都需要经历一段延迟,发送两次ping操作并且进行等待,我们可以将循环体内的操作放入()内的子线程来后台执行
或者放入()&来循环执行
for循环会出现多个子进程,这样就会直接结束脚本并循环,如果不想要直接结束,可以使用wait命令,这样就会等待所有的子线程都结束后才自动结束
fping可以ping一组 IP地址, 而且速度非常之快.fping的常见选项如下
-a 打印出所有活动主机的IP地址
-u 打印出无法达到的主机
-g 指定从写作IP/mask的方法中生成IP地址(这就可以批量打印)
我们也可以从文件中传递一组IP地址
fping -a < ip.list
fping进行DNS查找
fping 加上选项-d 可以对每一个echo回应进行DNS查询来返回主机名,使用这个选项可以再ping的回应信息中打印出主机名而非IP地址