判斷網絡中主機存活的三種方法


  主機是否存活,主要是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。請注意。懶得再截圖了,字太多。

 

 三種方法中我個人覺得第一種最好理解,但是最后一種是最優的,雖然效果,都是一樣的。這三種方法有一個缺點就是執行的時間比較長,如果有好的方法,請大師指點。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM