当前位置: 首页 > news >正文

AddressUtils 、RegionUtils IP地址工具类

一、类展示

AddressUtils :
/*** 获取地址类**/
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class AddressUtils {// 未知地址public static final String UNKNOWN = "XX XX";public static String getRealAddressByIP(String ip) {if (StringUtils.isBlank(ip)) {return UNKNOWN;}// 内网不查询ip = StringUtils.contains(ip, "0:0:0:0:0:0:0:1") ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip);if (NetUtil.isInnerIP(ip)) {return "内网IP";}return RegionUtils.getCityInfo(ip);}
}
RegionUtils  :

ip资源库:ip2region.xdb  已经上传资源:

*** 根据ip地址定位工具类,离线方式* 参考地址:<a href="https://gitee.com/lionsoul/ip2region/tree/master/binding/java">集成 ip2region 实现离线IP地址定位库</a>**/
@Slf4j
public class RegionUtils {private static final Searcher SEARCHER;// 初始化IP库:ip2region.xdbstatic {// 从classpath加载ip2region.xdbString fileName = "/ip2region.xdb";File existFile = FileUtils.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName);// 如果文件不存在,则从classpath加载if (!FileUtils.exist(existFile)) {ClassPathResource fileStream = new ClassPathResource(fileName);if (ObjectUtil.isEmpty(fileStream.getStream())) {throw new ServiceException("RegionUtils初始化失败,原因:IP地址库数据不存在!");}FileUtils.writeFromStream(fileStream.getStream(), existFile);}String dbPath = existFile.getPath();// 1、从 dbPath 加载整个 xdb 到内存。byte[] cBuff;try {cBuff = Searcher.loadContentFromFile(dbPath);} catch (Exception e) {throw new ServiceException("RegionUtils初始化失败,原因:从ip2region.xdb文件加载内容失败!" + e.getMessage());}// 2、使用上述的 cBuff 创建一个完全基于内存的查询对象。try {SEARCHER = Searcher.newWithBuffer(cBuff);} catch (Exception e) {throw new ServiceException("RegionUtils初始化失败,原因:" + e.getMessage());}}/*** 根据IP地址离线获取城市*/public static String getCityInfo(String ip) {try {ip = ip.trim();// 3、执行查询String region = SEARCHER.search(ip);// 返回查询结果return region.replace("0|", "").replace("|0", "");} catch (Exception e) {log.error("IP地址离线获取城市异常 {}", ip);return "未知";}}
}

二、测试IP地址判断

@RestController
@SaIgnore
public class TestIPUtils {@GetMapping("getIp")public String getCityInfo() {Console.log("空", AddressUtils.getRealAddressByIP(""));Console.log("127.0.0.1",AddressUtils.getRealAddressByIP("127.0.0.1"));Console.log("183.82.118.0",AddressUtils.getRealAddressByIP("183.82.118.0"));return "ok";}}

打印结果:


空 XX XX
127.0.0.1 内网IP
183.82.118.0 印度|安德拉|海得拉巴|ACT

相关文章:

AddressUtils 、RegionUtils IP地址工具类

一、类展示 AddressUtils &#xff1a; /*** 获取地址类**/ Slf4j NoArgsConstructor(access AccessLevel.PRIVATE) public class AddressUtils {// 未知地址public static final String UNKNOWN "XX XX";public static String getRealAddressByIP(String ip) {i…...

牛客网SQL进阶134: 满足条件的用户的试卷总完成次数和题目总练习次数

满足条件的用户的试卷完成数和题目练习数_牛客题霸_牛客网 0 问题描述 基于用户信息表user_info、试卷信息表examination_info、试卷作答记录表exam_record、题目练习记录表practice_record&#xff0c;筛选出 高难度SQL试卷得分平均值大于80并且是7级的用户&#xff0c;统计他…...

机器学习:逻辑回归处理手写数字的识别

1、获取数据, 图像分割该数据有50行100列&#xff0c;每个数字占据20*20个像素点&#xff0c;可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…...

文件上传真hard

