我有大约20000个IP地址。我期待找到这些IP地址的网络块范围。目的是提供在防火墙中有漏洞的信息,以便允许这些地址。我可以查看a.b.c.d / x位格式。可能有几个范围。
更新:我的apache日志文件中已经有IP地址,而不是创建新的。
答案 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,否则无效。