Java 判断内网IP

简介

在计算机网络中,内网IP指的是在局域网内使用的IP地址,它们通常由路由器分配给设备。判断一个IP地址是否为内网IP是开发中常见的问题之一。本文将介绍如何使用Java来判断一个IP地址是否为内网IP。

内网IP的判断

判断一个IP地址是否为内网IP的方法有很多种,我们这里介绍一种简单的方法,即根据IP地址的范围进行判断。通常来说,内网IP地址的范围如下:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

如果一个IP地址在以上范围内,就可以判断它是内网IP。

实现代码

下面是一个使用Java判断IP地址是否为内网IP的示例代码:

public class IPUtils {

    public static boolean isPrivateIP(String ipAddress) {
        try {
            // 将IP地址转换为长整型
            long ip = convertIPToLong(ipAddress);

            // 判断IP地址是否在内网IP的范围内
            return (ip >= convertIPToLong("10.0.0.0") && ip <= convertIPToLong("10.255.255.255"))
                    || (ip >= convertIPToLong("172.16.0.0") && ip <= convertIPToLong("172.31.255.255"))
                    || (ip >= convertIPToLong("192.168.0.0") && ip <= convertIPToLong("192.168.255.255"));
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public static long convertIPToLong(String ipAddress) {
        String[] ipArray = ipAddress.split("\\.");
        long ip = 0;
        for (int i = 0; i < 4; i++) {
            ip = ip << 8;
            ip |= Long.parseLong(ipArray[i]);
        }
        return ip;
    }

    public static void main(String[] args) {
        String ipAddress1 = "192.168.0.1";
        String ipAddress2 = "123.45.67.89";

        System.out.println(ipAddress1 + " is private IP: " + isPrivateIP(ipAddress1));
        System.out.println(ipAddress2 + " is private IP: " + isPrivateIP(ipAddress2));
    }
}

上面的代码定义了一个IPUtils类,其中包含了两个方法:

  • isPrivateIP(String ipAddress) 方法用于判断一个IP地址是否为内网IP。
  • convertIPToLong(String ipAddress) 方法用于将一个IP地址转换为长整型。

main方法中,我们测试了两个IP地址,一个是内网IP地址192.168.0.1,另一个是外网IP地址123.45.67.89。运行上述代码,输出结果如下:

192.168.0.1 is private IP: true
123.45.67.89 is private IP: false

流程图

下面是判断IP地址是否为内网IP的流程图:

flowchart TD
    A[开始] --> B{输入IP地址}
    B --> C{IP地址是否合法}
    C --> D[输出不是内网IP]
    C --> E{判断IP地址范围}
    E --> F{IP地址是否在10.0.0.0~10.255.255.255范围内}
    F --> G[输出是内网IP]
    E --> H{IP地址是否在172.16.0.0~172.31.255.255范围内}
    H --> I[输出是内网IP]
    E --> J{IP地址是否在192.168.0.0~192.168.255.255范围内}
    J --> K[输出是内网IP]

类图

下面是IPUtils类的类图:

classDiagram
    IPUtils --|> Object
    IPUtils : + isPrivateIP(String) : boolean
    IPUtils : + convertIPToLong(String) : long

总结

本文介绍了如何使用Java判断一个IP地址是否为内网IP。我们通过判断IP地址的范围来进行判断,如果一个IP地址在特定范围内,就可以判断它是