2013-06-10 5 views
10

में कौन सा लाइब्रेरी उपयोग किया जा सकता है यह जांचने के लिए कि मैं एक आईपी पता किसी दिए गए सबनेट में है या नहीं? मुझे अपाचे कॉमन्स सबनेटयूल्ट्स (SubnetUtils.SubnetInfo.isInRange) जैसे पुस्तकालय मिल सकते हैं लेकिन कई अभी तक आईपीवी 6 का समर्थन नहीं करते हैं।जावा लाइब्रेरी यह जांचने के लिए कि आईपीवी 4 या आईपीवी 6 पता किसी दिए गए सबनेट

+1

कॉमन्स के लिए नेट सुविधा का अनुरोध इसके लिए वोट दें: https://issues.apache.org/jira/browse/NET-405 – Vadzim

उत्तर

8

edazdarevic's CIDRUtils आईपीवी 4 और आईपीवी 6 दोनों का समर्थन करता है। उदाहरण में बूलियन isInRange (स्ट्रिंग ipAddress) का उल्लेख नहीं है, लेकिन यह लागू किया गया है!

एक और विकल्प java-ipv6 है, लेकिन यह आईपीवी 4 और requires JDK7 का समर्थन नहीं करता है।

1

The IPAddress Java library एक पॉलीमोर्फिक तरीके से आईपीवी 4 और आईपीवी 6 दोनों का समर्थन करता है और सबनेट्स का समर्थन करता है, जिसमें एक सबनेट में किसी पते या सबनेट की रोकथाम की जांच की जाती है। जावाडोक लिंक पर उपलब्ध है।

यहां sample code है जो आपकी समस्या का समाधान करता है, जो आईपीवी 4 या आईपीवी 6 के साथ समान रूप से काम करता है।

1

वसंत के IpAddressMatcher का उपयोग करें। अपाचे कॉमन्स नेट के विपरीत, यह आईपीवी 4 और आईपीवी 6 दोनों का समर्थन करता है।

private void checkIpMatch() { 
    matches("192.168.2.1", "192.168.2.1"); // true 
    matches("192.168.2.1", "192.168.2.0/32"); // false 
    matches("192.168.2.5", "192.168.2.0/24"); // true 
    matches("92.168.2.1", "fe80:0:0:0:0:0:c0a8:1/120"); // false 
    matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/120"); // true 
    matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/128"); // false 
    matches("fe80:0:0:0:0:0:c0a8:11", "192.168.2.0/32"); // false 
} 

private boolean matches(String ip, String subnet) { 
    IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(subnet); 
    return ipAddressMatcher.matches(ip); 
} 

सुझाव: भले ही आप वसंत का उपयोग नहीं कर रहे हैं और आप एक त्वरित हल्के समाधान की जरूरत है, तो आप अभी भी source code बहुत कम संशोधनों (इंटरफेस को हटाने) के साथ इस वर्ग का उपयोग कर सकते हैं। (हालांकि इस दृष्टिकोण गंभीर परियोजनाओं के लिए अनुशंसित नहीं है और/या आप का उल्लंघन कर रहे हैं यदि उनके license!)

1

commons-ip-math दोनों IPv4 और IPv6 पतों के लिए सहायता प्रदान करता है। यहाँ आप कैसे जांच कर सकते हैं एक आईपी पता किसी सबनेट में है अगर है:

Ipv4Range.parse("192.168.0.0/24").contains(Ipv4.parse("10.0.0.1")) 
// false 

Ipv6Range.parse("2001:db8::/32").contains(Ipv6.parse("2001:db8::4")) 
// true 

(त्याग, मैं कॉमन्स-आईपी-गणित की देखरेख में से एक हूँ)

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