歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 檢測網段在線主機的shell腳本

檢測網段在線主機的shell腳本

日期:2017/3/3 15:59:58   编辑:關於Linux

作業四:

寫一個腳本:

實現ping C類網段,B類網段和A類網段內的所有主機;

網段地址讓用戶輸入,而且通過腳本判斷網段類型;

#!/bin/bash  
#Author: MOS  
#Script name: funPing.sh  
#Date & Time: 2012-10-09/21:53:09  
#Version: 1.0.1  
#Description:  
#  
#定義C類網段處理函數  
net_C(){  
#定義統計不在線IP數量的變量  
    declare -i Fail=0  
#生成C類網的最後位IP,循環ping  
    for i in `seq 1 254`;do
#ping只發送一個,只等待1秒,得到的所有信息並扔掉,僅去邏輯值  
        if ping -c 1 -W 1 $1.$i &> /dev/null ;then   
            echo "Online $1.$i"
        else
            let Fail++  
        fi  
    done  
    echo "No Online PC, Number is $Fail"
}  
net_B(){  
#截取B類網的網段  
    Bip=`echo $1|cut -d'.' -f1-2`  
    declare -i Fail=0  
#循環生成B類網第三段  
    for i in `seq 0 254`;do
        Res="$Bip.$i"
#循環生成B類網第四段  
        for r in `seq 1 254`;do
            if ping -c 1 -W 1 $Res.$r &> /dev/null ;then      
                echo "Online $Res.$r"
            else
                let Fail++  
            fi  
        done  
    done  
    echo "No Online PC, Number is $Fail"
}  
net_A(){  
    Bip=`echo $1|cut -d'.' -f1`  
    declare -i Fail=0  
#生成A類網的第二段,第三段和第四段以此類推  
    for i in `seq 0 254`;do
        Res="$Bip.$i"
        for r in `seq 0 254`;do
            Res1="$Res.$r"
            for l in `seq 1 254`;do
                if ping -c 1 -W 1 $Res1.$l &> /dev/null ;then     
                    echo "Online $Res1.$l"
                else
                    let Fail++  
                fi  
            done  
        done  
    done  
    echo "No Online PC, Number is $Fail"
}  
read -p "Please input subset:" Ip  
#判斷輸入IP段落是否合法  
if [[ $Ip =~ ^([2-9]|[1-9][0-9]|1[0-9][0-9]|2[01][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$ ]];then
#合法,則取出第一個字段,屬於哪類網  
    Mask=`echo "$Ip"|cut -d"." -f1`  
#如果是A類網,則調用net_A函數,依次類推  
    [ $Mask -lt 128 ] && net_A $Ip  
    [ $Mask -lt 192 -a $Mask -gt 127 ] && net_B $Ip  
    [ $Mask -gt 191 ] && net_C $Ip  
    
else
#如果輸入IP錯誤,則報錯信息如下  
echo "Error! $Ip invalid."
fi

如果要使用以上代碼,要慎重...尤其是A類網和B類網...255*255*255的資源開銷,您自己琢磨....呃,如果僅供測試的話,可以把結果輸出到文件,放到後台執行,或者僅測試特定IP的話,您可以把for循環中seq的生成數字,修改一下,也是沒問題的.....

URL:http://www.bianceng.cn/OS/Linux/201410/45678.htm

Copyright © Linux教程網 All Rights Reserved