ip地址库:https://github.com/zoujingli/ip2region

使用了这个依赖来进行ip的解析,本质上是使用了一个离线的ip库

        <!-- ip2region --><dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>1.7.2</version></dependency>

这个工具类中的3个方法,初始化库,得到ip,解析ip

@Slf4j
@Component
public class IpAddressUtils {/*** 在Nginx等代理之后获取用户真实IP地址** @param request* @return*/public static String getIpAddress(HttpServletRequest request) {String ip = request.getHeader("X-Real-IP");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("x-forwarded-for");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {//根据网卡取本机配置的IPInetAddress inet = null;try {inet = InetAddress.getLocalHost();} catch (UnknownHostException e) {log.error("getIpAddress exception:", e);}ip = inet.getHostAddress();}}return StringUtils.substringBefore(ip, ",");}private static DbSearcher searcher;private static Method method;/*** 在服务启动时加载 ip2region.db 到内存中* 解决打包jar后找不到 ip2region.db 的问题** @throws Exception 出现异常应该直接抛出终止程序启动,避免后续invoke时出现更多错误*/@PostConstructprivate void initIp2regionResource() throws Exception {InputStream inputStream = new ClassPathResource("/ipdb/ip2region.db").getInputStream();//将 ip2region.db 转为 ByteArraybyte[] dbBinStr = FileCopyUtils.copyToByteArray(inputStream);DbConfig dbConfig = new DbConfig();searcher = new DbSearcher(dbConfig, dbBinStr);//二进制方式初始化 DBSearcher,需要使用基于内存的查找算法 memorySearchmethod = searcher.getClass().getMethod("memorySearch", String.class);}/*** 根据ip从 ip2region.db 中获取地理位置** @param ip* @return*/public static String getCityInfo(String ip) {if (ip == null || !Util.isIpAddress(ip)) {log.error("Error: Invalid ip address");return "";}try {DataBlock dataBlock = (DataBlock) method.invoke(searcher, ip);String ipInfo = dataBlock.getRegion();if (!StringUtils.isEmpty(ipInfo)) {ipInfo = ipInfo.replace("|0", "");ipInfo = ipInfo.replace("0|", "");return ipInfo;}} catch (Exception e) {log.error("getCityInfo exception:", e);}return "";}
}

后端得到Ip并解析其物理地址相关推荐

  1. synopsys PCIE IP协议解析

    synopsys PCIE IP协议解析 1.Overview Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环.同时,Cor ...

  2. 家庭公网IP动态解析至阿里云DNS

    家庭公网IP动态解析之阿里云DNS 此服务使用Java开发,每隔10分钟进行阿里云dns解析.如果解析地址未变更,则不出发修改解析操作. 代码 1. AliClient 代码 获取指定域名的解析记录和 ...

  3. JESD204接口调试总结——Xilinx JESD204B IP testbench解析

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 JESD204接口调试总结--Xilinx JESD204B IP testbench解析 IP核配置 testbench工程 部分代 ...

  4. python实现将ip段解析为单个ip

    文章目录 将ip段解析为单个ip 192.168.1.*样式的ip段分解 192.168.1-10.*样式的ip段进行分解 192.168.1.0-255样式的ip段进行分解 192.168.1.0/ ...

  5. SpringBoot获取Ip并解析地址,Docker部署 (ip2region.xdb)

    这里写自定义目录标题 SpringBoot获取Ip并解析地址,Docker部署 (ip2region.xdb) 流程 1. 引入依赖 2.获取IP工具类 3.解析IP地址工具类 SpringBoot获 ...

  6. 使用Redis有序集合搭建自有IP定位解析库(纯真库)

    网上关于IP地理位置解析的API有很多种,如IP138.百度IP定位API等,接入方便,使用简单,而且免费.缺点就是有访问次数限制. 所以有必要搭建自有的IP定位解析库.纯真库是一个比较有名的IP库, ...

  7. TCP/IP记一次关于IP地址和MAC物理地址的思考

    是的,从3月6日第一次上计算机网络课起,我还是今天第一次对这本书里讲的知识点有了自己的疑问..之前看书就是 嗯嗯这好像很有道理,嗯嗯也许再多看几章就知道它在讲什么了.. 不过今天已经自学到了网络层了, ...

  8. hosts文件中同一个域名两个IP的解析顺序

    比如: 192.168.0.2 www.easonjim.com 192.168.0.3 www.easonjim.com 那么解析顺序就只有最开头的IP,即:192.168.0.2 经过测试,相同域 ...

  9. dns按来路ip智能解析_求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址?...

    求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址? (2012-01-10 08:43:58) 标签: ip地址 如何 杂谈 求助DNS问题,如何根据来源Ip地址作策略, ...

最新文章

  1. Java / Android String.format 的使用
  2. 动态链接库的编写与调用
  3. 安装mysql5.15.7版本_YUM方法安装mysql5.7版本
  4. 查看Aix系统配置命令
  5. selecte设置不可用使用disabled属性注意
  6. Val编程-文本操作
  7. Hibernate学习——建立一个简单的Hibernate项目
  8. 隐秘的角落里数亿场AI战争正在发生
  9. python使用t-sne算法降维,方便可视化
  10. c语言中的有符号数和无符号数
  11. PowerShell 使用PowerTab加强Tab键自动补全
  12. koa mysql mongodb_koa如何连接MongoDB
  13. 液晶电视测试软件u盘,突破封锁!用U盘给电视安装APP居然这么简单
  14. 2.16 自定义快速访问工具栏以提升工作效率 [原创Excel教程]
  15. 一文读懂什么是MRO采购
  16. 诚诚富众资讯1.02亿人次补偿式出游
  17. 直流无刷电机发热问题及解决方案
  18. 《数字经济》远光软件毕伟:数字化协同创新
  19. InfoGAN论文笔记+源码解析
  20. android 人生日历,千呼万唤始出来 人生日历Android版现世

热门文章

  1. X3850 X5安装ESXI6.0U3需要手动加载LPe11000驱动
  2. Blender和Rizom UV的桥接插件:B2RUVL
  3. arcgis的(添加面)点转线,线转面
  4. 税控盘版开票软件V2.0.53_ZS_20221231
  5. 接口返回值转成json
  6. 色深 (Color Depth)
  7. android 毫秒 计时器,Android时分秒计时器的两种实现方法
  8. 再见! JSP !
  9. Docker配置了国内镜像仍然无法下载镜像
  10. 时域卷积定理及频域卷积定理