有没有办法计算CIDR
给定Sub net mask
使用任何Java lib
/函数/技巧?我一直在寻找了一会儿,所有我能找到的是从CIDR -> Netmask
,我需要它的其他方式以防万一Netmask -> CIDR
......我不是在Java
是方便了,但是我愿意读了很多=)日Thnx家伙从给定的网络掩码计算CIDR - Java
PZP =)
有没有办法计算CIDR
给定Sub net mask
使用任何Java lib
/函数/技巧?我一直在寻找了一会儿,所有我能找到的是从CIDR -> Netmask
,我需要它的其他方式以防万一Netmask -> CIDR
......我不是在Java
是方便了,但是我愿意读了很多=)日Thnx家伙从给定的网络掩码计算CIDR - Java
PZP =)
掀起了一个快速的例子。这将InetAddress
转换为cidr值,它还验证InetAddress
表示有效的网络掩码。
测试输入是255.255.128.0
。输出cidr是17
。
package com.stackoverflow._19531411;
import java.net.InetAddress;
public class NetmaskToCIDR {
public static int convertNetmaskToCIDR(InetAddress netmask){
byte[] netmaskBytes = netmask.getAddress();
int cidr = 0;
boolean zero = false;
for(byte b : netmaskBytes){
int mask = 0x80;
for(int i = 0; i < 8; i++){
int result = b & mask;
if(result == 0){
zero = true;
}else if(zero){
throw new IllegalArgumentException("Invalid netmask.");
} else {
cidr++;
}
mask >>>= 1;
}
}
return cidr;
}
public static void main(String[] args) throws Exception {
InetAddress netmask = InetAddress.getByName("255.255.128.0");
System.out.println(convertNetmaskToCIDR(netmask));
}
}
您可以使用Apache SubnetUtils module中的toCidrNotation
函数来执行此操作。 Here's a Java example.
看一看Apache的净罐(类SubnetUtils)http://commons.apache.org/proper/commons-net/download_net.cgi
也是在这我在做,我们使用它也支持IPV6 http://www.postgresql.org/docs/8.1/static/functions-net.html
http://commons.apache.org/proper/commons-net/javadocs/api-3.3/index.html