北斗星

Kratos
专注于用户阅读体验的响应式博客主题
  1. 首页
  2. 未分类
  3. 正文

IPIP.net 地址库格式分析

2019 年 4 月 18 日 1432 点热度 0 人点赞 0 条评论

IP 数据库在互联网时代起着举足轻重的作用,例如电商网站的风控系统、通讯软件的登录系统,通常都会将用户的登录 IP 作为一个重要指标进行甄别,因此 IP 数据库的精确性就显得格外重要。

目前网络上提供离线数据库下载的有 qqwry 纯真、IPIP.net、MaxMind 三家。其中 IPIP.net 宣称是基于各电信运营商以及网络服务的 BGP/ASN 数据而分析处理而得来,目前也有众多的知名企业在使用。

2018 年 6 月,IPIP.net 宣布进军 IPv6。在 2019 年 1 月左右,老高在官方放出了全新的 ipdb 格式,能够同时兼容 IPv4/IPv6 地址的查询,另外也大幅提升查询速度。本文就重点来分析一下 ipdb 的文件格式。

基本结构

ipdb 文件在结构上分为三层:文件头、节点区、记录区。

文件头

ipdb 的文件头就是一个简单的 JSON,前 4 个字节表示了 JSON 字符串的长度。

JSON 中提供了数据库的构建时间、节点的数量、多语言的偏移量、支持的字段等等。

节点区

ipdb 的索引方式采用字典树 (trie) 的方式,首先将 IP 地址转换为二进制形式,然后从根节点开始,遇到二进制位为 0 的时候跳到左子树上,遇到 1 则跳到右子树上。

节点区由若干组节点组成,每组节点长度为 8-byte,其中前 4-byte 表示该节点的左儿子序号,后 4-byte 则是右儿子的节点序号。

举个栗子,我们先把 3.0.0.0  转换成二进制。假设 IPv4 根节点序号为 96,那么根据第 1 个二进制位 0,下一跳应该跳转到 96 节点的左儿子 97 上。以此类推,当跳到序号大于节点总数的时候 (还记得文件头中的信息吗),就意味着找到最终的数据了。

标签: 暂无
最后更新:2019 年 4 月 26 日

too

这个人很懒,什么都没留下

点赞
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 北斗星. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

京 ICP 备 15033693 号-3