ip地址扫描

自己写的一个ip地址扫描的shell脚本,功能是输入ip地址和掩码,通过ping检测整个网段的ip地址,输出ping的结果。

主要的几个函数如下:

1、ip地址转化为数值,方便计算

ip2num()
{
    ip=$1
    a=`echo $ip |awk -F '.' '{print $1}'`
    b=`echo $ip |awk -F '.' '{print $2}'`
    c=`echo $ip |awk -F '.' '{print $3}'`
    d=`echo $ip |awk -F '.' '{print $4}'`
    num=$(($a*256*256*256+$b*256*256+$c*256+$d))
    echo $num
    echo "obase=10;(($num))"bc
}

2、数值转化为ip

num2ip()
{
    num=$1
    a=$(($num/(256*256*256)))
    #echo $a
    b=$(($num/(256*256)-$a*256))
    #echo $b
    c=$(($num/256-$a*256*256-$b*256))
    #echo $c
    d=$(($num-$a*256*256*256-$b*256*256-$c*256))
    #echo $d
    echo $a.$b.$c.$d >>ip.dat
    iptmp=$a.$b.$c.$d
}

3、cdr掩码转化为ip格式

cdr2mask ()
{
   # Number of args to shift, 255..255, first non-255 byte, zeroes
   set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
   [ $1 -gt 1 ] && shift $1 || shift
   #echo ${1-0}.${2-0}.${3-0}.${4-0}
   mask=${1-0}.${2-0}.${3-0}.${4-0}
}

4、ip格式掩码转化为cdr

mask2cdr ()
{
   # Assumes there's no "255." after a non-255 byte in the mask
   local x=${1##*255.}
   set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}
   x=${1%%$3*}
   echo $(( $2 + (${#x}/4) ))
}

5、由ip地址和掩码计算网络地址

net ()
{
    
    ip=$1
    a=`echo $ip |awk -F '.' '{print $1}'`
    b=`echo $ip |awk -F '.' '{print $2}'`
    c=`echo $ip |awk -F '.' '{print $3}'`
    d=`echo $ip |awk -F '.' '{print $4}'`

    mask=$2
    m=`echo $mask |awk -F '.' '{print $1}'`
    n=`echo $mask |awk -F '.' '{print $2}'`
    o=`echo $mask |awk -F '.' '{print $3}'`
    p=`echo $mask |awk -F '.' '{print $4}'`
    
    n1=$(($a&$m))
    n2=$(($b&$n))
    n3=$(($c&$o))
    n4=$(($d&$p))
    
    net=$((n1*256*256*256+n2*256*256+n3*256+n4))
#    echo $net
}

3、4两个函数直接用的网上大神的,写的很简洁,对比自己写的,感觉自己low爆了,哈哈

猜你喜欢

转载自www.cnblogs.com/wangle0529/p/8981866.html