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

时间:2014-10-21 07:51:25

标签: java networking ip

我使用以下代码检查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));
}
}

输出

  

低地址:0.0.0.0

     

更高地址:0.0.0.0

     

1 个答案:

答案 0 :(得分:11)

检查SubnetInfo#getLowAddress()的{​​{3}}:

  

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

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

SubnetUtils utils = new SubnetUtils(ipRange);
utils.setInclusiveHostCount(true);