2010-11-23 2 views

Répondre

57

La meilleure façon de vérifier la plage est probablement convertir les adresses IP en entiers de 32 bits, puis il suffit de comparer les nombres entiers.

public class Example { 
    public static long ipToLong(InetAddress ip) { 
     byte[] octets = ip.getAddress(); 
     long result = 0; 
     for (byte octet : octets) { 
      result <<= 8; 
      result |= octet & 0xff; 
     } 
     return result; 
    } 

    public static void main(String[] args) throws UnknownHostException { 
     long ipLo = ipToLong(InetAddress.getByName("192.200.0.0")); 
     long ipHi = ipToLong(InetAddress.getByName("192.255.0.0")); 
     long ipToTest = ipToLong(InetAddress.getByName("192.200.3.0")); 

     System.out.println(ipToTest >= ipLo && ipToTest <= ipHi); 
    } 
} 

Plutôt que InetAddress.getByName(), vous voudrez peut-être regarder la bibliothèque Goyave qui a une classe d'aide InetAddresses qui évite la possibilité de recherche DNS.

+0

Merci, je vais essayer ce –

+0

Cela a fonctionné très bien. Merci! –

+0

C'était extrêmement utile. Merci. – NitayArt

Questions connexes