Java 获取 IP 地址是公网还是内网

在网络编程中,我们经常需要判断一个 IP 地址是公网还是内网。公网 IP 地址是可以在互联网上访问的,而内网 IP 地址则只能在局域网内访问。本文将介绍如何在 Java 中获取 IP 地址,并判断其是公网还是内网。

流程图

以下是获取 IP 地址并判断其类型的过程:

flowchart TD
    A[开始] --> B[获取本地 IP 地址]
    B --> C{判断 IP 地址类型}
    C -->|公网 IP| D[结束]
    C -->|内网 IP| E[结束]

代码示例

以下是 Java 中获取 IP 地址并判断其类型的代码示例:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class IPChecker {
    public static void main(String[] args) {
        try {
            InetAddress localHost = InetAddress.getLocalHost();
            String ip = localHost.getHostAddress();

            System.out.println("本地 IP 地址: " + ip);

            if (isPublicIP(ip)) {
                System.out.println("这是一个公网 IP 地址");
            } else {
                System.out.println("这是一个内网 IP 地址");
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    public static boolean isPublicIP(String ip) {
        return !(ip.startsWith("10.") || ip.startsWith("192.168.") || ip.startsWith("172.16.") || ip.startsWith("172.17.") || ip.startsWith("172.18.") || ip.startsWith("172.19.") || ip.startsWith("172.20.") || ip.startsWith("172.21.") || ip.startsWith("172.22.") || ip.startsWith("172.23.") || ip.startsWith("172.24.") || ip.startsWith("172.25.") || ip.startsWith("172.26.") || ip.startsWith("172.27.") || ip.startsWith("172.28.") || ip.startsWith("172.29.") || ip.startsWith("172.30.") || ip.startsWith("172.31."));
    }
}

甘特图

以下是获取 IP 地址并判断其类型的项目进度表:

gantt
    title 获取 IP 地址并判断其类型
    dateFormat  YYYY-MM-DD
    section 获取 IP 地址
    获取本地 IP 地址 :done, des1, 2022-01-10,2022-01-10
    section 判断 IP 地址类型
    判断 IP 地址类型 :active, des2, 2022-01-11,2022-01-12
    section 结束
    结束 :2022-01-13

结尾

通过上述代码示例和流程图,我们可以轻松地在 Java 中获取 IP 地址并判断其是公网还是内网。这对于网络编程和网络安全等领域具有重要意义。希望本文对您有所帮助。