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

Dmi*_*try 34 java ip networking mask cidr

给定CIDR地址,例如 192.168.10.0/24

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

小智 60

它由apache utils覆盖.

请参阅此URL: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)
Run Code Online (Sandbox Code Playgroud)

注意:对于使用w// 32 CIDR子网,例如,需要添加以下声明:

utils.setInclusiveHostCount(true);
Run Code Online (Sandbox Code Playgroud)

  • 似乎该实用程序只有一个地址通知有问题.我的意思是; 让我们说ip只是一个ip.所以如果我想像ip/32那样使用它而不是失败.或者我以错误的方式使用它. (2认同)

ZZ *_*der 27

这就是你在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());
Run Code Online (Sandbox Code Playgroud)

  • /***javascript中的近似值.因为我自己需要这个,我也可以分享***/function cidrToMask(cidrStr){var parts = cidrStr.split('/'); var ipStr = parts [0]; var prefix =(parts.length <1)?0:数字(部分[1]); var mask = 0xffffffff <<(32 - prefix); var maskStr = [(mask >>> 24),(mask >> 16&0xff),(mask >> 8&0xff),(mask&0xff)].join('.');; alert("Prefix ="+ prefix +"\n"+"Address ="+ ipStr +"\n"+"Mask ="+ maskStr); }; cidrToMask('192.168.10.0/24'); (2认同)

And*_*dis 7

根据Yuriy的回答:为了获得所有ip地址,Apache Java类SubnetUtils提供了以下方法:

String[] addresses = utils.getInfo().getAllAddresses();
Run Code Online (Sandbox Code Playgroud)

要下载包含该类的jar,请访问:http: //repo1.maven.org/maven2/commons-net/commons-net/3.0.1/commons-net-3.0.1.jar

源代码: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/SubnetUtils.java?view=markup

Maven id:

<groupId>commons-net<groupId>
<artifactId>commons-net<artifactId>
<version>3.0.1<version>


Sea*_*n F 7

IPAddress Java库以多态方式支持IPv4和IPv6,包括子网.链接中提供了javadoc.免责声明:我是项目经理.

您列出的所有用例都透明地支持IPv4和Ipv6.

    String str = "192.168.10.0/24";
    IPAddressString addrString = new IPAddressString(str);
    try {
         IPAddress addr = addrString.toAddress();
         Integer prefix = addr.getNetworkPrefixLength(); //24
         IPAddress mask = addr.getNetwork().getNetworkMask(prefix, false);//255.255.255.0
         IPAddress networkAddr = addr.mask(mask);  //192.168.10.0
         IPAddress networkAddrOtherWay = addr.getLower().removePrefixLength(); //192.168.10.0

         ...
    } catch(AddressStringException e) {
        //e.getMessage provides validation issue
    }
Run Code Online (Sandbox Code Playgroud)


Tra*_*roy 5

Linux命令行ipcalc。您可以快速使用:

$ipcalc 192.168.10.0/24
Address:   192.168.10.0         11000000.10101000.00001010. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.10.0/24      11000000.10101000.00001010. 00000000
HostMin:   192.168.10.1         11000000.10101000.00001010. 00000001
HostMax:   192.168.10.254       11000000.10101000.00001010. 11111110
Broadcast: 192.168.10.255       11000000.10101000.00001010. 11111111
Hosts/Net: 254                   Class C, Private Internet
Run Code Online (Sandbox Code Playgroud)