Java 获取公网IP

概述

在Java中获取公网IP的过程可以分为以下几个步骤:

  1. 发送一个 HTTP GET 请求到一个公网地址,获取响应数据;
  2. 解析响应数据,提取其中的IP地址。

下面将详细介绍每一步需要做什么,以及使用的代码和注释。

步骤一:发送HTTP请求获取响应数据

首先,我们需要使用Java中的网络编程库发送一个HTTP GET请求,并获取到响应数据。这里我们可以使用Java的URLConnection类来实现。 以下是示例代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class GetPublicIP {
    public static void main(String[] args) {
        try {
            // 创建URL对象
            URL url = new URL("
            
            // 打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // 设置请求方法为GET
            connection.setRequestMethod("GET");
            
            // 获取响应状态码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);
            
            // 读取响应数据
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            
            // 输出响应数据
            System.out.println(response.toString());
            
            // 关闭连接
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上代码通过发送一个GET请求到"

步骤二:解析响应数据提取IP地址

接下来,我们需要从响应数据中解析出IP地址。在这个例子中,我们可以假设响应数据是一个HTML页面,其中包含了公网IP地址。

以下是示例代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class GetPublicIP {
    public static void main(String[] args) {
        try {
            // 创建URL对象
            URL url = new URL("

            // 打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为GET
            connection.setRequestMethod("GET");

            // 获取响应状态码
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 读取响应数据
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();

            // 关闭连接
            connection.disconnect();

            // 提取IP地址
            Pattern pattern = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
            Matcher matcher = pattern.matcher(response.toString());
            if (matcher.find()) {
                String ip = matcher.group();
                System.out.println("Public IP: " + ip);
            } else {
                System.out.println("Failed to extract public IP.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上代码通过使用正则表达式提取响应数据中的IP地址,并输出到控制台。

流程图

graph TD
A[发送HTTP GET请求] --> B{获取响应数据}
B --> C[解析响应数据提取IP地址]
C --> D{输出IP地址}

以上是整个流程的流程图,可以清晰地展示每个步骤之间的依赖关系。

甘特图

gantt
    title Java获取公网IP甘特图
    dateFormat  YYYY-MM-DD
    section 发送HTTP GET请求
    准备代码    :a1, 2022-01-01, 1d
    发送请求    :a2, after a1, 2d
    section 获取响应数据
    获取响应状态码 :b1, after a2, 1d
    读取响应数据   :b2, after b1, 2d
    section 解析响应数据提取IP地址
    提取IP地址   :c1, after b2, 2d
    section 输出IP地址
    输出