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

java 根据ip获取到城市 GeoLite2-City.mmdb

本文可解决 根据ip定位获取不到问题,提供多种方式仅供参考:

1.选型

1.1 实现方式

Java可以实现IP地址解析和省市区信息查询,但是需要借助一些外部数据源或数据库来实现。常用的方法有以下几种:

1.1.1 本地文件解析

可以通过下载最新的IP地址段数据文件,然后在程序中解析该文件来获取IP地址对应的省市区等信息。不过这种方法需要手动维护IP库文件,并且更新和查询速度可能较慢,不适合高并发或大规模的应用场景。

1.1.2 数据库查询

可以将IP地址段数据存储在数据库中,然后根据用户请求的IP地址来查询对应的省市区等信息。常用的数据库有MySQL、Oracle、SQL Server等。这种方法可以提高查询效率和精度,并支持更灵活的查询方式,但是需要考虑数据库的设计和优化问题。

1.1.3 第三方API代理

使用第三方IP查询API代理来实现纯Java的IP地址解析和省市区信息查询。比如通过调用百度地图API、高德地图API等第三方服务来获取IP地址对应的位置信息。这种方法可以免去自行搭建IP数据库的麻烦,同时也能保证查询结果的准确性和实时性,但需要考虑API使用频率和费用等问题。

1.2 常用ip定位库

1.2.1 Ip2region   Ip2region

快速实现 IP地址解析 - 掘金

Ip2region:Ip2region是一个基于Java的IP地址定位库,提供了快速而准确的IP查询服务。它将全球IP地址划分为多级区域,可以根据IP地址获取对应的省市区信息、运营商等详细信息。

参考:连接

1.2.2 GeoLite2

GeoLite2:一款免费的IP地址库,由MaxMind公司开发和维护,提供高精度的IP地址定位服务。可通过下载数据库文件或使用API来查询IP地址对应的位置信息。

MaxMind GeoIP2 Java API

GeoLite2 Java根据IP获得城市、经纬度 | 言曌博客

java 根据ip获取到城市_mob64ca12d4a164的技术博客_51CTO博客

1.2.3 IP2Location

IP2Location:一款商业化的IP地址库,提供全球范围内的IP地址定位服务,支持IPv4/IPv6地址解析。可通过订阅服务或购买数据库文件来使用。

1.2.4 ipapi

ipapi:一款云端IP地址查询API,提供高效和准确的IP地址定位服务。支持JSON/XML格式的返回数据,可根据用户需求选择不同的套餐和服务计划。

1.2.5 QQWry

QQWry:国内最广泛使用的IP地址库之一,提供了IP地址到省市区县、运营商等信息的映射。可通过下载最新版的dat文件或使用API来实现IP地址定位。

1.2.6 其他

国内还有很多其他的定位库,如淘宝、新浪、搜狐等ip库,有兴趣的朋友自己了解下。

1.3 选择

1.3 .1综合下面几种情况考虑最后选择了 GeoLite2

GeoLite2-City.mmdb 下载连接1

GeoLite2-City.mmdb 下载连接2

GeoLite2-City.mmdb 下载连接3

