将 CIDR 地址转换为子网掩码和网络地址
2022-09-01 02:48:27
给定一个 CIDR 地址,例如192.168.10.0/24
- 如何确定面罩长度?(
24
) - 如何确定掩码地址?(
255.255.255.0
) - 如何确定网络地址?(
192.168.10.0
)
给定一个 CIDR 地址,例如192.168.10.0/24
24
)255.255.255.0
)192.168.10.0
)它被apache utils覆盖。
请参阅此网址:http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/util/SubnetUtils.html
String subnet = "192.168.0.3/31";
SubnetUtils utils = new SubnetUtils(subnet);
utils.getInfo().isInRange(address)
注意:要使用 /32 CIDR 子网,对于示例,需要添加以下声明:
utils.setInclusiveHostCount(true);
这就是你在Java中的做法,
String[] parts = addr.split("/");
String ip = parts[0];
int prefix;
if (parts.length < 2) {
prefix = 0;
} else {
prefix = Integer.parseInt(parts[1]);
}
int mask = 0xffffffff << (32 - prefix);
System.out.println("Prefix=" + prefix);
System.out.println("Address=" + ip);
int value = mask;
byte[] bytes = new byte[]{
(byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) };
InetAddress netAddr = InetAddress.getByAddress(bytes);
System.out.println("Mask=" + netAddr.getHostAddress());