IP归属地解析之离线纯真数据库分享

article/2025/11/9 7:53:16

文章目录

  • 前言
  • 一、什么是IP离线纯真数据库
  • 二、GeoIP2
    • 1.引入库
    • 2. 代码实装
      • 2.1 数据获取
      • 2.2 数据位置
      • 2.3 编写测试类
      • 2.4 IP解析
  • 三、IP2Location
    • 1. 官方SDK文件获取
    • 2. 代码实装
      • 2.1 获取数据
      • 2.2 数据位置
      • 2.3 编写测试类
      • 2.4 IP解析
  • 四、dbIP
  • 五、数据免费下载
  • 总结


前言

能说算不上什么,有本事就把你的代码给我看看。—— Linus Torvalds,Linux 之父


一、什么是IP离线纯真数据库

今年上半年俄乌战争爆发,为了控制平台舆论,类似于抖音,微博等国内众多平台纷纷响应国家号召,开始进行IP的归属地显示。
这种可以通过IP地址来剥取到地理位置的做法目前实现起来主要有两种方式。

  1. 使用第三方API接口,比如目前国内的搜狐接口,淘宝接口,这种方式好处是,无需资源本地化,靠接口即可完成数据的取得,但是弊端也很明显,请求时效性,速度因人而异。
  2. 使用离线数据库,所谓的离线就是把IP库放到本地进行存储,然后通过自身的程序代码进行IP解析,相对更安全,快速。但是弊端就是IP地址不是长久不变的,IP是分配给给个运营商的,这个更新的频率可想而知,所以离线库就要考虑到数据的更新问题。

目前主流的离线库主要要三种:

  1. GeoIP2
  2. IP2Location
  3. dbIP

二、GeoIP2

1.引入库

        <dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>3.0.1</version></dependency>

2. 代码实装

2.1 数据获取

根据官网提示下载数据:链接: 官网
数据有两种形式:
1.MMDB结尾的二进制内置数据库
2.CSV结尾的可提供导入本地MySql数据的数据

2.2 数据位置

推荐放在resources 目录下
在这里插入图片描述

2.3 编写测试类

//GeoIP2-City 数据库文件
// 获取resources文件夹下的GeoIP2-City.mmdb文件 ,要获取绝对路径文件
File database = new File(Thread.currentThread().getContextClassLoader().getResource("GeoLite2-City.mmdb").getPath());
// 创建 DatabaseReader对象
DatabaseReader reader = new DatabaseReader.Builder(database).build();
InetAddress ipAddress = InetAddress.getByName("128.101.101.101");// Replace "city" with the appropriate method for your database, e.g.,
// "country".
CityResponse response = reader.city(ipAddress);Country country = response.getCountry();
System.out.println(country.getIsoCode());            // 'US'
System.out.println(country.getName());               // 'United States'
System.out.println(country.getNames().get("zh-CN")); // '美国'Subdivision subdivision = response.getMostSpecificSubdivision();
System.out.println(subdivision.getName());    // 'Minnesota'
System.out.println(subdivision.getIsoCode()); // 'MN'City city = response.getCity();
System.out.println(city.getName()); // 'Minneapolis'Postal postal = response.getPostal();
System.out.println(postal.getCode()); // '55455'Location location = response.getLocation();
System.out.println(location.getLatitude());  // 44.9733
System.out.println(location.getLongitude()); // -93.2323

2.4 IP解析

在这里插入图片描述

三、IP2Location

1. 官方SDK文件获取

在这里插入图片描述
可以自己选择自己想要的SDK进行封装拓展

2. 代码实装

2.1 获取数据

根据官网提示下载数据:链接: 官网
数据有两种形式:
1.BIN结尾的二进制内置数据库
2.CSV结尾的可提供导入本地MySql数据的数据

2.2 数据位置

推荐放在resources 目录下
在这里插入图片描述