一、SpringMVC实现文件上传 1.1.项目结构 1.1.2 控制器方法 RequestMapping("/upload1.do")public ModelAndView upload1(RequestParam("file1") MultipartFile f1) throws IOException {//获取文件名称String originalFilename f1.getOriginalFilename(…...

精益管理|介绍一本专门研究防错法(Poka-Yoke)的书

在现代制造业中&#xff0c;如何确保产品在每个生产环节中不出现错误是企业追求的目标之一。而实现这一目标的关键技术之一就是防错法&#xff08;Poka-Yoke&#xff09;。作为一种简单而有效的精益管理、六西格玛管理工具&#xff0c;防错法帮助企业避免因人为错误或工艺不当导…...

面试题目:(4)给表达式添加运算符

目录 题目 代码 思路解析 例子 题目 题目 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target &#xff0c;在 num 的数字之间添加 二元 运算符&#xff08;不是一元&#xff09;、- 或 * &#xff0c;返回 所有能够得到 target 的表达式。1 < num.length &…...

[C#]将opencvsharp的Mat对象转成onnxruntime的inputtensor的3种方法

第一种方法&#xff1a;在创建tensor时候直接赋值改变每个tensor的值&#xff0c;以下是伪代码&#xff1a; var image new Mat(image_path);inpWidth image.Width;inpHeight image.Height;//将图片转为RGB通道Mat image_rgb new Mat();Cv2.CvtColor(image, image_rgb, Col…...

CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…...

数据链路层 I(组帧、差错控制)【★★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 为了把主要精力放在点对点信道的数据链路层协议上&#xff0c;可以采用下图&#xff08;a&#xff09;所示的三层模型。在这种三层模型中&#xff0c;不管在哪一段…...

悟空降世 撼动全球

文&#xff5c;琥珀食酒社 作者 | 积溪 一只猴子能值多少钱&#xff1f; 答案是&#xff1a;13个小目标 这两天 只要你家没有断网 一定会被这只猴子刷屏 它就是咱国产的3A游戏 《黑神话&#xff1a;悟空》 这只猴子到底有多火&#xff1f; 这么跟你说吧 茅台见了它都…...

Swoole 和 Java 哪个更有优势呢

Swoole 和 Java 各有优势&#xff0c;在性能上不能简单地说哪一个更好&#xff0c;需要根据具体的应用场景来分析。 Swoole 优势&#xff1a;高并发&#xff1a;Swoole 是一个基于 PHP 的异步、协程框架&#xff0c;专为高并发场景设计&#xff0c;适用于 I/O 密集型应用&…...

Salesforce 发布开源大模型 xGen-MM

xGen-MM 论文 在当今 AI 技术飞速发展的时代&#xff0c;一个新的多模态 AI 模型悄然崛起&#xff0c;引起了业界的广泛关注。这个由 Salesforce 推出的开源模型—— xGen-MM&#xff0c;正以其惊人的全能特性和独特优势&#xff0c;在 AI 领域掀起一阵旋风。那么&#xff0c;x…...

冒 泡 排 序

今天咱们单独拎出一小节来聊一聊冒泡排序昂 冒泡排序的核心思想就是&#xff1a;两两相邻的元素进行比较&#xff08;理解思路诸君可看下图&#xff09; 接下来我们上代码演示&#xff1a; 以上就是我们初步完成的冒泡排序&#xff0c;大家不难发现&#xff0c;不管数组中的元…...

采用先进的人工智能视觉分析技术,能够精确识别和分析,提供科学、精准的数据支持的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…...

IAA游戏APP如何让合理地让用户观看更多广告,提高广告渗透率

广告变现已经成为休闲游戏开发者重要的收益方式之一&#xff0c;超50%国内休闲游戏已经采用广告变现的方式&#xff0c;游戏广告预算是游戏行业开发者广告变现的主要预算来源。 #深度好文计划#如何合理地提高广告渗透率&#xff1f; 广告渗透率能直接反映游戏中有广告行为用户…...

环网交换机的特殊作用是什么?

环网交换机作为现代网络建设的重要组成部分&#xff0c;具有独特而特殊的作用。在信息技术迅猛发展的今天&#xff0c;各类数据传输和网络连接需求日益增加&#xff0c;环网交换机的出现为解决这些问题提供了理想的方案。环网交换机通常将多个网络节点通过环形结构连接起来&…...

mac电脑安装Zsh并启用

安装 Zsh 1. 安装 Zsh 新版mac系统会默认安装并使用zsh&#xff0c;如没用&#xff0c;需在终端中安装&#xff1a; brew install zsh2. 安装 Oh My Zsh 克隆Oh My Zsh到你的目录&#xff1a; git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh3. 复…...

【后续更新】python搜集上海二手房数据

源码如下: import asyncio import aiohttp from lxml import etree import logging import datetime import openpyxlwb = openpyxl.Workbook() sheet = wb.active sheet.append([房源, 房子信息, 所在区域, 单价, 关注人数和发布时间, 标签]) logging.basicConfig(level=log…...

创建GPTs,打造你的专属AI聊天机器人

在2023年11月的「OpenAI Devday」大会上&#xff0c;OpenAI再度带来了一系列令人瞩目的新功能&#xff0c;其中ChatGPT方面的突破尤为引人关注。而GPTs的亮相&#xff0c;不仅标志着个性化AI时代的到来&#xff0c;更为开发者和普通用户提供了前所未有的便利。接下来&#xff0…...

深度学习 vector 之模拟实现 vector (C++)

1. 基础框架 这里我们有三个私有变量&#xff0c;使用 _finish - _start 代表 _size&#xff0c;_end_of_storage - _start 代表 _capacity&#xff0c;并且使用到了模版&#xff0c;可以灵活定义存储不同类型的 vector&#xff0c;这里将代码量较小的函数直接定义在类的内部使…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...