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

ppylox
·7/21/2022·5 阅读

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

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

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

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

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

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

1.pom.xml 引入官方包:

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

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

public String getAddressFromIp(String ip) {\n\n    // 获取当前应用目录,获取对应db文件,直接放到static目录下会提示找不到文件\n    ApplicationHome ah = new ApplicationHome(this.getClass());\n    String docStorePath = ah.getSource().getParentFile().toString();\n    String dbPath = docStorePath + "/ip2region.xdb";\n\n    Searcher searcher = null;\n    String region = "";\n    try {\n      searcher = Searcher.newWithFileOnly(dbPath);\n    } catch (io.jsonwebtoken.io.IOException | java.io.IOException e) {\n      System.out.printf("failed to create searcher with `%s`: %s\\n", dbPath, e);\n      return "";\n    }\n    //  String ip = "1.2.3.4";\n    try {\n      region = searcher.search(ip);\n    } catch (Exception e) {\n      log.info("获取ip失败");\n    }\n    return region;\n  }

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


评论 (0)

暂无评论,来写第一条吧