有時我們需要檢測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 ]; then
return 1
else
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 ]; then
return 2;
fi
#驗證是否多點傳播位址
if [ $a -ge 224 -a $a -le 239 ]; then
return 3
fi
#驗證回環
if [ $a -eq 127 ]; then
return 4
fi
fi
return 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 ]; then
return 1
fi
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}'`
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 2
done
mask=$a$b$c$d
[[ "$mask" =~ ^1[1]*[0]*$ ]] || return 3
return 0
}