自己写的一个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爆了,哈哈
原文:https://www.cnblogs.com/wangle0529/p/8981866.html