“qqwry.dat的数据结构图文解释第1/2页”的完整攻略
1. 什么是qqwry.dat?
qqwry.dat
是一个IP地址库,包含了全球的IP地址信息,例如:所属国家、所属地区、详细地址等信息。在大多数系统或应用程序中,都可以使用qqwry.dat
来查询IP地址信息。
2. qqwry.dat的数据结构
qqwry.dat
的数据结构可以通过两个文件来描述:
qqwry.dat
文件readme.txt
文件
下面我们来详细了解一下qqwry.dat
的数据结构。
2.1 qqwry.dat文件
qqwry.dat
文件中的数据结构主要分为两个部分:
- 索引区(index)
- IP地址区(ip)
2.1.1 索引区(index)
索引区域主要包括2个部分:
- 重定向区
- 索引区
(1) 重定向区
前4个字节是重定向信息,代表当前索引对应的地址记录需要使用重定向方式获取下一个地址记录,这时候当前地址记录的前4个字节会被当做偏移量再进行一次查找。如果查找到的地址记录还是重定向类型,则需要继续使用相同的方式进行查找,直至查找到的地址记录为非重定向类型为止。
(2) 索引区
索引区的数量与ip地址的数量相同,每个索引区都对应一个ip地址,每个索引区包括以下信息:
- IP地址
- IP地址对应地址记录的偏移量
因为一个ip地址占4个字节,一个索引区也占用4个字节,所以整个索引区的总大小为:4 * ip数量
索引区以ip地址的范围作为查询依据,例如:如果要查询一个ip地址x.x.x.x
,则可以使用二分法查找这个ip地址在索引区中的位置,然后再根据偏移量查找对应的地址记录。
2.1.2 IP地址区(ip)
IP地址区主要包括2个部分:
- 地址记录
- 结束标志
(1) 地址记录
每个地址记录占用大约7个字节,包括以下信息:
- IP地址段范围的开始地址
- IP地址段范围的结束地址
- 地址记录的详细信息
在读取IP地址时,先通过索引区确定ip地址的范围,再查找对应的地址记录,最后获取地址记录的详细信息。
(2) 结束标志
IP地址区的结束标志为0x00 0x00 0x00 0x00
,代表整个IP地址区的范围已经到达了终点。
2.2 readme.txt文件
readme.txt
文件描述了qqwry.dat
文件的一些基本信息和格式规范,包括以下内容:
- 文件头部分的说明
- 索引区的划分方法和结构
- IP地址区的划分方法和结构
- 文件字段的解释
- 文件更新的方法
3. 示例说明
示例1:查询IP地址某些字段信息
例如:查询qqwry.dat
中221.8.128.0
对应的信息,可以使用以下代码:
import qqwry
query = qqwry.QQwry()
result = query.lookup('221.8.128.0')
print(result)
输出结果:
('中国', '广东省深圳市', '鹏博士')
示例2:添加自定义ip地址
例如:想要添加一个自定义的ip地址记录,可以使用以下方式:
import qqwry
# 实例化查询对象
query = qqwry.QQwry()
# 添加缓存文件
query.load_file('qqwry.dat')
# 新增的自定义ip地址
new_ip = '192.168.1.1'
new_locate = 'test'
new_address = 'test address'
# author表示添加者的信息
author = {
'name': 'test user',
'email': 'test@site.com'
}
# 调用添加ip地址方法
query.create(new_ip, new_locate, new_address, author)
通过以上方式添加了一个192.168.1.1
的自定义地址记录,其中test
为所属地区,test address
为详细地址信息。可以在qqwry.dat
文件的最后几条记录中查询到该记录。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:qqwry.dat的数据结构图文解释第1/2页 - Python技术站