现在的位置: 首页 > 综合 > 正文

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

2013年02月13日 ⁄ 综合 ⁄ 共 899字 ⁄ 字号 评论关闭

有时我们需要检测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
}

抱歉!评论已关闭.