awk实现IP数字转换
因工作需要需要将IP地址转成数字形式存储,写了一个awk脚本实现.
源码如下:
mounix.com:~> cat ipconvert
-----------------------------------------------------------
#!/bin/bash
#
#
NUM2IP () {
echo |awk -v IPNUM=$1 '{ for (I = 4 ; I >=1; I-- ){
printf (IPNUM % (256^I)- (IPNUM % 256^(I-1)))/256^(I-1)
if (I >1 ) printf "."
}
printf "\n"
}'
}
IP2NUM () {
echo $1 |awk 'BEGIN{NUM=0 ; FS="."}{for (I = NF ; I >=1; I-- )
NUM=$I*256^(NF-I)+NUM
}END{printf "%d\n",NUM}'
}
if [ $# -ne 2 ] ;then
echo "Usage: $0 -c ip_address or $0 -r num2convert"
exit 1
fi
if [ $1 = "-c" ] ; then
IP2NUM $2
elif [ $1 = "-r" ] ; then
NUM2IP $2
fi
-----------------------------------------------------------
mounix.com:~>
运行结果如下:
mounix.com:~> sh ipconvert -c 192.168.1.1
3232235777
mounix.com:~> sh ipconvert -r 3232235777
192.168.1.1
mounix.com:~>
====
原理: IP分成四个字段,每个字段*256的N次方相加得到数字
192.168.1.1
转成数字:
192*256^3 + 168*256^2 + 1*256^1 + 1*256^0=3232235777
3232235777
转成IP:
I=4,3,2,1 按以下公式运算.
%:取模
^:求幂
/:除法
(IPNUM % (256^I)- (IPNUM % 256^(I-1)))/256^(I-1)
阅读(3738) | 评论(0) | 转发(0) |