我使用以下代码检查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
假
答案 0 :(得分:11)
检查SubnetInfo#getLowAddress()
的{{3}}:
将低地址作为虚线IP地址返回。将为零 如果包含标志为假,则为CIDR / 31和CIDR / 32.
我猜你在检查地址之前应该把这个标志设置为true
:
SubnetUtils utils = new SubnetUtils(ipRange);
utils.setInclusiveHostCount(true);