import javax.servlet.http.HttpServletRequest;
import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.exception.GeoIp2Exception;
import com.maxmind.geoip2.model.CityResponse;import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
/*** @description:* @author: LAN*/
public class Ttest {public String getUserIpAddress(HttpServletRequest request) {String ipAddress = request.getHeader("X-Forwarded-For");if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("Proxy-Client-IP");}if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("WL-Proxy-Client-IP");}if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getRemoteAddr();}return ipAddress;}public CityResponse getInfo(String ip) throws IOException, GeoIp2Exception {File database = new File("C:\\Users\\lenovo\\Desktop\\test\\GeoLite2-City.mmdb"); // GeoLite2数据库文件路径DatabaseReader reader = new DatabaseReader.Builder(database).build();InetAddress ipAddress = InetAddress.getByName(ip);CityResponse response = reader.city(ipAddress);return response;}public String getCityInfo(String ipAddress) {CityResponse cityResponse;try {cityResponse = getInfo(ipAddress);String cityName = cityResponse.getCity().getName(); // '英文城市'String countryName = cityResponse.getCountry().getName(); // '英文国家'String countryNameZ = cityResponse.getCountry().getNames().get("zh-CN"); // '国家'String subdivisionNameZ = cityResponse.getLeastSpecificSubdivision().getNames().get("zh-CN"); // '省份'String cityNameZ = cityResponse.getCity().getNames().get("zh-CN"); // '城市'System.out.println("所在国家:" + countryNameZ+",您当前所在省份:" + subdivisionNameZ +",您当前所在城市:" + cityNameZ);return "您当前所在城市:" + cityName + ",所在国家:" + countryName;} catch (IOException | GeoIp2Exception e) {return "获取城市信息失败:" + e.getMessage();}}public String getCityInfo(HttpServletRequest request) {String ipAddress = getUserIpAddress(request);CityResponse cityResponse;String cityName =null;String countryName =null;try {cityResponse = getInfo(ipAddress);cityResponse.getCity().getName();cityResponse.getCountry().getName();} catch (IOException e) {return "获取城市信息失败:" + e.getMessage();} catch (GeoIp2Exception e) {e.printStackTrace();}return "您当前所在城市:" + cityName + ",所在国家:" + countryName;}public static void main(String[] args) {Ttest t=new Ttest();System.out.println(t.getCityInfo("111.18.134.223"));}
1.3 .1 通过网络连接进行提取  ipshudi
import cn.hutool.http.HttpRequest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @description:* @author: LAN*/
public class tttttest {public static void main(String[] args) {String html = HttpRequest.get("https://www.ipshudi.com/111.18.134.223.htm").execute().body();String pattern= "<a.*? rel=\"nofollow\" target=\"_blank\">(.*?)</a>";Pattern regex = Pattern.compile(pattern);Matcher matcher = regex.matcher(html);while (matcher.find()) {System.out.println("matcher.group(0) "+matcher.group(0));//得到第0组——整个匹配System.out.println("matcher.group(1) "+matcher.group(1));//得到第一组与第一个括号中对应中值匹配}System.out.println("*****");}
}

https://qifu-api.baidubce.com/ip/geo/v1/district?ip=#{ip}&type=0

https://ip.cn/api/index?ip=#{IP}&type=0

http://whois.pconline.com.cn/?ip=#{IP}

https://www.ipshudi.com/#{IP}.htm

通过ip获取所在地理位置、通过手机号获取归属地_根据ip获取所在城市-CSDN博客

相关文章:

java 根据ip获取到城市 GeoLite2-City.mmdb

本文可解决 根据ip定位获取不到问题&#xff0c;提供多种方式仅供参考&#xff1a; 1.选型 1.1 实现方式 Java可以实现IP地址解析和省市区信息查询&#xff0c;但是需要借助一些外部数据源或数据库来实现。常用的方法有以下几种&#xff1a; 1.1.1 本地文件解析 可以通过下…...

kaggle使用说明

kaggle kaggle使用参考1、kaggle目录2、kaggle上传本地文件后&#xff0c;如何不改代码就可运行3、已上传文件的修改3.1 重新上传3.2 重写文件 4、创建文件夹5、结果下载5.1 多文件&#xff1a;先打包再下载5.2 重定文件下载链接 kaggle使用参考 Kaggle 新手入门必看&#xff…...

BUUCTF FLAG 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 注意&#xff1a;请将 hctf 替换为 flag 提交&#xff0c;格式 flag{} 密文&#xff1a; 下载附件&#xff0c;得到一张.png图片。 解题思路&#xff1a; 1、因为附件是一张图片&#xff0c;先放到StegSolve中&…...

万物皆可“云” 从杭州云栖大会看数智生活的未来

文章目录 前言一、云栖渐进&#xff1a;一个科技论坛的变迁与互联网历史互联网创新创业飞天进化飞天智能驱动数字中国 二、2023云栖大会&#xff1a;云计算人工智能 玩出科技跨界新花样大会亮点重磅嘉宾热门展览算力馆人工智能馆产业创新馆 总结 前言 10月31日&#xff0c;202…...

LeetCode1518 换水问题

题目描述 超市正在促销&#xff0c;你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始&#xff0c;你一共购入了 numBottles 瓶水。 如果喝掉了水瓶中的水&#xff0c;那么水瓶就会变成空的。 给你两个整数 numBottles 和 numExchange &#xff0c;返回你 最多 可以喝…...

强大日志查看器,助力数据联动分析

前言 我们曾讨论过观测云查看器强大的查询筛选和搜索功能&#xff0c;能够帮助用户快速、精准地检索数据&#xff0c;定位故障问题&#xff08;参见《如何使用查看器筛选、搜索功能进行数据定位&#xff1f;》&#xff09;。除此之外&#xff0c;日志查看器不仅可以帮助我们收…...

HIBS一些简介

文章目录 距离发展&#xff1a;意义使用挑战安全IOT活动服务频带可行性频谱 距离 海拔约20KM的平流层中&#xff0c;国际电联无线电条例&#xff08;RR&#xff09;将HAPS定义为位于20-50公里高度和相对于地球的指定标称固定点的物体上的无线电台。 #高空平台作为IMT基站(HIB…...

OpenCV实现人脸关键点检测

目录 实现过程 1&#xff0c;代码解读 1.1 导入工具包 1.2导入所需图像&#xff0c;以及训练好的人脸预测模型 1.3 将 dlib 的关键点对象转换为 NumPy 数组&#xff0c;以便后续处理 1.4图像上可视化面部关键点 1.5# 读取输入数据&#xff0c;预处理 1.6进行人脸检测 1…...

300万美元!澳大利亚昆士兰州投资当地首家量子公司AQC

澳大利亚模拟量子电路公司&#xff08;AQC&#xff09;联合创始人 Tom Stace 教授和 Arkady Federov 副教授&#xff08;图片来源&#xff1a;网络&#xff09; 澳大利亚风险投资基金会Uniseed为澳大利亚昆士兰大学的两名教授提供了300万美元的资金&#xff0c;资助他们创办了…...

Android Studio打包AAR

注意 依赖的Android Studio版本为4.2.2 更高的Android Studio版本使用方法可能有所不同&#xff0c;gradle的版本和gradle plugins的版本都会影响使用方式。 基于此&#xff0c;本文只能作为参考&#xff0c;而不能作为唯一答案&#xff0c;如果要完全依赖本文&#xff0c;则…...

【Python基础知识四】控制语句

Python基础知识&#xff1a;控制语句 1 条件控制1.1 if语句1.2 match...case语句 2 循环语句2.1 for循环2.2 for...else语句2.3 while循环2.4 while 循环使用 else 语句2.5 无限循环2.6 break 和 continue 语句及循环中的 else 子句2.6.1 break语句2.6.2 continue语句 2.7 pass…...

Jmeter压测 —— 1秒发送1次请求

场景&#xff1a;有时候测试场景需要设置请求频率为一秒一次&#xff08;或几秒一次&#xff09;实现方法一&#xff1a;1、首先需要在线程组下设置循环次数&#xff08;可以理解为请求的次数&#xff09; 次数设置为请求300次&#xff0c;其中线程数跟时间自行设置 2、在设置…...

目标检测YOLO实战应用案例100讲-基于改进YOLOv4算法的自动驾驶场景 目标检测

目录 前言 国内外目标检测算法研究现状 传统目标检测算法的发展现状...

Spring Cloud智慧工地源码,利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术开发,微服务架构

智慧工地系统充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术&#xff0c;以PC端&#xff0c;移动端&#xff0c;设备端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳务、设备、物料、安全、环境、能源、资料、计划、质量、视频监控等…...

AI视频 | Runway的史诗级更新真的那么震撼吗?来看我的试用体验!

就在昨天&#xff0c;Runway&#xff0c;这个生成式AI的领头羊&#xff0c;正式在X上发布了他们史诗级更新 看下视频 【视频2】 这个确实看起来太棒了 注册个账号&#xff0c;看下效果咋样 地址百度哈&#xff0c;注册登录也比较方便 直接邮箱即可 不过我是直接google账号登录的…...

【动作模式识别】实现复合动作模式识别(离线控制模块)

一、思路 一般来说&#xff0c;要实现摸脸动作&#xff0c;需要采集手臂的以下肌肉的肌电信号&#xff1a; 肱二头肌&#xff1a;控制肘关节的屈曲肱三头肌&#xff1a;控制肘关节的伸展前臂屈肌群&#xff1a;控制手腕和手指的屈曲前臂伸肌群&#xff1a;控制手腕和手指的伸…...

Python基础学习009——类的封装

# 面向对象是一种编程思想,还有另一种是面向过程 # 面向过程,具体步骤的实现,所有功能都自己书写 # 面向对象,使用一个个工具(函数),帮助完成各项任务 # 类:对多个特性相同或相似的食物的统称,根据特征不同一个事物可以属于多个类 # 对象:由类实例化的一个事物,指代1个 # 类的组…...

前端开发和后端开发,你更倾向于哪一种?

作为一个Web开发者&#xff0c;你是否曾经面临过这样的选择&#xff1a;是专注于前端开发&#xff0c;还是转向后端开发&#xff1f;前端开发和后端开发是Web开发中的两个不同的领域&#xff0c;它们各有各的特点和优势&#xff0c;也各有各的挑战和难点。那么&#xff0c;你应…...

Selenium 基本功能

#driver.quit()from selenium import webdriver from selenium.webdriver.chrome.service import Service# 尝试传参 s Service("chromedriver.exe") driver webdriver.Chrome(services)driver.get(https://www.baidu.com/) input()#1/导入Selenium库 from seleniu…...

智能井盖传感器有哪些?万宾科技智能井盖效果

在城市治理过程之中&#xff0c;小小的井盖却成为影响民生的一个重要方面&#xff0c;因为井盖一旦出现问题&#xff0c;会严重影响市民的生命安全&#xff0c;并且传统的井盖一般都会采用人工巡检的方式&#xff0c;这就导致了巡检的难度较大&#xff0c;从而不能对城市各个角…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...