2009-08-17 231 views
0

我有大約20000個IP地址。我正在尋找這些IP地址的網絡塊範圍。目的是提供信息在防火牆上留下空間,以便允許這些地址。我可以查看a.b.c.d/x位格式。可能有幾個範圍。如何從IP地址列表中查找IP地址範圍

更新:我的IP地址已經在我的apache日誌文件中,而不是創建新的。

+0

IP地址不屬於塊。你能舉一個你想要做什麼的例子嗎? – skaffman 2009-08-17 21:06:57

+0

請參閱更新:我試圖找出現有IP地址的範圍。 – aartist 2009-08-17 21:35:56

+0

是的,我們意識到這一點,但這並不會改變您無法從IP地址確定網絡塊的事實。 – skaffman 2009-08-18 21:19:14

回答

5

您無法從地址中確定此項。你需要知道子網掩碼。

0

我相信你在談論CIDR。 20000 < 2^15。所以你需要一個免費的A.B.C.D/15塊,但是AFAIK/15塊不常見,而/ 16被接受。所以你需要A.B.C.D/16。

+0

我想從我的日誌文件中找出現有IP地址的範圍,而不是請求新的IP地址。 – aartist 2009-08-17 21:36:38

+0

然後您可以對IP地址進行排序,並且最大的和最小的一個將爲您提供CIDR子網掩碼的線索。 – dimba 2009-08-17 21:52:00

+0

我有現有的IP地址,我可以輕鬆地有多個子網。 – aartist 2009-08-18 01:44:43

0

你想以編程方式找到它們嗎?如果你的答案是肯定的,我會用Java解決它。除非你改變originalIP變量爲真正的IP

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; 
    } 
} 

這是行不通的。

+0

嗨, 你可以照顧解釋算法嗎? 我可能正在尋找遞歸解決方案。 – aartist 2009-08-17 21:30:32

+0

對不起,我誤解了你的問題。你想,給定一組IP地址找到包含它們的範圍? – Guilherme 2009-08-18 16:26:31