2010-11-23 12 views
27

'da belirtilen bir aralıkta olup olmadığını hesaplayın İki IP'nin menzilinde bulunan bir IP'ye bağlı olarak true/false değerini döndürmek istiyorum. ÖrneğinBir IP adresinin Java

:

ip 192.200.3.0

range from 192.200.0.0

range to 192.255.0.0

true yol açmalıdır.

Diğer örnekler:

assert 192.200.1.0 == true 
assert 192.199.1.1 == false 
assert 197.200.1.0 == false 

cevap

57

aralığını kontrol etmenin en kolay yolu, 32 bit tamsayı IP adreslerini dönüştürmek ve sonra sadece tamsayılar karşılaştırmak olasılıkla gerçek değildir.

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

yerine InetAddress.getByName()

, DNS aramalarının olasılığını önleyen bir InetAddresses yardımcı sınıf vardır Guava kütüphaneye bakmak isteyebilirsiniz.

+0

Teşekkürler, ben bu –

+0

çalışacağım Bu harika çalıştı. Teşekkürler! –

+0

Bu çok yardımcı oldu. Teşekkürler. – NitayArt