通常我们为了测试一个主机是否在线,都会使用ping命令去测试,然而人为的去ping数量过多的机器操作很繁琐,而且需要的等待时间过长,今天我就为大家介绍两种快速测试主机是否在线的方法,希望能给大家带来一些启发。
一、使用脚本循环ping测试
#!/bin/bash
#Author xiaoY
#高并发的连通性测试
#ping命令的-c选项控制ping测试的次数,-c2表示对目标主机执行2次ping测试
#ping命令的-i选项,控制多次ping测试的间隔时间默认为1秒,-i0.1可以提升ping的测试效率
#ping命令的-W选项,可以控制超时时间,默认一个主机无法ping通,需要等很长的超时时间,才会提示无法ping通,使用-W1,设置超时时间为1秒。
myping(){
ping -c4 -i0.1 -W1 192.168.4.$i &> /dev/null
if [ $? -ne 0 ];then
echo $i, >> up.txt
else
echo $i, >> down.txt
fi
}
#定义变量i控制循环次数,i从1开始循环,每循环一次,i自加1,直到i等于254循环退出
#在每次循环中对一个IP进行ping测试,如果ping通,将主机号存入UP.txt,如果无法ping通,则将主机号存入down.txt
#在进入循环之前,初始化文件
i=1
>up.txt
>down.txt
while [ $i -lt 255 ]
do
myping &
let i++
done
#使用&符号,将执行的函数放入后台执行
#这样做的好处是不需要等待ping第一台主机的回应,就可以继续并发ping第二台主机,依次类推。
#设置等待,完成ping测试写入
#sort排序调整格式
sleep 2
echo "不在线的主机:"
echo -n `sort -n up.txt `
echo
echo "在线的主机:"
echo -n `sort -n down.txt `
echo
二、引用nmap的并发测试工具,可以快速测试主机状态,我们只需要测试主机是否在线运用ping功能测试就OK
#!/bin/bash
#Author xiaoY
#运用第三方工具nmap,扫描测试主机的连通性,用awk将测试结果选出存入文件
#选项-sP是只进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试
OK(){
rpm -q nmap || yum -y install nmap
nmap -sP 192.168.4.0/24 | awk '/[0-9]$/{print $NF}' >ok.txt
}
OK &>/dev/null
#引用变量ip对结果进行判断,然后分别存储在线和不在线的主机号
#在循环之前初始化存储文件
>success.txt
>fail.txt
ip=1
while [ $ip -lt 255 ]
do
egrep -w 192.168.4.$ip ok.txt &> /dev/null
if [ $? -eq 0 ];then
echo $ip, >> success.txt
else
echo $ip, >> fail.txt
fi
let ip++
done
echo "不在线的主机:"
echo -n `sort -n fail.txt `
echo
echo "在线的主机:"
echo -n `sort -n success.txt `
echo
小结:ping测试需要一定的时间,需要在最终输出结果之前设置等待时间,等待所有ping测试完成返回结果。