通過ping網段中的IP位址,根據傳回的狀态資訊,判斷主機的網絡狀态。
下面分享兩個可以實作這個功能的shell腳本。
腳本1,
複制代碼 代碼示例:
#!/bin/sh
# Ping網段所有IP
# 2012/02/05
ip=1 #修改初值
while [ $ip != "254" ]; do
#yes正常,no主機不存在或不正常
ping 192.168.0.$ip -c 2 | grep -q "ttl=" && echo "192.168.0.$ip yes" || echo "192.168.0.$ip no"
ip=`expr "$ip" "+" "1"`
done
輸出結果:
192.168.0.1 yes
192.168.0.2 no
192.168.0.3 no
192.168.0.4 no
192.168.0.5 yes
192.168.0.6 no
192.168.0.7 yes
筆者在自己的網絡中測試的結果如下:

如果以上輸出全部為no的話,則可能主機上通過iptables禁用了ping。
腳本2,
複制代碼 代碼示例:
#!/bin/sh
# Ping網段所有IP
ip="192.168.0."
for i in `seq 1 254`
do
ping -c 2 $ip$i | grep -q 'ttl=' && echo "$ip$i yes"|| echo "$ip$i no"
#yes正常,no主機不存在或不正常
done
輸出結果:
192.168.0.1 yes
192.168.0.2 no
192.168.0.3 no
192.168.0.4 no
192.168.0.5 yes
192.168.0.6 no
192.168.0.7 yes
最後,介紹下用于ping多個域名的一段shell腳本。
通過ping指令,找出域名與IP位址的對應關系。
代碼如下:
複制代碼 代碼示例:
#!/bin/sh
# filename ping.sh
# edit by www.jquerycn.cn
for a in `cat list`;do
ping -c 1 $a;
done
運作腳本:
#./test.sh
代碼說明:
1,在運作腳本之前,建立list檔案,裡面寫入要檢測的域名,一行一個。
形如:
a.jquerycn.cn
b.jquerycn.cn
c.jquerycn.cn
...等等。2,-c 是ping的參數。-c 1 表示ping完成一次。
附,ping參考。
參 數:
-d 使用Socket的SO_DEBUG功能。
-c 設定完成要求回應的次數。
-f 極限檢測。
-i 指定收發資訊的間隔時間。
-I 使用指定的網絡界面送出資料包。
-l 設定在送出要求資訊之前,先行發出的資料包。
-n 隻輸出數值。
-p 設定填滿資料包的範本樣式。
-q 不顯示指令執行過程,開頭和結尾的相關資訊除外。
-r 忽略普通的Routing Table,直接将資料包送到遠端主機上。
-R 記錄路由過程。
-s 設定資料包的大小。
-t 設定存活數值TTL的大小。
-v 詳細顯示指令的執行過程。