ZX IPv6数据库格式分析

本篇是ZX Inc的IPv6数据库中的数据存储格式分析,在多次修改和热心读者帮助下已经写出了整个结构。

ZX IPv6数据库下载地址:http://ip.zxinc.tk/

如果您想要使用本篇介绍的内容,请先参考页面上方或下方的许可协议!

以下是我以ZX 20110430版本数据库为例的分析结果:

0x0000 – 0x0003:ASCII “IPDB”(0x49 50 44 42),用来识别数据库类型。

0x0006:Byte 2(0x02),这是偏移地址长度。这个长度用于下方[1]处。

0x0007:Byte 8(0x08),这是IP地址长度。这个长度用于下方[2]处。

0x0008 – 0x000F:Int64 15725(0x6D 3D 00 00 00 00 00 00),这是数据库中的记录总条数。

0x0010 – 0x0017:HEX(0xF6 89 00 00 00 00 00 00),这是数据库地址段的开始位置。下面跳到这个地址(0x89F6)。

0x89F6 – 0x89FD [2]:IPv6(0x00 00 00 00 00 00 00 00),这是一个IPv6 /64段的记录起始地址,终止地址是下一条记录起始地址减1。

0x89FE – 0x89FF [1]:HEX(0xBB 88),这是本条记录对应的地理信息在数据库中的位置。下面跳到这个地址(0x88BB)。

0x88BB – 0x88BD:HEX(0x02 53 62),0x01和0x02开始的标志意味着跳转,后两个字节就是跳转地址。下面跳到这个地址(0x6253)。

0x6253 – 0x6263:UTF-8 String “IANA保留地址”(0x49 41 … 00),这是一个UTF8的字符串,以0x00结尾,也就是上述IP段对应的地理信息。每条IP记录对应两个地理信息的字符串(例如“山东省济南市 山东大学”),因此下面跳回到刚才的地址来获取第二段。

0x88BE:UTF-8 String(空,0x00)。如果开头不是0x01或0x02即为直接字符串,0x00结束说明为空串。之后跳回下一条IP记录(0x8A00)继续读取即可。一共读取15725次,其实只有15724条有效记录,最后一条记录(0xFF FF FF FF FF FF FF FF)对应的是数据库的版本信息,但是可以用来计算倒数第二条的结束地址(但是建议直接用这个地址作为倒数第二条记录的结束地址)。

以上就是整个数据库的数据部分格式,下方comment(不是大神就是原作者)的帮助下已经补充全了整个数据部分的内容,感谢这位未署名的游客的协助。我的这个分析是从提取数据的算法角度来写的,comment中的是整个数据库的格式总览,表达的意义是相同的。

如果您想要使用本篇介绍的内容,请先参考页面上方或下方的许可协议!

4 thoughts on “ZX IPv6数据库格式分析

  1. 文件头
    0~3 字符串 "IPDB"
    4~5 short 版本号,现在是1
    6 byte 偏移地址长度(2~8)
    7 byte IP地址长度(4或8或12或16, 现在只用8)
    8~15 int64 记录数
    16~23 int64 索引区第一条记录的偏移
    24~31 int64 保留

    记录区
    (没有结束IP地址)
    字符串 跟qqwry格式相同,采用UTF-8编码

    索引区
    +0~(0+IP长) little endian, 开始IP地址
    +IP长~(IP长+偏移长) little endian, 记录偏移地址

发表评论

电子邮件地址不会被公开。 必填项已用*标注