手把手教你用Java获取IP归属地
发布时间:2025-05-24 23:10:56 发布人:远客网络
一、手把手教你用Java获取IP归属地
本文旨在手把手教你使用Java实现获取IP归属地的功能,以解决各大平台如微信公众号、知乎和抖音等所推出的相关功能。实现这一目标的步骤涉及获取IP地址、解决Nginx反向代理问题以及通过IP获取归属地等关键环节。
首先,我们需要基于Spring Boot搭建项目,添加控制器(Controller)中使用HttpServletRequest获取IP地址。然而,在本地环境下,获取的IP可能是0:0:0:0:0:0:0:1或局域网IP,这些都不具备公网访问的能力,因此需要将项目部署至外网服务器,以确保能成功获取到公网IP。
面对Nginx反向代理的挑战,我们需要在Nginx的配置文件中添加特定的配置,确保客户端请求的IP能够被正确传入Nginx服务。通过这一措施,最终获取到的是客户端的真实IP,而非Nginx服务器的IP。
获取到IP后,接下来的步骤是获取归属地。有多种方法可以实现这一目标,本文将介绍两种主要途径:一是通过IP归属地API获取,需发起HTTP请求,使用Spring Boot的RestTemplate来完成;二是通过本地地址库获取,推荐使用Ip2region库,该库以微秒级的速度进行查询,无需担心API服务中断的问题。
为了实现本地地址库的使用,我们首先需要从GitHub官网下载ip2region.xdb地址库,并将其放置在项目资源目录下。接下来,引入相应的Maven依赖,编写代码以完成IP归属地的查询。最终,通过获取region信息,即可获取到IP的归属地,如“中国|0|广东省|广州市|电信”等。
为验证上述程序的有效性,我们以小程序的形式展示IP归属地获取功能,并附上页面效果截图。只需通过扫描二维码,即可查询到自身的归属地信息,直观且便捷。
二、java中如何获取到本机的外网ip地址
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
*思想是访问网站,得到返回的文本后解析出本机在外网的IP地址
public class ExternalIpAddressFetcher{
private String externalIpProviderUrl;
private String myExternalIpAddress;
public ExternalIpAddressFetcher(String externalIpProviderUrl){
this.externalIpProviderUrl= externalIpProviderUrl;
String returnedhtml= fetchExternalIpProviderHTML(externalIpProviderUrl);
*从外网提供者处获得包含本机外网地址的字符串
*从返回的字符串如下
*<html><head><title>Current IP Check</title></head><body>Current IP Address: 123.147.226.222</body></html>
private String fetchExternalIpProviderHTML(String externalIpProviderUrl){
HttpURLConnection httpConn= null;
URL url= new URL(externalIpProviderUrl);
httpConn=(HttpURLConnection) url.openConnection();
HttpURLConnection.setFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("User-Agent",
"Mozilla/4.0(compatible; MSIE 6.0; Windows 2000)");
in= httpConn.getInputStream();
byte[] bytes=new byte[1024];//此大小可根据实际情况调整
while(offset< bytes.length
&&(numRead=in.read(bytes, offset, bytes.length-offset))>= 0){
String receivedString=new String(bytes,"UTF-8");
} catch(MalformedURLException e){
*使用正则表达式解析返回的HTML文本,得到本机外网地址
private void parse(String html){
Pattern pattern=Pattern.compile("(\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})", Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(html);
myExternalIpAddress=matcher.group(0);
*得到本机外网地址,得不到则为空
public String getMyExternalIpAddress(){
public static void main(String[] args){
ExternalIpAddressFetcher fetcher=new ExternalIpAddressFetcher("");
System.out.println(fetcher.getMyExternalIpAddress());
三、java获取本地ip
很多朋友都想知道java如何获取本地ip?下面就一起来了解一下吧~
获取java本地ip一共有两种方法:1、inetAddress类;2、封装方法。
通过InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。其生成InetAddress对象的方法。