有没有一种方法可以使用任何CIDR
/function/trick计算给定Sub net mask
的Java lib
?我一直在寻找,我能找到的只是从CIDR -> Netmask
而来,我需要用另一种方式来处理Netmask -> CIDR
...我对Java
不太方便,但我愿意读很多书=)thnx伙计们
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));
}
}
致谢psuedocode @ https://stackoverflow.com/a/10090956/260633
关于java - 根据给定的网络掩码计算CIDR-Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19531411/