2010-11-23 15 views
27

में किसी निर्दिष्ट सीमा में कोई आईपी पता है या नहीं, मैं दो अन्य आईपी की सीमा में आईपी के आधार पर सही/गलत लौटने में सक्षम होना चाहता हूं।गणना करें कि जावा

उदाहरण के लिए:

ip 192.200.3.0

range from 192.200.0.0

range to 192.255.0.0

सच करने के लिए होना चाहिए।

अन्य उदाहरण:

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

उत्तर

57

सीमा की जांच करने के लिए सबसे आसान तरीका है 32-बिट पूर्णांक के लिए आई पी पतों को परिवर्तित करने के लिए और फिर बस पूर्णांकों तुलना शायद है।

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

बजाय InetAddress.getByName(), तो आप जो एक InetAddresses सहायक वर्ग कि DNS खोज की संभावना से बचा जाता है है अमरूद पुस्तकालय को देखने के लिए चाहते हो सकता है।

+0

धन्यवाद, मैं इस –

+0

को आजमाउंगा यह बहुत अच्छा काम करता है। धन्यवाद! –

+0

वह बेहद सहायक था। धन्यवाद। – NitayArt

संबंधित मुद्दे