从start ip和broadcast ip确定子网/ cidr

时间:2014-08-21 18:06:42

标签: java networking ipv4

我搜索了apache commons netutils和其他已知的API,但无法找到一个好方法。 给定ipbroadcast如何找到subnetcidr

我知道broadcast = ip | ( ~ subnet )

但是给出了启动ip和广播ip,如何找到子网。

例如start ip = 10.2.22.1和getway / broadcast ip = 10.2.22.255。

CIDR格式为10.2.22.0/24netmask255.255.255.0

2 个答案:

答案 0 :(得分:1)

希望有所帮助:

int ip2Num(final String ip) {
    int result = 0;
    final String[] segs = ip.split("\\.");
    int c = 32;
    for (final String s : segs) {
        result |= Integer.parseInt(s) << c;
        c -= 8;
    }
    return result;
}
// not used at that moment
String long2Ip(final int l) {
    String result = "" + l;
    result = result.replaceAll("(?<=\\d{3})(\\d{3})", ".$1");
    return result;
}
void sendIfMatch(final String ip, final String netmask) {
    final int lIp = ip2Num(ip);
    final int lNm = ip2Num(netmask);
    final boolean matches = ((lIp & lNm) == lIp);
    if (matches) {
        System.out.println("we should do something for ip " + ip);
    } else {
        System.out.println("dont match: " + lIp + "::" + lNm);
    }
}
void test() {
    sendIfMatch("10.2.22.1", "10.2.22.255");
}

答案 1 :(得分:0)

了解如何执行此操作。

Integer cidrSize = Integer.numberOfLeadingZeros(startIpInteger ^ broadcastIpInteger);
String cidrNotation = startIpString/cidrSize;

如何获取IP的整数表示? Apache commons net可以提供帮助

现在获取网络掩码可以像

一样简单
SubnetInfo info = new SubnetUtils(cidrNotation).getInfo();
String netmask = info.getNetmask();