IP获取归属地 1.通过地址库获取 如果使用api接口获取,可能会出现服务挂了,或者服务地址不提供服务了等问题。而采用本地地址库就没有这些问题。 本文采用离线IP地址定位库 Ip2region,Ip2region是一个离线I
如果使用api接口获取
,可能会出现服务挂了,或者服务地址不提供服务了等问题。而采用本地地址库就没有这些问题。
本文采用离线IP
地址定位库 Ip2region,Ip2region
是一个离线IP
地址定位库,微秒的查询时间:
访问官网GitHub地址:https://github.com/lionsoul2014/ip2region
找到data目录下的:ip2region.xdb文件下载下来
把ip2region.xdb文件放在resources目录下
在模块中引入Maven依赖
org.lionsoul ip2region 2.6.5
获取归属地:
private Searcher searcher;@Override public String getIpAddress(String ip){ if ("127.0.0.1".equals(ip) || ip.startsWith("192.168")) { return "|||局域网ip"; } if (searcher == null) { try { File file = ResourceUtils.getFile("classpath:db/data_ip2region.xdb"); String dbPath = file.getPath(); searcher = Searcher.newWithFileOnly(dbPath); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } String region = null; String errorMessage = null; try { region = searcher.search(ip); } catch (Exception e) { errorMessage = e.getMessage(); if (errorMessage != null && errorMessage.length() > 256) { errORMessage = errorMessage.substring(0, 256); } e.printStackTrace(); } // 输出 region System.out.println(region); return region; }
这里Searcher引用的是仓库里面的检索方法,到这里就完成了可以获取到ip对应的归属地。
public String getIpCity(String ip) { if ("127.0.0.1".equals(ip) || ip.startsWith("192.168")) { return "|||局域网ip"; } if (searcher == null) { try { //本地环境需要加上 classpath:// File file = ResourceUtils.getFile("db/data_ip2region.xdb");// String dbPath = file.getPath();// searcher = Searcher.newWithFileOnly(dbPath); //这里通过流获取 解决jar包无法读取文件问题 ResponseEntity test = test("db/data_ip2region.xdb"); searcher = Searcher.newWithBuffer(test.getBody()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } String region = null; String errorMessage = null; try { region = searcher.search(ip); } catch (Exception e) { errorMessage = e.getMessage(); if (errorMessage != null && errorMessage.length() > 256) { errorMessage = errorMessage.substring(0, 256); } e.printStackTrace(); } // 输出 region return region; } public static ResponseEntity test(String templateName) throws IOException { ClassPathResource classPathResource = new ClassPathResource(templateName); String filename = classPathResource.getFilename(); @Cleanup InputStream inputStream = classPathResource.getInputStream(); byte[] bytes = FileCopyUtils.copyToByteArray(inputStream); String fileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");// 为了解决中文名称乱码问题 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", fileName); return new ResponseEntity<>(bytes, headers, httpstatus.CREATED); }
至于什么是Ip2region 官网上面有介绍这里就不多介绍了
来源地址:https://blog.csdn.net/weixin_49128211/article/details/129795007
--结束END--
本文标题: JAVA根据ip地址获取归属地
本文链接: https://lsjlt.com/news/423667.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0