首页 > 所有文章 > 行业 >文章详情

controller 获取ip(ip地址网址查询)

时间:2024-02-13 09:07:38 浏览量:316

前几个月微信公众号上线了 IP归属地 的功能,后续知乎、抖音等平台纷纷添加了该功能。如果是国内的用户精确到省份,国外用户精确到国家。本文就使用 Java 实现获取 IP归属地

主要讲解几个步骤:

首先使用基于 Spring Boot 搭建项目,在 controller 添加 HttpServletRequest 请求参数:

通过 HttpServletRequest 获取 IP地址

在本地环境调用获取IP,要么是 0:0:0:0:0:0:0:1 ,或者是局域网 IP

局域网 IP 是以 192.168.x.x 开头,或者是 127.0.0.1 IP

所以需要部署到 外网服务器 才能获取到公网地址。部署到外网服务器能成功获取 IP 地址。

直接访问公网服务器地址能成功获取 IP 地址,但是通过 Nginx 反向代理获取的都是 127.0.0.1 。客户端请求 Nginx 服务器再反向代理转发到服务端,此时拿到的 IP 反向代理的 IP ,也就是 Nginx 服务器的 IP ,并不是真正的客户端 IP

Nginx 的配置文件中的 location 模块添加以下配置,将客户端的 IP 传入到 Nginx 服务:

示例:

完成以上操作之后,就能成功获取到 IP 了。然后通过 IP 获取归属地了。

通过 IP 获取归属地一般都从地址库找到匹配的地址,本文介绍两种方法.

需要发起 http 请求,这里使用 Spring Boot RestTemplate 发起 http 请求,首先创建 RestTemplate bean 实例:

再调用 RestTemplate 发起 http 请求:

上面的 json 是引入 fastjson

使用 API接口 ,可能会出现服务挂了,或者服务地址不提供服务了等问题。而采用本地地址库就没有这些问题。

本文采用离线 IP 地址定位库 Ip2region, Ip2region 是一个离线 IP 地址定位库,微秒的查询时间:

首先找到在gihub官网找到地址库 ip2region.xdb ,具体路径为 data/ip2region.xdb :

ip2region.xdb 放在项目的 resources 目录下:

引入 maven 依赖:

获取归属地:

获取 region 就能获取到 IP 归属地了。例如 中国|0|广东省|广州市|电信

根据上面的程序,做了一个小程序展示归属地。

页面效果图:

扫一扫,就能获取查到自己的归属地了。