天天看點

shell 檢測ip的合法性與檢測網絡掩碼的合法性

有時我們需要檢測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
}
           

繼續閱讀