0

私は基本的に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;
                    }
                }


            }       
}

-17.151.126.28. ただし、17.24.84.0/24 などの CIDR 表記で IP アドレスを指定すると、次のエラーが発生します。

Exception in thread "main" java.lang.IllegalArgumentException: Could not parse [17.24.84.0/24]

これを解決する方法がわかりません。IpV4アドレスをサポートしていないため、サブネットに問題があることをどこかで読みました。私はネットワークの専門家ではないので、問題がサブネットにあるのか、それとも別のライブラリを使用すべきなのかわかりません。

4

2 に答える 2

1

の JavaDoc を読むisInRange(String address)

Parameters: address - A dot-delimited IPv4 address, e.g. "192.168.0.1"

17.24.84.0/24ドット区切りの IPv4 アドレスではないを渡しています。

ipAddress変数に CIDR 表記の が含まれていますString

于 2013-07-23T06:05:42.673 に答える
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);
}

2 番目の引数は CIDR IP 範囲のサブネット候補を受け取り、それが cidr の完全なサブネットである場合、メソッドは true を返します。「/0」cidr の最初の 2 つのチェックは、SubnetUtils がこれを有効と認識しないためです。

于 2014-01-16T21:43:00.217 に答える