后端得到Ip并解析其物理地址
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并解析其物理地址相关推荐
- synopsys PCIE IP协议解析
synopsys PCIE IP协议解析 1.Overview Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环.同时,Cor ...
- 家庭公网IP动态解析至阿里云DNS
家庭公网IP动态解析之阿里云DNS 此服务使用Java开发,每隔10分钟进行阿里云dns解析.如果解析地址未变更,则不出发修改解析操作. 代码 1. AliClient 代码 获取指定域名的解析记录和 ...
- JESD204接口调试总结——Xilinx JESD204B IP testbench解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 JESD204接口调试总结--Xilinx JESD204B IP testbench解析 IP核配置 testbench工程 部分代 ...
- python实现将ip段解析为单个ip
文章目录 将ip段解析为单个ip 192.168.1.*样式的ip段分解 192.168.1-10.*样式的ip段进行分解 192.168.1.0-255样式的ip段进行分解 192.168.1.0/ ...
- SpringBoot获取Ip并解析地址,Docker部署 (ip2region.xdb)
这里写自定义目录标题 SpringBoot获取Ip并解析地址,Docker部署 (ip2region.xdb) 流程 1. 引入依赖 2.获取IP工具类 3.解析IP地址工具类 SpringBoot获 ...
- 使用Redis有序集合搭建自有IP定位解析库(纯真库)
网上关于IP地理位置解析的API有很多种,如IP138.百度IP定位API等,接入方便,使用简单,而且免费.缺点就是有访问次数限制. 所以有必要搭建自有的IP定位解析库.纯真库是一个比较有名的IP库, ...
- TCP/IP记一次关于IP地址和MAC物理地址的思考
是的,从3月6日第一次上计算机网络课起,我还是今天第一次对这本书里讲的知识点有了自己的疑问..之前看书就是 嗯嗯这好像很有道理,嗯嗯也许再多看几章就知道它在讲什么了.. 不过今天已经自学到了网络层了, ...
- hosts文件中同一个域名两个IP的解析顺序
比如: 192.168.0.2 www.easonjim.com 192.168.0.3 www.easonjim.com 那么解析顺序就只有最开头的IP,即:192.168.0.2 经过测试,相同域 ...
- dns按来路ip智能解析_求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址?...
求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址? (2012-01-10 08:43:58) 标签: ip地址 如何 杂谈 求助DNS问题,如何根据来源Ip地址作策略, ...
最新文章
- Java / Android String.format 的使用
- 动态链接库的编写与调用
- 安装mysql5.15.7版本_YUM方法安装mysql5.7版本
- 查看Aix系统配置命令
- selecte设置不可用使用disabled属性注意
- Val编程-文本操作
- Hibernate学习——建立一个简单的Hibernate项目
- 隐秘的角落里数亿场AI战争正在发生
- python使用t-sne算法降维,方便可视化
- c语言中的有符号数和无符号数
- PowerShell 使用PowerTab加强Tab键自动补全
- koa mysql mongodb_koa如何连接MongoDB
- 液晶电视测试软件u盘,突破封锁!用U盘给电视安装APP居然这么简单
- 2.16 自定义快速访问工具栏以提升工作效率 [原创Excel教程]
- 一文读懂什么是MRO采购
- 诚诚富众资讯1.02亿人次补偿式出游
- 直流无刷电机发热问题及解决方案
- 《数字经济》远光软件毕伟:数字化协同创新
- InfoGAN论文笔记+源码解析
- android 人生日历,千呼万唤始出来 人生日历Android版现世