2.3 编写测试类

		IP2Location loc = new IP2Location();try {String ip = "8.8.8.8"; //定义IPString binfile = "IP2LOCATION-LITE-DB11.BIN"; Path binpath = Paths.get("src", "main", "resources", binfile); //获取数据文件String binfilepath = binpath.toFile().getAbsolutePath();loc.Open(binfilepath, true);IPResult rec = loc.IPQuery(ip);if ("OK".equals(rec.getStatus())) {System.out.println(rec);} else if ("EMPTY_IP_ADDRESS".equals(rec.getStatus())) {System.out.println("IP address cannot be blank.");} else if ("INVALID_IP_ADDRESS".equals(rec.getStatus())) {System.out.println("Invalid IP address.");} else if ("MISSING_FILE".equals(rec.getStatus())) {System.out.println("Invalid database path.");} else if ("IPV6_NOT_SUPPORTED".equals(rec.getStatus())) {System.out.println("This BIN does not contain IPv6 data.");} else {System.out.println("Unknown error." + rec.getStatus());}System.out.println("Java Component: " + rec.getVersion());} catch (Exception e) {System.out.println(e);e.printStackTrace(System.out);} finally {loc.Close();}

2.4 IP解析

在这里插入图片描述

四、dbIP

dbIP属于一个第三方库,提供API结合和离线数据库,提供MMDB形式的数据库,需要配合类似GeoIP2的解析器进行解析,数据相对较GEOIP准确。
在这里插入图片描述
在这里插入图片描述
下载地址

五、数据免费下载

下载链接: 点击0积分下载

本来就免费的东西,更应该无偿分享。

总结

免费版本的离线数据都有不精确的误差,这是在所难免的,但是对于一般的业务使用场景已经完全够用了。
GEOIP2免费版对语言的支持相对友好。


http://chatgpt.dhexx.cn/article/uUCQCcDs.shtml

相关文章

IP数据包

IP数据包 结构&#xff1a;ip数据格式&#xff0c;ICMP协议介绍&#xff0c;ARP协议介绍。 网络层功能&#xff1a;定义了基于IP协议的逻辑地址。 ​ 链接不同媒介类型。 ​ 选择数据通过网络的最佳路径。 ip数据包的格式 版本(Version):该字段包含的是IP 的版本号&#x…

IP数据包详解

引言 IP提供不可靠&#xff0c;无连接的数据报传送服务。 不可靠&#xff1a;意思它不保证IP数据包能成功地到达目的地&#xff0c;IP仅提供尽力而为的传输服务。任何要求的可靠性必须有上层来提供。无连接&#xff1a;意思是IP并不维护任何关于后续数据报的状态信息&#xf…

网络基础:数据链路层_公网i私网ip、路由通信、MTU以及ip分片

在本章节开始前&#xff0c;先提出几个问题&#xff1a; 公网ip和私网ip的区别是什么&#xff0c;哪个能重复哪个不能&#xff1f;如何实现两个设备之间的信息通信&#xff1f;是通过公网ip查找还是私网ip查找&#xff1f;路由表包含的信息有哪些&#xff1f;ARP协议的作用以及…

公网IP与私网IP的区别

公网IP与私网IP 计算机上网原理 互联技术 公网IP与私网IP 最近在自己的虚拟机上装了一个Linux系统&#xff0c;相当于是一个服务器&#xff0c;但是这个“服务器”跟我们常说的云服务器&#xff0c;可以理解为一样也可以理解为不一样&#xff0c;其中一个很关键的点是&#xf…

公网IP、私网IP和IP分类

0. 源于&#x1f615; IP查询是一个经常性的操作&#xff0c;Windows平台可以在cmd中通过ipconfig查询&#xff0c;linux则在终端中输入ifconfig。发现我的IP通常是因为我到处蹭网&#xff1a;192.168.10.xxx。不是说IP地址全球唯一吗&#xff1f;怎么还有多个相同网段的IP呢&a…

php基于纯真IP数据库实现IP地址信息查询

php基于纯真IP数据库实现IP地址信息查询 最近在学习php&#xff0c;记录下这个php基于纯真IP数据库实现IP地址信息查询的实现方法。 注意&#xff1a;这个模块纯真ip数据库需要离线下载&#xff0c;不然的话访问会出错&#xff01;&#xff01;&#xff01;文章结尾会附上最新的…

百度查到的ip和ipconfig查到的不一样,公网ip 私网ip

公网IP是在公网中使用的IP地址&#xff0c;一个可直接访问其他IP&#xff0c;也可被其他IP直接访问的一个独立身份。有了它&#xff0c;你可以直接找到互联网中的其他电脑&#xff0c;也可以被其他电脑找到私网IP是在局域网中使用的IP地址。 而私网IP处于局域网下&#xff0c;它…

私网ip和公网ip_详解

备注:此博客为转载,原作者地址请点击此处 版权声明&#xff1a;本文为小小呆原创文章&#xff0c;转载请注明出处&#xff01; https://blog.csdn.net/gui951753/article/details/79210535 IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑…

没有公网IP,如何实现数据共享?

数据共享就是让在不同地方使用不同计算机、不同软件的用户能够读取他人数据并进行各种操作、运算和分析。不同层次、不同部门信息系统间&#xff0c;信息和信息产品的交流与共用&#xff0c;就是把信息这一种在互联网时代中重要性越趋明显的资源与其他人共同分享。 数据共享有…

【网络】为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC;

原文地址 IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用&#xff0c;然而只有Public IP才能直接连接上网络&#xff0c;所以对于那些公司&#xff0c;学校&#xff0c;政府机构等场所&#xff0c;就可以集中使用私有的…

【优化组合】基于matlab多种群混沌蚁群算法求解机组组合优化问题【含Matlab源码 2017期】

⛄一、多种群混沌蚁群算法求解机组组合优化问题 0 引言 机组组合问题(Unit Commitment,UC)又称开停机计划,是电力系统解决优化潮流(OPF)、经济调度(ED)进而实现自动发电控制(AGC)、自动电压控制(AVC)的前提。机组组合问题具有高维数、非凸、离散、非线性的特点,在数学上为NP-H…

组合优化基础

组合优化问题&#xff08;一&#xff09;TOC p问题&#xff0c;NP问题&#xff0c;NP完全问题&#xff0c;NP难问题 时间复杂度并不是表示一个程序解决问题需要画多少时间&#xff0c;而是当程序所处理的问题规模扩大后&#xff0c;程序需要的时间对应增长的有多快。 时间复…

组合优化中的全排列生成方法

组合优化中的全排列生成 之前有同学遇到组合优化&#xff08;如0-1优化&#xff09;问题&#xff0c;想采用穷举法&#xff0c;那么首先就要穷举产生所有的组合。 以0-1优化为例&#xff0c;假设当前有3个item&#xff0c;每个item有“选”或“不选”两种状态&#xff0c;那么…

机器学习求解组合优化问题强化学习笔记

目录 机器学习求解组合优化问题 求解组合优化问题的传统方法 精确算法&#xff1a; 启发式算法&#xff1a; 机器学习的相关知识 注意力机制 深度强化学习 主线奖励和稀疏奖励问题&#xff1a; 稀疏奖励问题&#xff1a; 辅助奖励函数设计 On-Policy 和Off-Policy问…

最新综述:用于组合优化的强化学习

©PaperWeekly 原创 作者 | 王馨月 学校 | 四川大学本科生 研究方向 | 自然语言处理 摘要 推许多解决组合优化问题的传统算法都涉及使用手工构造的启发式算法&#xff0c;这些启发式算法能够依次地构造解决方案。这种启发式方法是由领域专家设计的&#xff0c;且一般由于问…

【深度学习+组合优化】深度学习和强化学习在组合优化方面有哪些应用?

运筹优化博士&#xff0c;只做原创博文。更多关于运筹学&#xff0c;优化理论&#xff0c;数据科学领域的内容&#xff0c;欢迎关注我的知乎账号&#xff1a;https://www.zhihu.com/people/wen-yu-zhi-37 0 简介 2017年阿里巴巴的一篇用深度强化学习求解3维装箱问题的论文引发…

使用GNN求解组合优化问题

文章目录 1 论文内容1.1 先验知识1.2 论文方法1.2.1 大致原理1.2.2 源码关键实现 1.3 实际问题上的应用1.3.1 风险分散1.3.2 Interval Scheduling&#xff08;不大懂译&#xff0c;区间调度&#xff1f;&#xff09;1.3.3 配水管网的传感器布置 2 论文求解器源码的使用2.1 安装…

遗传算法的应用之函数优化和组合优化

目录 函数优化函数最值函数最值多个局部最优解问题 组合优化旅行商问题背包问题二进制表达法顺序表达式变长表达法适值函数的设计 转载原创 函数优化 函数最值 函数最值 该例子参考 深入浅出遗传算法&#xff0c;透析GA本质.&#xff08;强烈安利&#xff09;中的例子&…

单目标优化,多目标优化,数值优化,组合优化

何为优化&#xff1f; 措施&#xff1a; 对应方法 变得更优&#xff1a; 对应的结果更加的好 优化&#xff1a; 动词&#xff0c;一种行为方法----------->目的是获得更好的结果&#xff0c;总之有所改善 优化问题的三要素&#xff1a; &#xff08;1) 决策变量 …

OM | 强化学习 + 约束规划求解组合优化问题

组合优化在航空航天、交通规划以及经济学等众多学科领域中有广泛应用&#xff0c;其目标是在有限集中寻找最优解。然而状态空间过大的问题让目前组合优化变得棘手。在过去的几年中&#xff0c;使用深度强化学习&#xff08;deep reinforcement learning&#xff0c;DRL&#xf…