2018-04-19 from--https://blog.csdn.net/dreamhougf/article/details/80008061
IPIP.NET地址库文件格式分析
- ipip库是什么?
- ipip是一个ip地址库, 官网号称全球唯一一个基于各电信运营商,以及网络服务的BGP/ASN数据而分析处理而得来的IP库
ipip库有哪些特性
- 地理数据标注准确: 国内的地址标注准确度高
- 更新实时: 数据24小时实时更新
- 提供CDN/DNS/VPN专版, 专为CDN、DNS、VPN用户设计(提供ACL格式)
ipip库提供文件格式
- DAT[X]格式数据
- TXT[X]格式数据
- ACL格式数据(CDN专版)
TXTX格式数据分析
- TXT的文本格式简单清晰, 每行代表一个IP段, 总共有多少个IP段信息就有多少行
- 每行有15列信息, 每列均为该IP段代表的一个信息, 均已字符串格式表示, 列之间用\t(制表符)进行分割
- 每列分别表示如下信息:
- 第1列&第2列:IP段所属的起始和终止IP(点分十进制)
- 第3列:所属国家
- 第4列:所属省份
- 第5列:地级市/省直辖县级行政区
- 第6列:IP段所有者
- 第7列:所属运营商
- 第8列:城市/省份/国家中心点维度
- 第9列:城市/省份/国家中心点经度
- 第10列:所在时区代表城市
- 第11列:所在时区
- 第12列:中国行政区划代码(ISO_3166-1)
- 第13列:国际区号(ISO_3166-1)
- 第14列:国家代码(ISO_3166-1)
- 第15列:洲代码
DATX格式数据分析
- DATX格式都是16进制字节文件, 乍一眼看上去毫无头绪, 如下所示
- DATX分别有几个信息字段组成
- ————————————————
- |indexLen | flag |index | hole | info |
- ————————————————
- | 4 | 4*256*256 | ips*9 | 262144 | * |
- ————————————————
- flag区域是一个索引区域, 由IP的前两个字段组成的索引映射表(256*256大小的uint32数组),Key(下标)表示以该下标作为IP段起始IP前两个字段的IP段, 值(数组值)表示该下标起始的IP段集合的起始位置。
- 比如: 1.2.3.4/24就存储在下标(1*256 + 2 = 258)arr[258]=?的数组中进行映射, ?表示的是该段在IP段索引字段(index)中出现的序号。
- index区域是一个数组, 每个数组元素表示一个IP段的摘要信息, 摘要信息包含如下几个信息
- 每个摘要信息总共有9个字节组成, 分别表示如下三个信息
- IP段结束IP(4bytes), 表示该IP段的结束IP
- IP段的详细信息的相对偏移地址(3bytes),从index区域结束的地方开始计算偏移,比如第一个IP段的信息就是 262144+0 = 262144
- IP段信息的详细信息长度(2bytes), 确定了ip信息的起始位置和长度,就可以明确该IP段的所有信息
- hole区域是一个空洞区域, 该区域大小为256*256=262144, 不清楚具体是干什么的, 有了解的大神可以留言提供解答么?
- info区域是一个string数组, 数组中每个信息,存储了该IP段的所有坐标信息(TXT格式从第三列开始的信息), 每个信息段都已\t(制表符)进行分割
- indexLen区域, 讲完了其他区域再来讲第一个区域更好理解, indexLen表示了从flag区域开始, 到hole区域结束的字节长度, 统一表示为索引部分的总长度。
- 需要注意的地方
- indexLen部分为大端字节序写入
- flag部分的数组使用小端字节序
- index部分
- 结束IP使用大端字节序
- IP段的偏移地址使用小端字节序
- IP段的信息长度使用大端字节序
- info部分全部使用大端字节序