如何从IP地址列表中查找IP地址范围

时间:2009-08-17 20:59:06

标签: networking

我有大约20000个IP地址。我期待找到这些IP地址的网络块范围。目的是提供在防火墙中有漏洞的信息,以便允许这些地址。我可以查看a.b.c.d / x位格式。可能有几个范围。

更新:我的apache日志文件中已经有IP地址,而不是创建新的。

3 个答案:

答案 0 :(得分:5)

您无法从地址中确定此信息。您需要知道子网掩码。

答案 1 :(得分:0)

我相信你在谈论CIDR。 20000< 2 ^ 15。所以你需要一个免费的A.B.C.D / 15区块,但是AFAIK / 15区块并不常见,而/ 16则被接受。所以你需要A.B.C.D / 16。

答案 2 :(得分: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;
    }
}

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

除非您将originalIP变量更改为真实IP,否则无效。