2009-08-17 26 views
0

私は約20000のIPアドレスを持っています。これらのIPアドレスのネットワークブロック範囲を見つけることを検討しています。その目的は、ファイアウォールに穴を開けるための情報を提供して、これらのアドレスを許可できるようにすることです。私はa.b.c.d/xビット形式で見ることができます。いくつかの範囲があります。IPアドレスのリストからIPアドレス範囲を見つける方法

アップデート:新しいものを作成するのではなく、すでにApacheのログファイルにIPアドレスがあります。

+0

IPアドレスはブロックに属しません。あなたがしようとしていることの例を挙げることができますか? – skaffman

+0

アップデートを見る:私は既存のIPアドレスの範囲を把握しようとしています。 – aartist

+0

はい、わかりましたが、IPアドレスからネットワークブロックを特定できないという事実は変わりません。 – skaffman

答えて

5

これはアドレスからは判別できません。サブネットマスクを知る必要があります。

0

あなたはCIDRについて話していると思います。 20000 < 2^15。したがって、無料のA.B.C.D/15ブロックが必要ですが、AFAIK/15ブロックは一般的ではなく、/ 16は受け入れられます。だからあなたはA.B.C.D/16が必要です。

+0

新しいIPアドレスを要求するのではなく、既存のIPアドレスの範囲をログファイルから把握しようとしています。 – aartist

+0

次に、IPアドレスを並べ替えることができます。また、両方の最大値を並べ替えることで、CIDRサブネットマスクの手がかりを得ることができます。 – dimba

+0

私は既存のIPアドレスを持っており、簡単に複数のサブネットを持つことができます。 – aartist

0

プログラム的に検索しますか?あなたの答えが「はい」の場合、私はそれをJavaで解決します。

public static void main(String[] args) { 

    String originalIP = "a.b.c.d/x"; 
    String[] ipParts = originalIP.split("[\\.\\/]"); 

    boolean ipWithinBounds = true; 

    for (int i = 0; i < ipParts.length; i++) { 
     ipWithinBounds &= withinBounds(Integer.parseInt(ipParts[0]), 
             lowerBound, upperBound); 
    } 
} 

public static boolean withinBounds(int check, int lowerBound, int upperBound) { 
    if(check >= lowerBound && check <= upperBound) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

あなたは本当のIPにoriginalIP変数を変更しない限り、これは動作しません。

+0

こんにちは、 アルゴリズムを説明する気になりますか? 私は再帰的な解決策を探しているかもしれません。 – aartist

+0

ご迷惑をおかけして申し訳ございません。あなたが望むのは、一連のIPがそれらのすべてを含む範囲を見つけるからです。 – Guilherme

関連する問題