将 CIDR 地址转换为子网掩码和网络地址

2022-09-01 02:48:27

给定一个 CIDR 地址,例如192.168.10.0/24

  • 如何确定面罩长度?(24)
  • 如何确定掩码地址?(255.255.255.0)
  • 如何确定网络地址?(192.168.10.0)

答案 1

它被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);

答案 2

这就是你在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());