使用现有IP地址范围验证IP地址
问题描述:
我需要检查IP地址是否驻留在IP范围内。使用现有IP地址范围验证IP地址
例如10-20.3.5.6包含IP作为
10.3.5.6 11.3.5.6 。 。 。 20.3.5.6
我需要知道以下几点:
1)1-10.0-255.0.0-255是IP范围我在DB。我需要检查IP“10.0.7.8”是否落在上述指定范围内。
2)考虑另一种情况是10-20.10-20.10-20.10-20我在DB中有。我需要检查10-20.10.10-30.10-50范围内的任何IP是否在上述范围内?
答
让我们尝试这样的事情......
ArrayList<String> IPlist = getIPTable(); //IPTable has entries
Pair IPranges[4] = new Pair[4]();
//Pair isa class that holds two things, like numbers;
//parse your DB entries into the IPranges
IPranges[0].low = 10; IPranges[0].hi = 20;
IPranges[1].low = 3; IPranges[1].hi = 3;
IPranges[2].low = 5; IPranges[2].hi = 5;
IPranges[3].low = 6; IPranges[3].hi = 6;
for(String IP : IPlist)
{
String octet[4]; //read the octets in the String[] octet using substring();
boolean continue = true;
for(int i = 0 ; i < 4 && continue; i++)
if(Integer.parseInt(octet[i]) >= IPtable[i].low && Integer.parseInt(octet[i]) <= IPtable[i].hi)
{
//this is good, do stuff here
}
else
continue = false; //the IP failed to pass the filter, no need to process the rest of it
//safely add the IP to the lsit of valid IPs.
validIP.add(IP);
}
private class Pair
{
public int low, hi;
public Pair(int low, int hi)
{
this.low = low; this.hi = hi;
}
} //feel free to extend this class to do the checking for you.
是不同的存储范围在数据库中的选项?如果您将它们字面地存储为字符串10-20.3.5.6,您将无法利用数据库进行检查。 – nos 2012-08-16 15:24:35
@nos你可以构建一个视图。不理想,但理论上可行。 – biziclop 2012-08-16 15:33:35
这看起来不像是一个能够充分利用视图的东西......一个类 - 也许,但对于它来说,一个全新的视图/小部件似乎......是一种浪费。 – Shark 2012-08-16 15:39:54