判断网络中主机存活的三种方法

  主机是否存活,主要是ping它的ip地址,如果能够ping通则表示主机在网络中存活,但是我们不能一棍子打死,只给一次机会,一次不通就判定主机网络不通,有可能是因为网络质量的关系,偶尔丢包,这个不能断定主机的存活状态,次实验连续三次失败才断定主机非存活。

一、失败次数的值判定方法

脚本如下:

 

#!/bin/bash
net="192.168.0."
for i in {1..254};do
        for count in {1..3};do
                ping -c1 -W1 $net$i &> /dev/null
                if [ $? -eq 0 ];then
                        echo "$net$i is live !"
                        break
                else
                        if [ $count -eq 3 ];then                       #通过循环的次数来确定失败的次数,这里如果已经循环到第3次了,就表示连续3次没有ping通,则判定主机died
                                echo "$net$i is died !"
                        fi
                fi
        done

done

 

 

 二、通过变量的方式

脚本如下:

 

#!/bin/bash
while read ip
do
        fail_count=0                                                #定义一个变量并富裕一个初始值0,用来记录ping失败的次数。
        for i in {1..3};do
                ping -c1 -w1 $ip &> /dev/null
                if [ $? -eq 0 ];then
                        echo "$ip is live !"
                        break
                else
                        let fail_count++                            #每ping失败一次就给fail_count变量自加1
                fi
        done
        if [ $fail_count -eq 3 ];then                  #判断失败次数如果等于3,就认定这个主机地址died。
                echo "$ip is died !"
        fi
done<ip.txt                                                         #输入重定向的方式获取ip地址,这个脚本就需要在脚本文件的当前目录存在一个ip.txt的文件,里面放的是要测试的ip地址,一行一个ip。

 

 

 第二种方法其实和第一种是一样的。

三、用函数的方法

脚本如下:

 

#!/bin/bash
ping_sucess() {
        ping -c1 -W1 $ip &> /dev/null
        if [ $? -eq 0 ];then
                echo "$ip is live !"
                continue
        fi
}
while read ip
do
        ping_sucess
        ping_sucess
        ping_sucess
     echo "$ip is died !"
done < ip.txt

 

下方图片中少了最后一个echo。请注意。懒得再截图了,字太多。

 

 三种方法中我个人觉得第一种最好理解,但是最后一种是最优的,虽然效果,都是一样的。这三种方法有一个缺点就是执行的时间比较长,如果有好的方法,请大师指点。

  

posted @ 2019-11-19 19:48  龙翔浅帝  阅读(2644)  评论(0编辑  收藏  举报