Java 根据 IP 地址来获取 位置 -- 使用 ip2region

Java通过Ip2region实现IP定位 Ip2region是一个开源工具库,是一种用于IP地址定位的工具。它是基于B树数据结构的数据库,可用于将IP地址转换为国家、省、市、区县等信息。使用Ip2region工具,您可以轻松地查找某个IP地址所在的区域信息,从而帮助您进行定位和分析。目前Ip2region有1.0和2.0两个版本,p2region 1.0和Ip2region 2.0之间的主要区别在于数据的更新频率和精度。Ip2region 2.0在原有版本的基础上增加了更多的数据,例如更详细的地图信息和更准确的IP地址定位。 阅读详情

原链接:https://blog.youkuaiyun.com/weixin_42144379/article/details/84900446

首先在 maven 里面引入 ip2region :

<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId>
    <version>1.7</version>
</dependency>
 然后下载  IP库 ip2region.db:  https://gitee.com/lionsoul/ip2region/tree/master/data

下载过程可能需要注册 码云,码云相当于中国的 GitHub 有必要注册下.

下载解压后只需要 data 目录下的 ip2region.db 就可以了 .

把  ip2region.db 复制到 maven 项目的 resources 目录下.

然后具体实现,可以把以下代码封装成方法:

public class Ip2RegionTest {
    public static void main(String[] args){
           //ip
           String ip="220.248.12.158";
 
           // 判断是否为IP地址 (可用)
           //boolean isIpAddress = Util.isIpAddress(ip); 
 
           //ip和long互转 (可用)
           //long ipLong = Util.ip2long(ip); 
           //String strIp = Util.long2ip(ipLong);
 
           //根据ip进行位置信息搜索
           DbConfig config = new DbConfig();
 
           //获取ip库的位置(放在src下)(直接通过测试类获取文件Ip2RegionTest为测试类)
           String dbfile = Ip2RegionTest.class.getResource("/ip2region.db").getPath();
 
           DbSearcher searcher = new DbSearcher(config, dbfile);
 
           //采用Btree搜索
           DataBlock block = searcher.btreeSearch(ip);
 
           //打印位置信息(格式:国家|大区|省份|城市|运营商)
           System.out.println(block.getRegion()); 
    }
}
还有一种实现方法如下:

此内容参考了 ip2region源码的 : org.lionsoul.ip2region.test.TestSearcher.java

package com.test;
 
import java.io.File;
import java.lang.reflect.Method;
 
import org.lionsoul.ip2region.DataBlock;
import org.lionsoul.ip2region.DbConfig;
import org.lionsoul.ip2region.DbSearcher;
import org.lionsoul.ip2region.Util;
 
public class IPUtil {
 
