当位于大型局域网的时候,可能需要检查网络上其他的主机是否位于活动状态,一台非活动的主机要么没有开机,要么网络连接有问题,我们可以通过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地址

发表评论

邮箱地址不会被公开。 必填项已用*标注