我搜索了apache commons netutils
和其他已知的API,但无法找到一个好方法。
给定ip
和broadcast
如何找到subnet
或cidr
。
我知道broadcast = ip | ( ~ subnet )
但是给出了启动ip和广播ip,如何找到子网。
例如start ip = 10.2.22.1和getway / broadcast ip = 10.2.22.255。
CIDR
格式为10.2.22.0/24
或netmask
为255.255.255.0
。
答案 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();