java - 使用Java测试两个IP是否在同一个网络中

标签 java ip subnet

如何根据子网掩码判断两个IP是否在同一网络?

例如,我有 IP 1.2.3.4 和 1.2.4.3:如果掩码为 255.0.0.0 或 255.255.0.0 甚至 255.255.248.0,则两者都在同一网络中,但如果掩码为 255.255.255.0 则不在同一个网络中。

最佳答案

试试这个方法:

public static boolean sameNetwork(String ip1, String ip2, String mask) 
throws Exception {

    byte[] a1 = InetAddress.getByName(ip1).getAddress();
    byte[] a2 = InetAddress.getByName(ip2).getAddress();
    byte[] m = InetAddress.getByName(mask).getAddress();

    for (int i = 0; i < a1.length; i++)
        if ((a1[i] & m[i]) != (a2[i] & m[i]))
            return false;

    return true;

}

然后像这样使用它:

sameNetwork("1.2.3.4", "1.2.4.3", "255.255.255.0")
> false

编辑:

如果您已经将 IP 作为 InetAddress 对象:

public static boolean sameNetwork(InetAddress ip1, InetAddress ip2, String mask) 
throws Exception {

    byte[] a1 = ip1.getAddress();
    byte[] a2 = ip2.getAddress();
    byte[] m = InetAddress.getByName(mask).getAddress();

    for (int i = 0; i < a1.length; i++)
        if ((a1[i] & m[i]) != (a2[i] & m[i]))
            return false;

    return true;

}

关于java - 使用Java测试两个IP是否在同一个网络中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555847/

相关文章:

javascript - 如何在谷歌地图中通过ip获取城市名称?

c - 多个以太网接口(interface) - 如何创建一个单独的网络并从 C 代码访问

amazon-web-services - 为什么子网不能跨越 AWS 中的可用区?

java - 为什么我会收到此 NullPointer 异常?

java - Gson fromJson 和 toJson 用于 Java 中返回 null 的简单对象

ip - 为什么 youtube.com 解析后的 IP 会指向 google.com?

ip - 如果我位于 VPN 之后,有没有办法跟踪数据包的 "real"路由?

java - 如何在文本字段中选择字符?

java - 如何添加到具有两个已定义泛型的列表?

android - 如何阻止连接到 AWS RDS 实例的不需要的设备?