私のプログラムは、入力パラメータとしてIPアドレスのリストを含む文字列を取得します。各IPアドレスは改行で区切られます。これは次のようになります。
10.1.1.1 2.2.2.2 11.1.1.1
このように見えることがあります
10.1.1.1-20 1.1.1.1
しかし、それはこのように見えることができます
172.16.12.1-20 / 24 10.1.1.1
すべてのIPアドレスをチェックして、2つのリストvalidAddresses、invalidAddressesを返します。
私はすでに、最初の最も単純なタイプの入力、つまりIPアドレス範囲やネットワークマスクを処理しないプログラムを作成しました。
private String[] extractIPAddress(String address){
String[] temp;
temp = address.split("\\s+");
return temp;
}
それから私はします
addressList = extractIPAddress(String.valueOf(value));
for (int i=0; i < addressList.length; i++) {
if (InetAddresses.isInetAddress(addressList[i]) == true) {
validAddress = validAddress.concat(addressList[i] + '\n');
} else {
invalidAddress = invalidAddress.concat(addressList[i] + '\n');
}
}
今、私は最も複雑なタイプの入力、特にを処理する方法を考えています。
回線に範囲が接続されている場合、メインIPアドレスを確認するためにパーツ
1.1.1.1-10を削除する方法。範囲部分が有効なIPアドレスを作成する-10かどうかを確認する方法、つまりすべてをまとめる方法。これにより、最初と同じように、文字列の行として返すことができます。-101.1.1.10validAddress1.1.1.1-10同じ質問がネットワークマスクにも当てはまります
/24
この種のプログラムにはどのような要素がありますか?概要を教えていただけますか?
私は次のことをやろうと思っていましたが、それが正しい方法であるかどうか、そしていくつかの部分を実装する方法がわかりません。
- 見つけたら、行末または「/」
-の位置から始まる部分を切り取ります(どうすればいいですか?)- ipRangeその部分を変数に保存します- 見つけたら、の位置から行末まで
/その部分を切り取ります/ netMaskその部分を変数に保存します- コンテンツをにコピーします
tmp_ipRange = ipRange - 変数
-内のを削除しますtem_ipRange tmp_ipRangeメインIPアドレスの最後のオクテットを(その方法は?)に置き換えます。- によって作成された配列に新しいIPアドレスを追加します
String.split()(Javaで配列に何かを追加することはできないため、不可能ですか?どのような代替手段がありますか?したがって、ここで分割を使用することはできませんか?) - (上記のコードを参照)をループし
addressList、IPアドレスが有効なIPアドレスであるかどうかを確認します - 検証後、そうでない場合は
ipRangeメインに追加します(メインが属するものを見つけるにはどうすればよいですか?)ipAddressipRangenullipAddressipRange - 検証後、そうでない場合は
netMaskeメインipAddress(および範囲)に追加します(メインが属するものを見つけるにはどうすればよいですか?)mainAddressnullipAddressnetMask