MMDB ip地址库操作

来源:互联网 发布:steam中mac游戏 编辑:程序博客网 时间:2024/06/10 10:19

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"}}}
原创粉丝点击