Java获取本机的公网IP地址

引言

在很多情况下,我们可能需要获取本机的公网IP地址,例如用于网络监控、IP限制等应用场景。本文将介绍如何使用Java代码获取本机的公网IP地址。

获取本机的公网IP地址

要获取本机的公网IP地址,我们可以使用以下两种方法:通过访问第三方网站获取IP地址或通过解析网络接口获取IP地址。

方法一:通过访问第三方网站获取IP地址

我们可以通过访问一个提供IP信息的第三方网站,然后解析网页内容来获取我们的公网IP地址。

示例代码:

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

public class GetPublicIP {
    public static void main(String[] args) {
        try {
            URL url = new URL("
            BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
            String ip = br.readLine().trim();
            System.out.println("Public IP address: " + ip);
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上代码中,我们使用了URLBufferedReader来读取一个提供公网IP信息的网站,然后从网页内容中解析出我们的公网IP地址。

方法二:通过解析网络接口获取IP地址

另一种方法是通过解析网络接口获取IP地址。Java提供了InetAddress类来获取本机的IP地址,我们可以通过对网络接口进行遍历,找到非回环地址(即公网IP地址)。

示例代码:

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

public class GetPublicIP {
    public static void main(String[] args) {
        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface networkInterface = interfaces.nextElement();
                if (networkInterface.isLoopback() || !networkInterface.isUp()) {
                    continue;
                }
                Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                    if (!address.isLoopbackAddress() && address.getHostAddress().indexOf(":") == -1) {
                        System.out.println("Public IP address: " + address.getHostAddress());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

以上代码中,我们通过遍历所有的网络接口,并排除回环地址和未启用的接口,找到非回环地址(即公网IP地址)。

类图

下面是本文代码示例中的类图:

classDiagram
    class GetPublicIP {
        +main(args: String[]): void
    }

结论

本文介绍了两种方法来获取本机的公网IP地址。通过访问第三方网站获取IP地址是最简单的方法,但依赖于第三方网站的可用性。通过解析网络接口获取IP地址可以更加可靠地获取IP地址,但需要对网络接口进行遍历。根据具体的应用场景,选择合适的方法来获取本机的公网IP地址。

希望本文对你理解如何使用Java代码获取本机的公网IP地址有所帮助。如果你有任何问题或建议,请随时在下方评论区留言。