如何使用Java查询公网IP地址

在进行网络编程或者网络安全测试时,经常需要查询本机的公网IP地址。在Java中,我们可以通过一些常用的方法来获取本机的公网IP地址。本文将介绍如何使用Java代码查询公网IP地址,并提供相应的代码示例。

获取本机公网IP地址的方法

在Java中,获取本机公网IP地址的方法主要有以下几种:

  1. 使用第三方的公网IP查询服务
  2. 通过访问网络接口获取IP地址
  3. 通过Socket连接获取IP地址

下面将分别介绍这三种方法的具体实现方式。

使用第三方的公网IP查询服务

有一些网站提供了查询用户公网IP地址的服务,我们可以通过访问这些网站获取公网IP地址。通常这些服务会返回一个包含用户公网IP地址的JSON字符串,我们可以解析这个字符串来获取IP地址。

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

public class PublicIPService {

    public static String getPublicIP() {
        String ip = "";
        try {
            URL url = new URL("
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer content = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                content.append(inputLine);
            }
            in.close();
            con.disconnect();
            ip = content.toString().split("\"")[3];
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ip;
    }

    public static void main(String[] args) {
        String publicIP = getPublicIP();
        System.out.println("Public IP Address: " + publicIP);
    }
}

通过访问网络接口获取IP地址

另一种方法是通过访问网络接口获取IP地址。我们可以通过Java代码访问一些公开的网络接口,比如httpbin.org,来获取本机的公网IP地址。

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

public class PublicIPAPI {

    public static String getPublicIP() {
        String ip = "";
        try {
            URL url = new URL("
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer content = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                content.append(inputLine);
            }
            in.close();
            con.disconnect();
            ip = content.toString().split("\"")[3];
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ip;
    }

    public static void main(String[] args) {
        String publicIP = getPublicIP();
        System.out.println("Public IP Address: " + publicIP);
    }
}

通过Socket连接获取IP地址

最后一种方法是通过建立Socket连接获取IP地址。我们可以通过连接到一些公开的Socket服务器,比如google.com的端口80,来获取本机的公网IP地址。

import java.net.InetAddress;
import java.net.Socket;

public class PublicIPObtain {

    public static String getPublicIP() {
        String ip = "";
        try {
            Socket socket = new Socket("google.com", 80);
            InetAddress address = socket.getLocalAddress();
            ip = address.getHostAddress();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ip;
    }

    public static void main(String[] args) {
        String publicIP = getPublicIP();
        System.out.println("Public IP Address: " + publicIP);
    }
}

序列图

下面是一个使用第三方的公网IP查询服务来获取IP地址的序列图示例:

sequenceDiagram
    participant Client
    participant Service
    Client ->> Service: 发起IP查询请求
    Service ->> Client: 返回IP地址

结语

本文介绍了如何使用Java代码查询公网IP地址的方法,并给出了相应的代码示例。通过这些方法,我们可以方便地获取本机的公网IP地址,从而更好地进行网络编程或者网络安全测试。希望本文对你有所帮助,谢谢阅读!