我有以下代码,基本上是基于ipaddress打印的东西。
private static void getInfo(String ipAddress) {
for (String cidr : myNetworkList) {
if (InetAddressValidator.getInstance().isValid(ipAddress)) {
if (cidr.equals(ipAddress)) {
//Do something
break;
}
}
else {
SubnetUtils subnetUtils = new SubnetUtils(cidr);
if (subnetUtils.getInfo().isInRange(ipAddress)) {
//Do something else
break;
}
}
}
}
当我提供有效的IP地址作为参数时,该方法可以正常工作,如-17.151.126.28。但是,如果我以CIDR表示法给出IP地址,例如-17.24.84.0/24,我得到以下错误 -
Exception in thread "main" java.lang.IllegalArgumentException: Could not parse [17.24.84.0/24]
我不知道如何解决这个问题。我在某处读到了Subnet的问题,因为它不支持IpV4地址。我不是网络专家,所以我不知道问题是关于子网,还是我应该使用备用库?
答案 0 :(得分:1)
Parameters: address - A dot-delimited IPv4 address, e.g. "192.168.0.1"
您正在传递17.24.84.0/24
,这不是以点分隔的IPv4地址。
您的ipAddress
变量包含CIDR表示法中的String
。
答案 1 :(得分:0)
以下是如何做到的。
public boolean testCIDRSubnet(String cidr, String cidrSubnetCandidate) {
if ("0".equals(cidr.substring(cidr.indexOf("/")+1))) return true;
if ("0".equals(cidrSubnetCandidate.substring(cidrSubnetCandidate.indexOf("/")+1))) return false;
SubnetUtils utils = new SubnetUtils(cidrSubnetCandidate);
String lowIp = utils.getInfo().getLowAddress();
String highIp = utils.getInfo().getHighAddress();
utils = new SubnetUtils(cidr);
return utils.getInfo().isInRange(lowIp) && utils.getInfo().isInRange(highIp);
}
第二个参数接收CIDR IP范围子网候选,如果它是cidr的完整子网,则该方法返回true。对“/ 0”cidrs的前两次检查是因为SubnetUtils无法将其识别为有效。