免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1199 | 回复: 0
打印 上一主题 下一主题

将IP地址转换为整数类型 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-23 16:53 |只看该作者 |倒序浏览

很多程序需要对用户IP范围进行限制,如果使用直接IP地址方式对比的话性能很不好,通常是将IP地址转换为整数,类似“2130706433”这样,这个数字就是代表“127.0.0.1”这个IP地址,这里介绍两种转换方式:
1.用mysql进行转换,mysql自带了两个函数inet_aton()和inet_ntoa(),例如:
mysql> select inet_aton(’127.0.0.1′);
+————————+
| inet_aton(’127.0.0.1′) |
+————————+
|             2130706433 |
+————————+
1 row in set (0.00 sec)
mysql> select inet_ntoa(’2130706433′);
+————————-+
| inet_ntoa(’2130706433′) |
+————————-+
| 127.0.0.1               |
+————————-+
1 row in set (0.00 sec)
2.利用脚本进行计算
1)将IP转换为整数:
#!/bin/sh
if [ $# -eq 0 ];then
echo ” Usage: ip2int.sh ip”
exit
fi
a=`echo $1|cut -d\. -f1`
b=`echo $1|cut -d\. -f2`
c=`echo $1|cut -d\. -f3`
d=`echo $1|cut -d\. -f4`
itip=`expr  $a \* 256 \* 256 \* 256 + $b \* 256 \* 256 + $c \* 256 + $d `
echo $itip
2)将整数转换为IP:
#!/bin/sh
if [ $# -eq 0 ];then
echo ” Usage: int2ip.sh IntNum”
exit
fi
itip=$1
a=$(($itip/256/256/256));
b=$(($itip/256/256-$a*256));
c=$(($itip/256-$a*256*256-$b*256));
d=$(($itip-a*256*256*256-$b*256*256-$c*256));
echo $a”.”$b”.”$c”.”$d;


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/71107/showart_1661919.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP