使用纯真IP库(CZ88)识别IP归属地,主要有两种方式:一种是传统的基于QQWry.dat文件的解析,另一种是官方推出的新版CZDB格式。下面我将详细介绍这两种方法,你可以根据自己的技术栈和需求选择。
请注意:纯真免费版IP库遵循GPLv3开源协议,这意味着你可以免费使用,但如果用于商业用途或研制闭源的同类产品,则需要留意协议约束或考虑使用其商业版API。
⚙️ 如何获取与使用
目前使用纯真IP库主要有两种方式,区别如下:
| 对比项 | 传统方式 (QQWry.dat) | 新方式 (CZDB + 密钥) |
|---|---|---|
| 数据格式 | 旧的.dat格式 | 新的.czdb格式 |
| 获取方式 | 从第三方网站或工具获取,官方已不再提供直接下载 | 需在官网注册账号并申请授权密钥后下载 |
| 支持IP类型 | IPv4 | IPv4和IPv6双支持 |
| 解析复杂度 | 较高,需要手动解析二进制文件格式 | 较低,官方提供各语言的解析库,开箱即用 |
| 维护难度 | 一般,需要手动更新.dat文件 | 简单,使用官方工具和密钥可方便地管理更新 |
方案一:使用传统的 QQWry.dat 文件 (以PHP为例)
这种方法适合习惯使用旧版文件,或在没有官网密钥的情况下使用。
获取数据文件:首先需要获取
QQWry.dat文件。虽然纯真官网已不再提供此格式的直接下载,但你可以通过网络搜索找到该文件的资源,或使用一些工具进行更新和导出。编写或使用解析类:接下来,需要编写代码来解析这个二进制文件。一个标准的PHP实现通常包含以下几个核心步骤:
初始化:打开
QQWry.dat文件,并读取文件头部的索引区起始和结束位置,计算出总的IP记录条数。IP地址转换:将待查询的点分十进制IP地址(如
114.114.114.114)通过ip2long()函数转换为一个长整数,方便进行范围比较。二分查找:利用二分查找算法,在IP记录索引区中快速定位到目标IP地址所属的地址段。
解析记录:根据定位到的偏移量,读取并解析该IP段对应的国家和地区信息。需要注意的是,文件中存储的地区信息是GBK编码的,在PHP中通常需要使用
iconv(GBK, UTF-8//IGNORE, $location)函数将其转换为UTF-8,以防止乱码。关闭文件:查询结束后,关闭文件句柄。