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

ppylox
·7/21/2022·1 阅读
AI 摘要模型根据正文自动生成,仅供参考

本文介绍如何使用开源库ip2region实现IP归属地查询。该库为离线IP数据管理框架,官方db文件约11MB,可查得如“美国|0|华盛顿|0|谷歌”格式结果。Java接入步骤:在pom.xml引入ip2region 2.6.4依赖;将ip2region.xdb放于jar包同目录,通过ApplicationHome获取jar所在目录拼接db路径,用Searcher.newWithFileOnly创建查询器并调用search(ip)返回归属地。作者指出db放static目录或写死路径打包运行会报找不到文件,故采用此方式。

最近看到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了。


相关文章