| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package jnpf.util;
- import lombok.extern.slf4j.Slf4j;
- import org.lionsoul.ip2region.xdb.Searcher;
- import org.springframework.core.io.DefaultResourceLoader;
- import org.springframework.core.io.Resource;
- import org.springframework.core.io.ResourceLoader;
- import org.springframework.util.FileCopyUtils;
- /**
- * IP归属地离线转换
- * 基于Ip2region项目
- * 需要将地址数据库ip2region.xdb放在项目资源目录下的指定位置 /ip2region/ip2region.xdb
- *
- * @author JNPF开发平台组
- * @version V5.0.0
- * @copyright 引迈信息技术有限公司
- * @date 2025/3/25 10:00
- */
- @Slf4j
- public class Ip2RegionUtil {
- private static String ipregionFormatStr = "%s%s%s %s";
- private static ResourceLoader resourceLoader = new DefaultResourceLoader();
- private static String ip2regionFile = "/ip2region/ip2region.xdb";
- private static Searcher searcher;
- static {
- loadData();
- }
- private static void loadData(){
- try {
- Resource resource = resourceLoader.getResource(ip2regionFile);
- searcher = Searcher.newWithBuffer(FileCopyUtils.copyToByteArray(resource.getInputStream()));
- } catch (Exception e) {
- log.error("加载IP数据库[{}]失败:{}", ip2regionFile, e.getMessage());
- }
- }
- /**
- * 获取IP地址信息
- *
- * @param ip
- * @return 中国|0|河北省|保定市|联通
- */
- public static String getIpRegion(String ip) {
- if(searcher != null && ip != null) {
- try {
- return searcher.search(ip);
- } catch (Exception e) {
- if (log.isInfoEnabled()) {
- log.info("解析IP出错: {}, {}", ip, e.getMessage());
- }
- }
- }
- return null;
- }
- /**
- * 获取IP格式化后的地址信息
- * @param ip
- * @return 河北省保定市 联通
- */
- public static String getIp2RegionStr(String ip) {
- String region = getIpRegion(ip);
- if(region != null) {
- region = region.replaceAll("0", " ");
- String[] iparr = region.split("[|]");
- if(iparr.length == 5) {
- String country = "";
- // 国内地址节省长度不加中国前缀
- if(!"中国".equals(iparr[0])){
- if("内网IP".equals(iparr[3])){
- return "内网IP";
- }
- country = iparr[0];
- }
- return String.format(ipregionFormatStr, country.trim(), iparr[2].trim(), iparr[3].trim(), iparr[4].trim());
- }else {
- region = region.replaceAll("[|]", "");
- }
- }
- return region;
- }
- /*public static void main(String[] args) {
- ip2regionFile = "file:///D:/Projects/IdeaProjects/jnpf-java-boot-tmp/jnpf-admin/src/main/resources/ip2region/ip2region.xdb";
- loadData();
- System.out.println(getIp2RegionStr("110.242.69.21"));
- System.out.println(getIp2RegionStr("183.2.172.177"));
- System.out.println(getIp2RegionStr("220.181.111.1"));
- System.out.println(getIp2RegionStr("180.101.49.44"));
- System.out.println(getIp2RegionStr("110.242.70.57"));
- System.out.println(getIp2RegionStr("103.235.46.115"));
- System.out.println(getIp2RegionStr("119.63.197.151"));
- System.out.println(getIp2RegionStr("103.235.46.115"));
- System.out.println(getIp2RegionStr("45.113.192.101"));
- System.out.println(getIp2RegionStr("103.235.46.102"));
- System.out.println(getIp2RegionStr("119.63.197.151"));
- System.out.println(getIp2RegionStr("104.16.123.96"));
- System.out.println(getIp2RegionStr("192.168.20.133"));
- System.out.println(getIp2RegionStr("127.0.0.1"));
- }*/
- }
|