2012-08-16 226 views
0

我需要检查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是否在上述范围内?

+0

是不同的存储范围在数据库中的选项?如果您将它们字面地存储为字符串10-20.3.5.6,您将无法利用数据库进行检查。 – nos 2012-08-16 15:24:35

+0

@nos你可以构建一个视图。不理想,但理论上可行。 – biziclop 2012-08-16 15:33:35

+0

这看起来不像是一个能够充分利用视图的东西......一个类 - 也许,但对于它来说,一个全新的视图/小部件似乎......是一种浪费。 – Shark 2012-08-16 15:39:54

回答

0

让我们尝试这样的事情......

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.