Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1134390
  • 博文数量: 113
  • 博客积分: 2422
  • 博客等级: 大尉
  • 技术积分: 1393
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-25 17:54
文章分类
文章存档

2016年(1)

2014年(8)

2013年(7)

2012年(13)

2011年(42)

2010年(26)

2009年(6)

2008年(6)

2007年(4)

我的朋友

分类:

2010-08-16 17:51:33

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)
 
阅读(3772) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~