2018-04-19 from--https://blog.csdn.net/dreamhougf/article/details/80008061

IPIP.NET地址库文件格式分析

  1. ipip库是什么?
  • ipip是一个ip地址库, 官网号称全球唯一一个基于各电信运营商,以及网络服务的BGP/ASN数据而分析处理而得来的IP库

ipip库有哪些特性

  • 地理数据标注准确: 国内的地址标注准确度高
  • 更新实时: 数据24小时实时更新
  • 提供CDN/DNS/VPN专版, 专为CDN、DNS、VPN用户设计(提供ACL格式)

ipip库提供文件格式

  • DAT[X]格式数据
  • TXT[X]格式数据
  • ACL格式数据(CDN专版)

TXTX格式数据分析

  1. TXT的文本格式简单清晰, 每行代表一个IP段, 总共有多少个IP段信息就有多少行
  2. 每行有15列信息, 每列均为该IP段代表的一个信息, 均已字符串格式表示, 列之间用\t(制表符)进行分割
  3. 每列分别表示如下信息:
  • 第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格式数据分析

  1. DATX格式都是16进制字节文件, 乍一眼看上去毫无头绪, 如下所示
  2. DATX分别有几个信息字段组成
  1. ————————————————
  2. |indexLen | flag |index | hole | info |
  3. ————————————————
  4. | 4 | 4*256*256 | ips*9 | 262144 | * |
  5. ————————————————
  • 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部分全部使用大端字节序