如何使用ip2region实现通过ip地址查到ip归属地

最近看到ip2region这个开源库,它是一个离线 IP 数据管理框架和定位库,简单说就是通过Ip地址可以查询到对应的归属地,比如通过1.2.3.4 这个地址可以查询到属地为【美国|0|华盛顿|0|谷歌】。

虽然它的数据是静态的,官方提供的也有11m大小,可以覆盖到一般的数据范围。

记得当时淘宝还根据这个开源库开发了一个ip查询网站,不过后续下线了。

那么个人网站想要接入接入这个功能要怎么实现呢?

简单做就是直接使用官方提供的db文件,然后引入官方的依赖包就可以。

以下为笔者使用Java接入记录:

1.pom.xml 引入官方包:

<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId>
    <version>2.6.4</version>
</dependency>

2. 查询功能实现,笔者是将db文件放到跟jar包同目录下,通过ApplicationHome  方法获取到当前jar包所在目录,再获取到db文件,放到static或者定义一个字符串地址在build成jar运行后笔者发现都会报错,笔者也不深究原因了,就用之前的方法来实现了。

public String getAddressFromIp(String ip) {

    // 获取当前应用目录,获取对应db文件,直接放到static目录下会提示找不到文件
    ApplicationHome ah = new ApplicationHome(this.getClass());
    String docStorePath = ah.getSource().getParentFile().toString();
    String dbPath = docStorePath + "/ip2region.xdb";

    Searcher searcher = null;
    String region = "";
    try {
      searcher = Searcher.newWithFileOnly(dbPath);
    } catch (io.jsonwebtoken.io.IOException | java.io.IOException e) {
      System.out.printf("failed to create searcher with `%s`: %s\n", dbPath, e);
      return "";
    }
    //  String ip = "1.2.3.4";
    try {
      region = searcher.search(ip);
    } catch (Exception e) {
      log.info("获取ip失败");
    }
    return region;
  }

3. 如果文件能正常找到,代码未报错,那么应该能正常查询到ip了。


本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):