|
[源码] 纯php实现ip或ip段转换地名或其它解释
|
|
2008-03-11, 04:59 PM
(这个帖子最后修改于: 2010-06-10 08:28 PM by hightman.)
帖数: #1
|
|||
|
|||
|
[源码] 纯php实现ip或ip段转换地名或其它解释
[功能]
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数据数据 |
|||
|
2008-03-11, 05:03 PM
(这个帖子最后修改于: 2010-06-10 08:28 PM by hightman.)
帖数: #2
|
|||
|
|||
|
RE: [源码] 纯php实现ip或ip段转换地名或其它解释
顺便发个做好的词典
|
|||
|
2008-03-16, 08:02 PM
帖数: #3
|
|||
|
|||
|
和演不一样啊
演示的三种方案 IP 地址: 222.74.195.35的查询结果: 纯真库:内蒙古锡林浩特市 时尚网吧 地区库:内蒙古/锡林郭勒/锡林浩特 珊瑚库:内蒙古 电信 |
|||
|
2008-04-01, 09:37 PM
帖数: #4
|
|||
|
|||
|
在线演示就是三个库一起查,其它都一样
|
|||
|
2008-08-16, 10:02 AM
帖数: #5
|
|||
|
|||
|
发觉不能以域名查~
在演示里虽能以域名查~但也显示出IP 不知能否改进一下~ |
|||
|
|

搜索
会员列表
日历
帮助


