免费注册 查看新帖 |

Chinaunix

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

[源码] 纯php实现ip或ip段转换地名或其它解释 [复制链接]

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

2008/04/09 更新程序,修正 MIC_make_data.php 的一处小错误
在线演示: http://www.hightman.cn/demo/MyIpConv/demo.php
下载: 参见附件 (不含文本数据, 太大了,麻烦, 从纯真中转或自己建立)

用于将IP地址范围转换成描述字符串,常用于IP位置查询,城市查询,ISP查询等。
纯 php 代码完成,不依赖任何扩展,采用二分查找定位IP区间,速度很快。
文本词典可兼容纯真IP数据库,提供程序脚本转换文本文件至本程序使用的数据。
经比较本词典最终生成的二进制文件比纯真结构还略小。
现在网上流行的基本上是采用纯真数据库,但该库自己修改不太方便,也不利于修
改成其它查询。

[说明]
./example.php             - 查询测试
./MIC_make_data.php       - 文本词典转换脚本
                            php MIC_make_data.php <文本文件> <输出的库文件>
./MIC_query.inc.php       - 查询主类
                            有: open($fpath), query($ip), version(void), close()
                            这几个方法
./mic.dat                 - 转换纯真IP库
./mic.txt                 - 纯真IP数据库

[txt词典说明]
// mic.txt 的格式为一行一条记录, 每条记录由 4 个字段组成, 字段之间用空格
// 或者制表符分开, 空格个数无所谓, 纯真 IP 的导出数据可直接使用, 只有最后
// 一个字段内部可以包含空格, 前三个字段不允许出现空格.
//
// 注: 对 mic.txt 无特别要求, 不需要事先排序, 也不需要范围调整, 转换程序会
//     自动进行修正, 以方便大家自行添加记录.  
//
//     当起起始 IP 使用 CIDR 计算方式时, 则省略 结束IP
//
// <起始IP> <结束IP> <解释1(通常为国别/省市)>  <解释2(具体其它说明,可以为空)>
//
// 如:
//
// 218.10.6.45     218.10.6.57     黑龙江省齐齐哈尔市 网通
// 218.10.6.58     218.10.6.58     黑龙江省齐齐哈尔市 梅里斯区雅尔塞镇欣欣网吧
// 218.10.6.75     218.10.6.75     黑龙江省齐齐哈尔市拜泉县 超人网吧
// 218.10.6.59     218.10.6.74     黑龙江省齐齐哈尔市 网通
//
// 210.32.0.0/16                   浙江省杭州市  浙江大学
//

[dat数据结构]
文本数据较为简单,文中所有的整型数据均以 Little endian 方式存储。解释如下:
1. 前4字节固定为:CTIP
2. 第 4 ~ 8 字节:索引记录的条数
3. 紧接着是索引记录,每一条索引为 12 字节,三个整数。
   分别为:起始IP地址,解释1的相对偏移,解释2的相对偏移。
4. 索引数据根据起始IP线性排列
5. 索引数据之后另外还有 12 字节的数据,依次为最后一条索引记录的
   [终止IP] [解释1的数据总长] [词典生成时间戳]
6. 再紧接着就是解释1的数据,每条解释的数据第一字节的ASCII值代表数据的长度,
   然后紧接着就是解释数据字符串。
   (这样做的目的是为了重用这些解释字符串)
   解释1的绝对偏移 = (索引记录条数) * 12 + 20 + 解释1的相对偏移
7. 解释2的数据存取类似解释1
   解释2的绝对偏移 = (索引记录条数) * 12 + 20 + 解释1的总长度 + 解释2的相对偏移

[其它应用]
除可以查询IP所在地外,可以通过自己制作文本数据库再加以转换以便判断用户的来源ISP
(典型如网通、电信、教育网、海外)然后自动跳转到相应的域名或IP,以求得最好的用户
访问速度。

--
后语:希望大家共享自己的相关IP数据数据

[ 本帖最后由 hightman 于 2008-4-9 18:49 编辑 ]

MyIpConv-0.1.rar

7.2 KB, 下载次数: 818

mic.dat.rar

1.82 MB, 下载次数: 1589

论坛徽章:
0
2 [报告]
发表于 2008-03-11 17:12 |只看该作者
很实用的东东,顶!!!!

论坛徽章:
0
3 [报告]
发表于 2008-03-11 18:45 |只看该作者
收藏了

论坛徽章:
0
4 [报告]
发表于 2008-03-11 18:47 |只看该作者
研究看看.
感谢分享.

论坛徽章:
0
5 [报告]
发表于 2008-03-11 21:49 |只看该作者
研究看看.
感谢分享.

论坛徽章:
0
6 [报告]
发表于 2008-03-11 21:54 |只看该作者
不知道我这个水平能不能算研究哦!!下下看看.顶!!!!!!!!!!!!!

论坛徽章:
0
7 [报告]
发表于 2008-03-11 23:33 |只看该作者
要怎么才能只提取诚市不要全部的信息呢
比如

四川省成都xxxxx 电信ADSL

我只要提取成都两个字要怎么做呢

论坛徽章:
0
8 [报告]
发表于 2008-03-12 08:44 |只看该作者
原帖由 zjq8188 于 2008-3-11 23:33 发表
要怎么才能只提取诚市不要全部的信息呢
比如

四川省成都xxxxx 电信ADSL

我只要提取成都两个字要怎么做呢

只要格式都一样,可以试着将只取省后面市前面的几个字符,大数据量下,还是用正则比较好

论坛徽章:
0
9 [报告]
发表于 2008-03-12 08:54 |只看该作者
好东西啊,不错

论坛徽章:
0
10 [报告]
发表于 2008-03-12 10:15 |只看该作者
收藏.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP