作業四:
寫一個指令碼:
實現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的產生數字,修改一下,也是沒問題的.....