MMDB ip地址库操作

@(JAVA)[java]

MMDB即Maxmind DB,是一个设计用于存储IPv4和IPv6的数据信息的数据库,mmdb文件是一个二进制格式的文件,它使用一个二分查找树加速IP信息的查询。

1、数据格式说明

{continent => {                    //大洲code        => string,        //大洲代码,如AS,可能为空names       => {              //大洲名称en      => string,        //大洲英文名称,如Asia,可能为空zh_CN   => string,        //大洲中文名称,如亚洲,可能为空},},country   => {                    //国家iso_code    => string,        //国家iso代码,如CN,可能为空names       => {              //国家名称en      => string,        //国家英文名称,如China,可能为空zh_CN   => string,        //国家中文名称,如中国,可能为空},},subdivisions => {                 //省份iso_code    => string,        //省iso代码省ISO代码,如44,可能为空names       => {              //省份名称en      => string,        //省份英文名称,如Guangdong,可能为空zh_CN   => string,        //省份中文名称,如广东,可能为空},},city      => {                    //城市id          => int,           //城市id,如440000,可能为空names       => {              //城市名称en      => string,        //城市英文名称,如Guangzhou,可能为空zh_CN   => string,        //城市中文名称,如广州,可能为空},},location  => {                    //地理位置latitude    => double,        //纬度,可能为空longitude   => double,        //经度,可能为空time_zone   => string,        //时区,可能为空},isp       => {                    //运营商id          => int,           //运营商id,可能为空names       => {              //运营商名称zh_CN   => string,        //运营商中文名称,如电信,可能为空},
}

其中:
* 国家ISO代码可以参考维基百科ISO_3166-2。
* 省ISO代码,国内的省ISO代码均为该省公民身份证号的前两位。国外的省ISO代码可能存在为英文的情况,不一定全是数字。具体可以参考维基百科ISO_3166-2。
* 城市id,只有中国IP存在城市id(包含港澳台),该城市id为该城市公民身份证号的前6位。具体可以参考国家统计局网站。
* 运营商id,只有中国大陆的IP存在运营商字段,现有id规则如下:电信10000,联通10010,移动10086,铁通10050,教育网985211,鹏博士600804,华数96171,方正网络9990,歌华网络96196,阿里云1688,其他(包括国内未知)1,国外ip的运营商id为空。
* 运营商名称,中文,如电信,可能为空,只有中国大陆的IP才可能存在运营商字段,中国大陆的IP也可能存在未知运营商的情况,此时运营商字段也为空。
* 使用程序语言解析mmdb的数据可能返回数组、字典或哈希表数据(视编程语言而定)。

2、java读取mmdb文件

可以使用maxmind-db库。在pom.xml中添加以下内容:

    <dependency><groupId>com.maxmind.db</groupId><artifactId>maxmind-db</artifactId><version>1.2.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.7.0</version></dependency>

代码如下:

public class IpDemo {public static void main(String[] args) throws Exception {File database = new File("resources/ip.mmdb");Reader reader = new Reader(database);InetAddress address = InetAddress.getByName("24.24.24.24");JsonNode response = reader.get(address);System.out.println(response);reader.close();}
}

其中ip.mmdb放在resources目录下,这相目录是src folder。输出如下:

{"location":{"time_zone":"America/New_York","longitude":-76.1474,"latitude":43.0481},"isp":{"id":0,"names":{"zh_CN":""}},"continent":{"names":{"zh_CN":"北美洲","en":"North America"},"code":"NA"},"subdivisions":{"names":{"zh_CN":"纽约州","en":"New York"},"iso_code":"NY"},"country":{"names":{"zh_CN":"美国","en":"United States"},"iso_code":"US"},"city":{"id":0,"names":{"zh_CN":"锡拉丘兹","en":"Syracuse"}}}

MMDB ip地址库操作相关推荐

  1. IP问问区县级别IP地址库---使用帮助(上篇)

    应广大IP地址库爱好者的要求,埃文科技将IP问问区县级IP地址库的使用帮助发布,供大家在使用过程中参考. 1.IP问问区县级IP库介绍 大家在埃文商城(https://mall.ipplus360.c ...

  2. ThinkPHP中IP地址定位,包括IP地址库文件

    前几天,研究了一下TP中IP地址定位,着实费了一些时间,现在解决了,分享给大家. IP地址库有点大,去这里下载http://download.csdn.net/detail/man_quan/4636 ...

  3. java ip地址相关操作

    java ip地址相关操作 @(JAVA)[scala] 参考CORE JAVA. 在JAVA中,InetAddress类用于操作与IP地址相关的内容,常用方法如下: java.net.InetAdd ...

  4. 站长工具--IP地址库

    中国最全的IP地址库 转载于:https://www.cnblogs.com/weloveshare/p/5783438.html

  5. spring boot 整合 ip2region(ip地址库)

    Ip2region是什么? ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java,php,c,python,nod ...

  6. IP地址库介绍 (转)

    IP地址库介绍 摘要 在CDN系统中,IP地址库在流量调度.网络服务质量监测等方面起到重要的作用,本文主要介绍了IP地址库的功能.内容以及IP地址库的生成和评价方法 什么是IP地址库? 所谓IP地址库 ...

  7. 分享淘宝的IP地址库查询接口

    以前用过腾讯和新浪的IP地址库查询接口,由于不能直接传递IP数据,所以只能从前端用JS获取用户地址信息.也用过纯真的IP数据库,为了保持数据准确,所以就得不断的更新这个数据库,稍微麻烦一些,这次分享一 ...

  8. 如何在庞大的ip地址库中快速定位到对应的ip地址所对应的归属地?

    通过ip地址查看 ip地址的归属地,这个功能实现起来并不复杂,它是通过维护一个很大的ip地址库来实现的,比如查找 202..133.3 该ip地址库,那便会在对应的ip地址库中找到 一个区间 如 [2 ...

  9. 通过ip地址访问操作远程Mysql数据库

    通过ip地址访问操作远程Mysql数据库(数据库学习笔记 (三)) 可能使用的工具· 问题描述 远程数据库配置 本地连接 可能使用的工具· Navicat Premium XXX版本 各类数据库(仅以 ...

最新文章

  1. php正则表达式函数 preg_replace用法
  2. Hadoop对Spark:正面比拼报告(架构、性能、成本、安全性和机器学习)
  3. 推荐安装的chrome插件
  4. 1185 威佐夫游戏 V2
  5. 一行代码引来的安全漏洞,就让我们丢失了整个服务器的控制权
  6. 为系统扩展而采取的一些措施——异步
  7. 【Flink】Flink CDH6.3.2 下的yarn per job模式 savepoint和checkpoint,卡住,没有保存成功文件
  8. python机器学习案例系列教程——关联分析(Apriori、FP-growth)
  9. 踢向《英雄王座》的面目全非脚
  10. 盘点:12个超炫数据可视化工具
  11. 零基础安卓手游辅助开发入门视频教程
  12. 数商云:疫情之下钢铁行业的数字化转型之道
  13. CF120F Spiders 题解
  14. winrar破解注册
  15. 详解 Java 日期与时间
  16. 思途旅游CMS短信宝短信插件
  17. mos中Port-Specific的意思
  18. Linux多功能下载机(Arias2)
  19. 云呐|加强实验室固定资产设备在线信息化管理
  20. 3.24 使用海绵工具制作变异的白虎 [原创Ps教程]

热门文章

  1. 14行代码满分:1037 在霍格沃茨找零钱 (20分)
  2. method=post和method=get的区别是啥【汇总】
  3. 【超全解析】原码、反码、补码、移码的相互转化和解读(取值范围)
  4. 蓝桥杯 试题 基础练习 芯片测试——12行代码AC
  5. 浅谈万进制算法与大数定理的结合(高精度乘除法,阶乘)
  6. Mysql数据库(四)——mysql索引相关知识
  7. minigui linux 安装与运行
  8. java查询类提供的方法_查询一个类的方法和构建器的JAVA程序
  9. python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...
  10. css中float详解,CSS浮动属性Float详解?史上最全Float详解