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
检查的javadoc为SubnetInfo#getLowAddress()
:
将低地址作为虚线IP地址返回.如果包含标志为假,则CIDR/31和CIDR/32将为零.
我猜你true
在检查地址之前应该把这个标志设置为:
SubnetUtils utils = new SubnetUtils(ipRange);
utils.setInclusiveHostCount(true);
Run Code Online (Sandbox Code Playgroud)