您的位置:首页 > 运维架构 > Shell

shell 检测网段在线主机

2012-10-10 01:41 323 查看
作业四:

写一个脚本:

实现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的生成数字,修改一下,也是没问题的.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 ping shell 网段