|
#!/bin/bash
#version 1
#created by com`k
#51cto ID:jingkonglanxing (净空蓝星)
#脚本功能:实现输入一个标准网段,如192.168.0.0 24,其中24表示掩码,24和前面IP间有空格
read -p "请输入你要测试的网段:如192.168.0.0 24,只支持标准掩码8 16 和24:" string
declare -i sum=0 ###sum 用于统计在线主机数目,及在统计过程中做数组OnlineHostlist的下标
quitScript() {
echo "User Interrupt ,Quit..."
echo "the total number of online hosts is $sum"
echo "The online host are:"
echo "${OnlineHostList[@]}" ###支持Ctrl+c中断
}
declare -a OnlineHostList ###数组用于存放在线的主机
trap 'quitScript; exit 5' SIGINT
subnet=`echo $string|cut -d"." -f1-3`
cnetPing() {
for i in {1..254}; do
if ping -c 1 -n -i 0.01 -W 0.1 $subnet.$i &> /dev/null; then
echo "$subnet.$i is up.";
OnlineHostList=([$sum]=$subnet.$i)
let sum=$sum+1
else
echo "$subnet.$i is down."
fi
done
}
bcnetPing() {
##B类网络引用C类网络时,C类网络最后一个地址可以是255,因为255对于B类###网络来说不一定是广播地址
for m in {1..255}; do
if ping -c 1 -n -i 0.01 -W 0.1 $subnet.$i &> /dev/null; then
echo "$subnet.$i is up.";
OnlineHostList=([$sum]=$subnet.$i)
let sum=$sum+1
else
echo "$subnet.$i is down."
fi
done
}
bnetPing() {
for j in {0..254}; do
bcnetPing $subnet.$j
done
cnetPing $subnet.255 ####以防出现255.255结尾的广播地址
}
abnetPing() {
for l in {0..255}; do
bcnetPing $subnet.$j
done
cnetPing $subnet.255 ####以防出现255.255结尾的广播地址
}
anetPing() {
for m in {0..254}; do
abnetPing $subnet.$m
done
bnetPing $subnet.255 ####原理同上
}
netType=`echo $string|cut -d" " -f2`
if [[ $netType == 8 ]];then
anetPing $netType
elif [[ ${netType} == 16 ]]; then
bnetPing $(echo $subnet | cut -d'.' -f1,2)
elif [[ $netType == 24 ]]; then
cnetPing $(echo $subnet | cut -d'.' -f1-3)
else
echo "Wrong"
exit 2
fi
echo "the total number of online hosts is $sum"
echo "The online host are:"
echo "${OnlineHostList[@]}"
|
|
|
|
|
|
|