- #!/bin/bash
- ## 判断IP是否私有地址
- ## $1 IP地址
- ## 返回: 0 是私有IP,
- ## 1 非私有IP,
- ## 2 输入有误
- is_local_ip (){
- local S_IP=$1
- echo $S_IP | egrep -q '^\\s*[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\s*$' || return 2
- #RANGES='10.0.0.0:10.255.255.255 172.16.0.0:172.31.255.255 192.168.0.0:192.168.255.255'
- ## 私有地址范围转为10进制整数后的值
- RANGES='167772160:184549375 2886729728:2887778303 3232235520:3232301055'
- ## xx占位 256^3 256^2 256 1
- STEP=(xx 16777216 65536 256 1)
- ## 转换IP为10进制整数
- ip2int(){
- local S_IP=$1
- local D_IP=0
- for i in {1..4};do
- T=`echo $S_IP | cut -d'.' -f$i`
- [ x$T = x0 -o "x$T" = "x" ] && continue
- D_IP=`expr $T \\* ${STEP["$i"]} + $D_IP`
- done
- echo $D_IP
- }
- for RANGE in $RANGES; do
- RANGE_S=${RANGE%:*}
- RANGE_E=${RANGE#*:}
- INT_IP=`ip2int $IP`
- if [ $INT_IP -ge $RANGE_S -a $INT_IP -le $RANGE_E ] ;then
- return 0
- fi
- done
- return 1
- }
- ### 下面是演示
- IPS='10.1.1.1 10.255.255.255 9.0.0.1 11.0.0.1 192.168.0.0 192.167.0.0 172.15.255.255 172.16.0.0 172.31.0.1 172.32.0.1 255.255.252.2x 172.16.9.255 10.3.5.0 255.10.255
- .0 172.172.6.0 10.172.0.1'
- for IP in $IPS;do
- if is_local_ip $IP ;then
- echo -e "$IP\\tTrue"
- else
- echo -e "$IP\\tFail"
- fi
- done
- #该片段来自于http://www.codesnippet.cn/detail/070520133164.html
来源: http://www.codesnippet.cn/detail/070520133164.html