3

特定のアドレスが有効なネットマスクであるかどうかを判断するためのJava6での最も簡単な方法は何ですか?基本的に、比較に使用する有効なIPの配列を作成する1つのソリューションを見つけました(つまり、「255.255.255.255」、「255.255.255.254」、「255.255.255.252」など)。より簡単な方法はありますか、それともこれが最善の方法ですか?

4

4 に答える 4

4

この擬似コードはどうですか?

function IS_VALID(MASK)
  boolean zeroStart = false
  for each byte in MASK
    for each bit
      if bit = 1 and zeroStart = false
        continue
      if bit = 1 and zeroStart = true
        return INVALID_MASK
      if bit = 0 and zeroStart = false
        zeroStart = true
      if bit = 0 and zeroStart = true
        continue
  return VALID_MASK
于 2012-04-10T14:47:07.453 に答える
4

外部の依存関係を含めてもかまわない場合は、Apacheのcommons.netに探しているものが含まれている可能性があります。

SubnetUtilsとそのSubnetInfoネストされたクラスを見てください。SubnetUtilsIPアドレスとマスクを使用してを作成できます。マスクが無効な場合、コンストラクターは例外をスローし、SubnetInfo.html isInRangeはIPがマスクの範囲内にあるかどうかを通知します。

于 2012-04-10T14:50:33.527 に答える
1

Serg10の答えは最も簡単だと思います。

外部の依存関係を回避する必要がある場合は、Inet4Addressを使用してIPアドレス文字列をバイトの配列に変換してから、バイトを分析する必要があります。正規表現を使用して、または文字列の固定セットと比較して文字列を分析しようとすると、間違った答えが返される可能性があります。

  • IPアドレスのコンポーネントには、先行ゼロを含めることができます。
  • IPアドレスは、3つ、2つ、または1つのコンポーネントで書き込むこともできます。

IPアドレス文字列がどのように見えるかの説明については、 Inet4Addressjavadocを参照してください。

于 2012-04-10T15:27:12.580 に答える
0

正規表現を使ってみることができます

Pattern p = Pattern.compile("^((2[0-5][0-5]|1[\\d][\\d]|[\\d][\\d]|[\\d])\\.){3}(2[0-5][0-5]|1[\\d][\\d]|[\\d][\\d]|[\\d])$");
String ip = "255.255.255.0.2";
Matcher m = p.matcher(ip);
if(m.matches()) {
    //valid
}
于 2012-04-10T14:57:08.497 に答える