使用Java获取当前主机公网IP地址

在某些场景下,我们可能需要获取当前主机的公网IP地址,例如用于网络连接、身份验证等。本文将介绍如何使用Java程序获取当前主机的公网IP地址,并提供相应的代码示例。

什么是公网IP地址?

在计算机网络中,IP地址是用于标识网络上的设备的唯一地址。IP地址分为公网IP地址和私有IP地址。公网IP地址是全球唯一的,用于互联网上的设备之间进行通信;私有IP地址则用于内部网络之间的通信。

公网IP地址通常由Internet服务提供商(ISP)分配,并用于路由器或防火墙等设备连接到互联网。每当我们在浏览器中输入网址访问网站时,我们的计算机都会使用公网IP地址与远程服务器进行通信。

Java如何获取公网IP地址?

在Java中,我们可以使用一些方法来获取当前主机的IP地址。下面介绍几种常用的方法。

方法一:使用第三方接口

有一些第三方接口可以提供当前主机的公网IP地址。我们可以通过向这些接口发送请求获取IP地址信息。

以下是使用`

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

public class PublicIP {
    public static void main(String[] args) {
        try {
            // 创建URL对象
            URL url = new URL("
            
            // 打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // 设置请求方法为GET
            connection.setRequestMethod("GET");
            
            // 获取输入流
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            
            // 读取响应结果
            String response = reader.readLine();
            
            // 解析JSON
            // 这里使用了第三方库,例如Google的Gson库
            // 也可以使用Java内置的JSON解析库
            Gson gson = new Gson();
            JsonObject jsonObject = gson.fromJson(response, JsonObject.class);
            String ipAddress = jsonObject.get("query").getAsString();
            
            // 输出IP地址
            System.out.println("Public IP address: " + ipAddress);
            
            // 关闭连接
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

方法二:使用网络接口

Java提供了一些网络接口来获取IP地址信息。我们可以使用java.net包中的NetworkInterface类来获取当前主机的网络接口列表,并从中筛选出公网IP地址。

以下是使用NetworkInterface类获取公网IP地址的示例代码:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class PublicIP {
    public static void main(String[] args) {
        try {
            // 获取网络接口列表
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            
            // 遍历网络接口
            while (interfaces.hasMoreElements()) {
                NetworkInterface iface = interfaces.nextElement();
                
                // 排除回环接口和虚拟接口
                if (iface.isLoopback() || iface.isVirtual()) {
                    continue;
                }
                
                // 遍历接口的InetAddress列表
                Enumeration<InetAddress> addresses = iface.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                    
                    // 筛选出公网IP地址
                    if (!address.isSiteLocalAddress() && !address.isLoopbackAddress() && address.getHostAddress().indexOf(":") == -1) {
                        System.out.println("Public IP address: " + address.getHostAddress());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

结论

本文介绍了两种常用的方法来获取当前主机的公网IP地址。通过使用第三方接口或Java提供的网络接口,我们可以轻松地在Java程序中获取公网IP地址。根据实际需求选择合适的方法,并根据需要对代码进行适当的修改和优化。

希望本文对您有所帮助!