    public static String getCityInfo(String ip){
 
        //db
        String dbPath = IPUtil.class.getResource("/ip2region.db").getPath();
 
        File file = new File(dbPath);
        if ( file.exists() == false ) {
            System.out.println("Error: Invalid ip2region.db file");
        }
 
        //查询算法
        int algorithm = DbSearcher.BTREE_ALGORITHM; //B-tree
                        //DbSearcher.BINARY_ALGORITHM //Binary
                        //DbSearcher.MEMORY_ALGORITYM //Memory
        try {
            DbConfig config = new DbConfig();
            DbSearcher searcher = new DbSearcher(config, dbPath);
 
            //define the method
            Method method = null;
            switch ( algorithm )
            {
            case DbSearcher.BTREE_ALGORITHM:
                method = searcher.getClass().getMethod("btreeSearch", String.class);
                break;
            case DbSearcher.BINARY_ALGORITHM:
                method = searcher.getClass().getMethod("binarySearch", String.class);
                break;
            case DbSearcher.MEMORY_ALGORITYM:
                method = searcher.getClass().getMethod("memorySearch", String.class);
                break;
            }
 
            DataBlock dataBlock = null;
            if ( Util.isIpAddress(ip) == false ) {
                System.out.println("Error: Invalid ip address");
            }
 
            dataBlock  = (DataBlock) method.invoke(searcher, ip);
 
            return dataBlock.getRegion();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return null;
    }
 
 
    public static void main(String[] args)  throws Exception{
        System.err.println(getCityInfo("220.248.12.158"));
    }
}
如果对下载后的源码 感兴趣,可以仿照此篇文章的做法:   Java - 根据IP获取城市

把 ip2region\binding\java 下的文件 复制到项目中,然后再 把 ip2region.db 复制到对应的目录

其中的 实现方法是 参考 源码中的  案例 org.lionsoul.ip2region.test.TestSearcher.java

Java根据ip地址获取归属地 最近,各大平台都新增了评论区显示发言者ip归属地的功能,例如哔哩哔哩,微博,知乎等等。 对这里出现的几个名词解释一下:X-Forwarded-For:一个 HTTP 扩展头部,主要是为了让 Web 服务器获取访问用户的真实 IP 地址。每个 IP 地址,每个值通过逗号+空格分开,最左边是最原始客户端的 IP 地址,中间如果有多层代理,每⼀层代理会将连接它的客户端 IP 追加在 X-Forwarded-For 右边。Proxy-Client-IP:这个一般是经过 Apache http 服务器的请求才会有 阅读详情

相关推荐

Java中使用ip2region获取IP的地址

ip2region是准确率很高的 ip 地址定位库,本文介绍在Java中使用ip2region获取IP的地址

zhiwenganyong的博客 4689

Java 中是如何获取 IP 属地的

细心的小伙伴可能会发现,抖音新上线了 IP 属地的功能,小伙伴在发表动态、发表评论以及聊天的时候,都会显示自己的 IP 属地信息 这里有三个名词,分别是X-Forwarded-For:一个 HTTP 扩展头部,主要是为了让 Web 服务器获取访问用户的真实 IP 地址。每个 IP 地址,每个值通过逗号+空格分开,最左边是最原始客户端的 IP 地址,中间如果有多层代理,每⼀层代理会将连接它的客户端 IP 追加在 X-Forwarded-For 右边。X-Real-IP:一般只记录真实发出请求的客户端IP

退役复学在校大学生,目光所至,皆为华夏 17万+

根据IP获取城市-整合GeoLite2和ip2region

整合了开源实现方案GeoLite2和ip2region。直接引入类文件IPHelper,基于Spring,直接调用getIpInfo(String ip)即可,返回 国家,省份,城市数据。 记得替换代码中"/home/rui/data/GeoLite2-City.mmdb" 部分,按照自己存储文件地址存储即可

使用ip2region获取客户端地区

远端服务器资源路径(需要与你写的路径一一对应,不然找不到文件)将xdb放入resources资源文件夹。

qq_63431773的博客 605

在WebView中对第三方H5页面的文本密码框添加自定义随机键盘

前言: 首先介绍一下这个需求的背景,由于公司是涉及到金融行业的需要与银行对接资金存管。出于保密性这里不直接列出公司名字和银行名字。从2018年国家对金融行业大整改以来,为了能够顺利通过备案,我们也跟着政府的脚步一步一步走向合规。 好了,大致就是因为要通过备案,必须把这个需求实现,否则将不会通过。 需求内容就是,当客户端有关资金交易的时候,会通过加密数据以及秘钥的方式把第三方银行的页面(充值、...

比较喜欢、笑的博客专栏 1586

1.2 从“跟网”到“构网”:技术范式的历史性转变

新型电力系统面临"双高"特征带来的稳定性挑战,促使并网控制技术从"跟网型"向"构网型"范式转变。传统跟网型变流器作为受控电流源依赖强电网,存在短路电流能力有限、易失稳等缺陷;而构网型变流器模拟同步发电机特性,作为受控电压源具备自主建立电压/频率、提供虚拟惯性、增强短路容量和改善系统阻尼四大核心能力。这一技术范式转变使变流器从电网跟随者变为构建支撑者,成为解决新能源大规模接入稳定性的关键。

技术工作者 725

java 使用 ip2region 获取地理位置

因为最近有个需求需要根据客户端ip地址进行城市定位,使用了ip2region自己写了一个 一、获取到客户端的ip地址,参考以前的文章 获取ip地址 二、引入 ip2region <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>1.7.2</version&gt.

枯葉 1362

量化交易——量化选股(多因子选股)

就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后再把最新的因子值代入回归方程得到一个对未来股票收益的预判,然后再以此为依据进行选股。的方法是建立在市场无效或弱有效的前提之下,随着使用多因子选股模型的投资者数量的不断增加,有的因子会逐渐失效,而。就是根据各个因子的大小对股票进行打分,然后按照一定的权重加权得到一个总分,根据总分再对股票进行筛选。另一方面,一些因子可能在过去的市场环境下比较有效,而随着市场风格的改变,这些。波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的。

jiucaixiuyang的博客 1790

Java使用ip2region解析ip获取地区位置

ip2region - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的。

qq_43548590的博客 2145

Python读取ECMWF grib数据;Anaconda配置eccodes和cfgrib环境及安装过程

python读取grib数据,eccodes,cfgrib安装。

qq_36714629的博客 2244

从二极管到CMOS:手把手教你搭建数字电路中的基础门电路(附原理图)

本文详细介绍了数字电路中基础门电路的搭建方法,从二极管门电路到现代CMOS门电路的设计与实现。通过原理图解析和实战案例,帮助读者掌握数字电路设计的核心知识,包括电平实现、门电路工作原理及实际调试技巧,适合电子技术爱好者和初学者学习参考。

weixin_29252171的博客 321

根据请求的真实IP地址,获取请求的位置信息

首先,需要导入maven包 <!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region --> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifact...

zuihongyan518的博客 1779

华为OD机试真题 新系统 2026-09-06 Python&JS【仓储货物有序出库】

某仓储中心有一个货物堆放区,货物编号按乱序堆叠存放,只能从顶部取货,管理员需要将货物按编号从小到大取出。

MISAYAONE的博客 119

网关中集成ip2region的方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33777877的博客 318

基于Python的FTA协定内容爬虫实战:从数据抓取到智能分析

本文将详细介绍如何使用Python构建一个高效的FTA(自由贸易协定)内容爬虫,涵盖最新技术如Playwright、异步IO、智能解析等。通过本教程,您将学会如何从各类政府网站和国际组织平台抓取结构化FTA数据,并对其进行清洗、存储和分析。文章包含完整的代码实现和最佳实践指南,适合中高级Python开发者学习网络爬虫开发。

2201_76125261的博客 994

用 MVC 框架把 ABAP 报表写成可扩展的应用(2)

本文介绍了一个基于MVC架构的SAP报表模板,解决了传统ABAP报表开发中的三个核心痛点: 选择屏幕校验逻辑分散问题 - 通过统一的选择屏幕控制器集中管理校验逻辑 在线与后台输出不一致问题 - 共享同一数据模型,通过不同控制器实现多样化展示 屏幕流转管理混乱问题 - 主控制器统一管理所有屏幕流程和事件 该模板采用分层架构: Model层专注数据获取和业务规则 Controller层管理流程和交互 View层负责展示逻辑 特别适用于需要同时支持交互式ALV展示和后台批处理输出的报表场景,通过标准化的扩展点设计

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 78

java根据ip创建文件夹_新报: 根据IP获取物理地址不需要调用接口啦

一、 复制data文件夹到自己的项目当中可以进行加载到这个文件即可 博主放入在项目的根目录当中带入maven依赖 因为这个编辑器的原因 复制依赖 显示不出来淦!!!! 图片自己打吧org.lionsoulip2region1.7.2二、最重要的一步 编译地理位置找到自己的项目地址执行打开cmd 执行这段代码java -Dfile.encoding=utf-8 -jar dbMaker-...

weixin_29798865的博客 411

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ip java_Java - 根据IP获取城市

ip2region准确率99.9%的ip地址定位库,0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java,php,c,python,nodejs,golang查询绑定和Binary,B树,内存三种查询算法解压目录如下图:新建java项目,导入binding/java下的代码,并复制”data/ip2region.db”到“src目录创建“IPUtil”.java ,内容参考”org.li...

weixin_34697798的博客 280

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ip转地址本地db获取

ip转地址本地db获取

yushun的博客 166

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

使用Spring Boot整合ip2region获取客户端IP地理位置信息

在我们日常WEB开发工作中,经常会有需要获取客户端地理位置的需求,如:发布内容显示城市名、系统统计监控用户访问城市等等,获取客户端IP的地理位置信息有助于提供个性化服务、提高用户体验,以及进行数据分析和安全防护。今天博主就给大家介绍一个高效的IP地理位置库 -ip2regionip2region- 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。ip2region。

Micro麦可乐的博客 1万+

Java获取IP地址及对应的归属地

Java获取IP地址及对应的归属地

Javaの甘乃迪的博客 1万+

SpringBoot整合Ip2region获取IP地址和定位

2.0 格式的 xdb 支持亿级别的 IP 数据段行数,region 信息也可以完全自定义,例如:你可以在 region 中追加特定业务需求的数据,例如:GPS信息/国际统一地域信息编码/邮编等。xdb 格式生成程序会自动去重和压缩部分数据,默认的全部 IP 数据,生成的 ip2region.xdb 数据库是 11MiB,随着数据的详细度增加数据库的大小也慢慢增大。可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?

putMap的博客 4999

使用 ip2region 获取用户的 IP 归属地

ip2region 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。国家|区域|省份|城市|ISP,只有中国的数据绝大部分精确到了城市,其他国家部分数据只能定位到国家,后前的选项全部是0。

m0_53062159的博客 7335
上一篇: ETL讲解
下一篇: sqoop import SqlServer to hive
lcl_bigdata
博客等级 码龄11年 268粉丝 67原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值