jy166102 发表于 2018-8-24 07:38:47

shell 检测网段在线主机

  作业四:
  写一个脚本:
  
实现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 =~ ^(||1|2|22)\.(||1|2|25)\.(||1|2|25)$ ]];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的生成数字,修改一下,也是没问题的.....


页: [1]
查看完整版本: shell 检测网段在线主机