目? ? ? ? ? ? ? ? ? ? ?錄
一、需求說明
二、解決方案
(一)解決思路
(二)方案
三、腳本程序實現
(一)腳本代碼和解釋
1、腳本代碼
2、代碼解釋
(二)腳本驗證
1、腳本編輯
2、給予執行權限
四、擴展
一、需求說明
????? 一個網絡中,經常會出現不知道一個主機、或者一個設備的IP地址,但是我們知道他在哪個范圍。在windows系統中,有一些工具可以實現,但是在linux中,如何能快速實現呢?更進一步,如何能夠統計出在線網絡設備和不在線網絡設備的數量呢?
二、解決方案
(一)解決思路
????????查找某個設備是否在線,也就是看它是否正常在運行,我們最常用的是ping命令。大部分的網絡設備都是可以進行ping回應的,ping不需要開任何端口,工作在IP層。所以,我們可以在腳本中查看ping的成功與否,來判斷設備是否在線。
(二)方案
?????? (1)定義IP地址的范圍
?????? (2)編寫循環遍歷語句
?????? (3)在循環語句中,遍歷所有的ip地址,并ping這些地址
?????? (4)根據成功與否,來判斷是否在線?同時通過累加,統計在線和不在線的數量。
三、腳本程序實現
????????直接把腳本寫出來,分享給大家。
(一)腳本代碼和解釋
1、腳本代碼
????????如下為編寫的bash代碼:
#!/bin/bash
ip=192.168.1.
j=0
k=0
for i in `seq 3 102`
do
ping -c 3 $ip$i &> /dev/null
if [ $? -eq 0 ];then
echo 在線的主機有:$ip$i
let k++
else
let j++
echo $ip$i >> /tmp/ip.txt
date >> /tmp/ip.txt
fi
done
echo 不在線的主機臺數有 $j
echo 在線的主機臺數有 $k
2、代碼解釋
(1)ip=192.168.1.:定義一個變量ip,并賦值為192.168.1.。
(2)j=0:定義一個變量j,并初始化為0。這個變量主要用于跟蹤不在線的主機數量。
(3)k=0:定義一個變量k,并初始化為0。這個變量主要用于跟蹤在線的主機數量。
(4)for i in seq 3 102``:這是一個for循環,使用seq命令生成從3到102的數字序列,每個數字都賦值給變量i。
(5)do:for循環的開始。
(6)ping -c 3 $ip$i &> /dev/null:使用ping命令檢查主機是否在線。-c 3參數表示發送3個ping請求。$ip$i是將ip變量和i變量的值連接起來,形成完整的IP地址。&> /dev/null是將所有的輸出(標準輸出和標準錯誤)都重定向到/dev/null,也就是忽略所有的輸出。
(7)if [ $? -eq 0 ];then:$?是一個特殊的變量,它保存了上一個命令的退出狀態。如果ping命令成功(即主機在線),它的退出狀態是0。
(8)echo 在線的主機有:$ip$i:如果主機在線,輸出該主機的IP地址。
(9)let k++:將變量k的值加1,用于跟蹤在線的主機數量。
(10)else:如果主機不在線...
(11)let j++:將變量j的值加1,用于跟蹤不在線的主機數量。
(12)echo $ip$i >> /tmp/ip.txt:將不在線的主機的IP地址追加到/tmp/ip.txt文件中。
(13)date >> /tmp/ip.txt:將當前的日期也追加到/tmp/ip.txt文件中。
(14)fi:if語句的結束。
(15)done:for循環的結束。
????????在執行完這個腳本后,你會在/tmp/ip.txt文件中看到所有不在線的主機的IP地址和它們被檢測為不在線的日期。
(二)腳本驗證
1、腳本編輯
??????? 使用編輯器,比如vi,把代碼輸入進去;
??????? 保存這個腳本到一個文件中,比pc_online.sh
2、給予執行權限
????? chmod +x w pc_online.sh
3、運行腳本,查看效果
???? 可以運行這個腳本來檢查進程的運行情況,如下:
[root@localhost home]# sh pc_online.sh
在線的主機有:192.168.1.3
在線的主機有:192.168.1.5
在線的主機有:192.168.1.6
在線的主機有:192.168.1.8
在線的主機有:192.168.1.23
在線的主機有:192.168.1.37
在線的主機有:192.168.1.39
在線的主機有:192.168.1.40
在線的主機有:192.168.1.41
在線的主機有:192.168.1.44
在線的主機有:192.168.1.48
在線的主機有:192.168.1.49
在線的主機有:192.168.1.54
在線的主機有:192.168.1.58
在線的主機有:192.168.1.68
在線的主機有:192.168.1.89
在線的主機有:192.168.1.100
在線的主機有:192.168.1.101
在線的主機有:192.168.1.102
在線的主機臺數有 19
不在線的主機臺數有 81[root@localhost home]#
四、擴展
? ? ? ? 在實際使用中,你可能查看其他網段特定范圍的主機情況,你可稍微做些修改,就可以適合您的應用了。比如,也可以查看192.1.10.1~254,你可以更改如下兩行命令即可:
ip=192.1.10.for i in `seq 1 254`