package com.zdjizhi.utils; import cn.hutool.core.io.file.FileReader; import cn.hutool.crypto.digest.DigestUtil; import com.zdjizhi.common.CommonConfig; import com.zdjizhi.common.CustomFile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; public class IpUtils { public static IpLookupV2 ipLookup ; private static Logger LOG = LoggerFactory.getLogger(IpUtils.class); /** * IP定位库工具类 */ // public static IpLookupV2 ipLookup = new IpLookupV2.Builder(false) // .loadDataFileV4(CommonConfig.IP_MMDB_PATH + "ip_v4_built_in.mmdb") // .loadDataFileV6(CommonConfig.IP_MMDB_PATH + "ip_v6_built_in.mmdb") // .loadDataFilePrivateV4(CommonConfig.IP_MMDB_PATH + "ip_v4_user_defined.mmdb") // .loadDataFilePrivateV6(CommonConfig.IP_MMDB_PATH + "ip_v6_user_defined.mmdb") // .build(); public static void loadIpLook(){ try { IpLookupV2.Builder builder = new IpLookupV2.Builder(false); if ("CLUSTER".equals(CommonConfig.CLUSTER_OR_SINGLE)) { byte[] ipv4BuiltBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v4_built_in.mmdb"); if (ipv4BuiltBytes!=null){ InputStream ipv4BuiltInputStream = new ByteArrayInputStream(ipv4BuiltBytes); builder.loadDataFileV4(ipv4BuiltInputStream); } byte[] ipv6BuiltBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v6_built_in.mmdb"); if (ipv6BuiltBytes!=null){ InputStream ipv6BuiltInputStream = new ByteArrayInputStream(ipv6BuiltBytes); builder.loadDataFileV6(ipv6BuiltInputStream); } byte[] ipv4UserBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v4_user_defined.mmdb"); if (ipv4UserBytes!=null){ InputStream ipv4UserInputStream = new ByteArrayInputStream(ipv4UserBytes); builder.loadDataFilePrivateV4(ipv4UserInputStream); } byte[] ipv6UserBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v6_user_defined.mmdb"); if (ipv6UserBytes!=null){ InputStream ipv6UserInputStream = new ByteArrayInputStream(ipv6UserBytes); builder.loadDataFilePrivateV6(ipv6UserInputStream); } }else if ("SINGLE".equals(CommonConfig.CLUSTER_OR_SINGLE)){ byte[] ipv4BuiltBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v4_built_in.mmdb"); if (ipv4BuiltBytes!=null){ InputStream ipv4BuiltInputStream = new ByteArrayInputStream(ipv4BuiltBytes); builder.loadDataFileV4(ipv4BuiltInputStream); } byte[] ipv6BuiltBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v6_built_in.mmdb"); if (ipv6BuiltBytes!=null){ InputStream ipv6BuiltInputStream = new ByteArrayInputStream(ipv6BuiltBytes); builder.loadDataFileV6(ipv6BuiltInputStream); } byte[] ipv4UserBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v4_user_defined.mmdb"); if (ipv4UserBytes!=null){ InputStream ipv4UserInputStream = new ByteArrayInputStream(ipv4UserBytes); builder.loadDataFilePrivateV4(ipv4UserInputStream); } byte[] ipv6UserBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v6_user_defined.mmdb"); if (ipv6UserBytes!=null){ InputStream ipv6UserInputStream = new ByteArrayInputStream(ipv6UserBytes); builder.loadDataFilePrivateV6(ipv6UserInputStream); } } ipLookup = builder.build(); }catch (Exception e){ LOG.error("加载失败",e); } } public static void updateIpLook(Map knowledgeFileCache){ try{ IpLookupV2.Builder builder = new IpLookupV2.Builder(false); if ("CLUSTER".equals(CommonConfig.CLUSTER_OR_SINGLE)) { byte[] ipv4BuiltBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v4_built_in.mmdb"); if (ipv4BuiltBytes!=null){ if (knowledgeFileCache.containsKey("ip_v4_built_in.mmdb")){ String sha256 = knowledgeFileCache.get("ip_v4_built_in.mmdb"); byte[] localFileByte = getLocalFile("ip_v4_built_in.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)){ builder.loadDataFileV4(new ByteArrayInputStream(ipv4BuiltBytes)); } } } byte[] ipv6BuiltBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v6_built_in.mmdb"); if (ipv6BuiltBytes!=null){ if (knowledgeFileCache.containsKey("ip_v6_built_in.mmdb")) { String sha256 = knowledgeFileCache.get("ip_v6_built_in.mmdb"); byte[] localFileByte = getLocalFile("ip_v6_built_in.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)) { builder.loadDataFileV6(new ByteArrayInputStream(ipv6BuiltBytes)); } } } byte[] ipv4UserBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v4_user_defined.mmdb"); if (ipv4UserBytes!=null){ if (knowledgeFileCache.containsKey("ip_v4_user_defined.mmdb")) { String sha256 = knowledgeFileCache.get("ip_v4_user_defined.mmdb"); byte[] localFileByte = getLocalFile("ip_v4_user_defined.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)) { builder.loadDataFilePrivateV4(new ByteArrayInputStream(ipv4UserBytes)); } } } byte[] ipv6UserBytes = HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + "ip_v6_user_defined.mmdb"); if (ipv6UserBytes!=null){ if (knowledgeFileCache.containsKey("ip_v6_user_defined.mmdb")) { String sha256 = knowledgeFileCache.get("ip_v6_user_defined.mmdb"); byte[] localFileByte = getLocalFile("ip_v6_user_defined.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)) { builder.loadDataFilePrivateV6(new ByteArrayInputStream(ipv6UserBytes)); } } } }else if ("SINGLE".equals(CommonConfig.CLUSTER_OR_SINGLE)){ byte[] ipv4BuiltBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v4_built_in.mmdb"); if (ipv4BuiltBytes!=null){ if (knowledgeFileCache.containsKey("ip_v4_built_in.mmdb")){ String sha256 = knowledgeFileCache.get("ip_v4_built_in.mmdb"); byte[] localFileByte = getLocalFile("ip_v4_built_in.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)){ builder.loadDataFileV4(new ByteArrayInputStream(ipv4BuiltBytes)); } } } byte[] ipv6BuiltBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v6_built_in.mmdb"); if (ipv6BuiltBytes!=null){ if (knowledgeFileCache.containsKey("ip_v6_built_in.mmdb")) { String sha256 = knowledgeFileCache.get("ip_v6_built_in.mmdb"); byte[] localFileByte = getLocalFile("ip_v6_built_in.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)) { builder.loadDataFileV6(new ByteArrayInputStream(ipv6BuiltBytes)); } } } byte[] ipv4UserBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v4_user_defined.mmdb"); if (ipv4UserBytes!=null){ if (knowledgeFileCache.containsKey("ip_v4_user_defined.mmdb")) { String sha256 = knowledgeFileCache.get("ip_v4_user_defined.mmdb"); byte[] localFileByte = getLocalFile("ip_v4_user_defined.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)) { builder.loadDataFilePrivateV4(new ByteArrayInputStream(ipv4UserBytes)); } } } byte[] ipv6UserBytes = FileByteUtils.getFileBytes(CommonConfig.DOWNLOAD_PATH + "ip_v6_user_defined.mmdb"); if (ipv6UserBytes!=null){ if (knowledgeFileCache.containsKey("ip_v6_user_defined.mmdb")) { String sha256 = knowledgeFileCache.get("ip_v6_user_defined.mmdb"); byte[] localFileByte = getLocalFile("ip_v6_user_defined.mmdb"); String localFileSha256Hex = DigestUtil.sha256Hex(localFileByte); if (sha256.equals(localFileSha256Hex)) { builder.loadDataFilePrivateV6(new ByteArrayInputStream(ipv6UserBytes)); } } } } ipLookup = builder.build(); }catch (Exception e){ LOG.error("加载失败",e); } } private static byte[] getLocalFile(String name) { byte[] fileBytes = null; try { fileBytes = "CLUSTER".equals(CommonConfig.CLUSTER_OR_SINGLE) ? HdfsUtils.getFileBytes(CommonConfig.HDFS_PATH + name) : new FileReader(CommonConfig.DOWNLOAD_PATH + name).readBytes(); } catch (RuntimeException | IOException e) { e.printStackTrace(); } return fileBytes; } public static void main(String[] args) { System.out.println(ipLookup.countryLookup("49.7.115.37")); String ips = "182.168.50.23,182.168.50.45,182.168.56.9,182.168.56.8,92.168.50.58,19.168.56.7,12.168.56.6,2.168.50.40,1.168.50.19,9.168.50.6,2.168.50.4,192.168.56.17,192.168.50.27,192.168.50.26,192.168.50.18,192.168.56.3,192.168.56.10"; for (String ip:ips.split(",")){ System.out.println(ip+"--"+ipLookup.countryLookup(ip)); } } }