zoukankan      html  css  js  c++  java
  • 判断网络中主机存活的三种方法

      主机是否存活,主要是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。请注意。懒得再截图了,字太多。

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

      

  • 相关阅读:
    UVA 10391 STL容器的使用
    UVA 10763
    UVA 10935
    UVA 洪水
    UVA 1594 set 里面放queue
    关于STL 容器的嵌套使用, 小试牛刀
    丑数 UVA 136
    UVA 1368 DNA
    antd 上传文件控件使用方法(坑)
    mysql查询一条工单时间需要10秒。优化sql语句得以解决。
  • 原文地址:https://www.cnblogs.com/mython/p/11891922.html
Copyright © 2011-2022 走看看