Java获取客户端公网IP

在网络编程中,有时我们需要获取客户端的公网IP地址。公网IP地址是一个全球唯一的IP地址,用于标识一台计算机在互联网上的位置。本文将介绍如何使用Java编程语言获取客户端的公网IP地址,并提供相应的代码示例。

什么是公网IP

公网IP(Public IP)是指可以直接访问互联网的IP地址。它由互联网服务提供商(ISP)分配给用户设备,用于与外部网络进行通信。与之相对的是私有IP地址,私有IP地址只能在局域网内部使用,不能直接与互联网通信。

公网IP地址通常由IPv4或IPv6协议定义。IPv4地址由四个十进制数(0-255)组成,例如192.168.0.1;而IPv6地址由八组十六进制数组成,例如2001:0db8:85a3:0000:0000:8a2e:0370:7334。

获取公网IP的方法

方法一:使用HTTP请求获取公网IP

一种常见的方式是向一个公网IP查询网站发送HTTP请求,然后从返回的HTML内容中解析出公网IP地址。以下是使用Java代码实现的示例:

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

public class PublicIPFetcher {
    public static String fetch() throws IOException {
        URL url = new URL("
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String ip = reader.readLine().trim();
        reader.close();
        
        return ip;
    }
}

上述代码通过发送GET请求到一个提供公网IP查询服务的网站(

方法二:使用网络接口获取公网IP

另一种方法是通过访问网络接口获取公网IP地址。Java提供了java.net.InetAddress类,该类可以用于获取主机的IP地址。但是,InetAddress类只能获取本地主机的IP地址,不能直接获取公网IP地址。一种间接的方式是通过连接到一个外部服务器获取公网IP地址。以下是使用Java代码实现的示例:

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

public class PublicIPFetcher {
    public static String fetch() throws IOException {
        Socket socket = new Socket("www.google.com", 80);
        InetAddress address = socket.getLocalAddress();
        String ip = address.getHostAddress();
        socket.close();
        
        return ip;
    }
}

上述代码通过创建一个套接字(Socket)并连接到Google的80端口,然后获取本地主机的IP地址。由于连接到Google的过程中,Java会自动使用本地的公网IP地址,因此可以通过获取本地主机的IP地址来间接获取公网IP地址。

总结

本文介绍了两种获取客户端公网IP地址的方法,并提供了相应的Java代码示例。这些方法主要通过发送HTTP请求或连接到外部服务器的方式获取公网IP地址。在实际应用中,我们可以根据具体需求选择合适的方法来获取公网IP地址。

参考资料:

  • [How to get public IP address in Java](