私のプログラムは、入力パラメータとして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
かどうかを確認する方法、つまりすべてをまとめる方法。これにより、最初と同じように、文字列の行として返すことができます。-10
1.1.1.10
validAddress
1.1.1.1-10
同じ質問がネットワークマスクにも当てはまります
/24
この種のプログラムにはどのような要素がありますか?概要を教えていただけますか?
私は次のことをやろうと思っていましたが、それが正しい方法であるかどうか、そしていくつかの部分を実装する方法がわかりません。
- 見つけたら、行末または「/」
-
の位置から始まる部分を切り取ります(どうすればいいですか?)-
ipRange
その部分を変数に保存します- 見つけたら、の位置から行末まで
/
その部分を切り取ります/
netMask
その部分を変数に保存します- コンテンツをにコピーします
tmp_ipRange = ipRange
- 変数
-
内のを削除しますtem_ipRange
tmp_ipRange
メインIPアドレスの最後のオクテットを(その方法は?)に置き換えます。- によって作成された配列に新しいIPアドレスを追加します
String.split()
(Javaで配列に何かを追加することはできないため、不可能ですか?どのような代替手段がありますか?したがって、ここで分割を使用することはできませんか?) - (上記のコードを参照)をループし
addressList
、IPアドレスが有効なIPアドレスであるかどうかを確認します - 検証後、そうでない場合は
ipRange
メインに追加します(メインが属するものを見つけるにはどうすればよいですか?)ipAddress
ipRange
null
ipAddress
ipRange
- 検証後、そうでない場合は
netMaske
メインipAddress
(および範囲)に追加します(メインが属するものを見つけるにはどうすればよいですか?)mainAddress
null
ipAddress
netMask