Java 获取外网IP

在某些情况下,我们可能需要获取本机的外网IP地址。例如,当我们需要获取本机在互联网上的唯一标识,或者用于统计访问量等场景时。本文将介绍如何使用Java代码来获取外网IP地址。

什么是IP地址?

IP(Internet Protocol)地址是网络上设备的唯一标识符。它由数字组成,用于在网络上定位和寻找设备。IP地址分为IPv4和IPv6两种格式,其中IPv4地址由32位数字组成,IPv6地址由128位数字组成。

IPv4地址的格式通常为xxx.xxx.xxx.xxx,其中每个xxx可以是0到255之间的任意数字。例如,192.168.0.1是一个IPv4地址。

IPv6地址的格式通常为xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,其中每个xxxx可以是0到FFFF之间的任意数字。例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334是一个IPv6地址。

获取外网IP的方法

获取外网IP的方法有很多种,本文将介绍两种常用的方法:使用HTTP请求和使用Socket连接。

1. 使用HTTP请求

可以使用一个公开的IP查询接口来获取本机的外网IP地址。这种方法的原理是向一个特定的URL发送HTTP请求,然后解析返回的结果获取IP地址。

下面是一个使用Java代码发送HTTP请求并解析结果的示例:

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

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

            // 打开HTTP连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            // 读取返回的结果
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();

            // 解析JSON结果,获取IP地址
            String ipAddress = response.toString().split("\"query\":\"")[1].split("\"")[0];
            System.out.println("External IP: " + ipAddress);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用了一个公开的IP查询接口`

2. 使用Socket连接

另一种获取外网IP的方法是通过与一个远程服务器建立Socket连接。我们可以连接到一个已知的服务器,然后获取连接的远程地址,即外网IP地址。

下面是一个使用Java代码建立Socket连接并获取远程地址的示例:

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;

public class GetExternalIP {
    public static void main(String[] args) {
        try {
            // 建立Socket连接
            Socket socket = new Socket("www.google.com", 80);

            // 获取远程地址
            InetAddress address = socket.getInetAddress();
            String ipAddress = address.getHostAddress();

            System.out.println("External IP: " + ipAddress);

            // 关闭Socket连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用了一个已知的服务器www.google.com来建立Socket连接,并获取连接的远程地址,即外网IP地址。

总结

本文介绍了两种使用Java代码获取外网IP地址的方法:使用HTTP请求和使用Socket连接。这些方法可以在需要获取本机外网IP的场景中使用,例如统计访问量、身份验证等。

获取外网IP地址是一个常见的需求,因此掌握这些方法对于Java开发人员来说是非常重要的。希望本文对你有所帮助!