您当前的位置:首页 > 互联网教程

手把手教你用Java获取IP归属地

发布时间:2025-05-24 23:10:56    发布人:远客网络

手把手教你用Java获取IP归属地

一、手把手教你用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对象的方法。