2009-08-17 201 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