shell 检测ip的合法性与检测网络掩码的合法性

来源:互联网 发布:php pack("h*") 编辑:程序博客网 时间:2024/06/06 14:22

有时我们需要检测IP输入的正确性与网络掩码的正确性,用shell脚本写的:

#验证ip地址的正确性check_ip_format(){  echo $1 | grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null  if [ $? = 1 ]; thenreturn 1else a=`echo $1 | awk -F. '{print $1}'`b=`echo $1 | awk -F. '{print $2}'`c=`echo $1 | awk -F. '{print $3}'`d=`echo $1 | awk -F. '{print $4}'`if [ $a -ge 255 -o $a -le 0 -o $b -gt 255 -o $b -lt 0 -o $c -gt 255 -o $c -lt 0 -o $d -gt 255 -o $d -le 0 ]; thenreturn 2;fi#验证是否组播地址if [ $a -ge 224 -a $a -le 239 ]; thenreturn 3fi#验证回环if [ $a -eq 127 ]; thenreturn 4fifireturn 0}#把数字转换为二进制数字D2B(){num="$1"d2b=`echo "obase=2;$num" | bc`echo $d2b}#验证掩码的正确性check_mask_format(){echo $1 | grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null  if [ $? = 1 ]; thenreturn 1fia=`echo $1 | awk -F. '{print $1}'`b=`echo $1 | awk -F. '{print $2}'`c=`echo $1 | awk -F. '{print $3}'`d=`echo $1 | awk -F. '{print $4}'`a=`D2B $a`b=`D2B $b`c=`D2B $c`d=`D2B $d`for i in $a $b $c $d;do[[ $i != 0 && ${#i} != 8 ]] && return 2donemask=$a$b$c$d[[ "$mask" =~ ^1[1]*[0]*$ ]] || return 3return 0}