检查IP是否在Java中的子网范围内时出错

use*_*519 3 java ip networking

我使用以下代码来检查IP地址是否在给定的子网范围内.它适用于从0到31的网络前缀.但是当我将网络前缀值设置为32时,它给出较低的范围和较高的范围为0.0.0.0而不是10.198.23.4.我正在使用commons-net-3.3 jar.在上述方法中是否有任何错误,或者是有效检查Ip范围的其他可行方法.

public class TestIPRange {
public static void main(String[] args) {
  String ipRange = "10.198.23.4/32";
  String clientIp = "10.198.23.4";
  SubnetUtils utils = new SubnetUtils(ipRange);
  System.out.println("lower address: " + utils.getInfo().getLowAddress());
  System.out.println("higher address: " + utils.getInfo().getHighAddress());
  System.out.println(utils.getInfo().isInRange(clientIp));
}
}
Run Code Online (Sandbox Code Playgroud)

输出

低地址:0.0.0.0

更高地址:0.0.0.0

Cri*_*eco 11

检查的javadocSubnetInfo#getLowAddress():

将低地址作为虚线IP地址返回.如果包含标志为假,则CIDR/31和CIDR/32将为零.

我猜你true在检查地址之前应该把这个标志设置为:

SubnetUtils utils = new SubnetUtils(ipRange);
utils.setInclusiveHostCount(true);
Run Code Online (Sandbox Code Playgroud)