2011-09-05 13 views
6

प्रारंभ और अंत आईपी पते से आईपी पते की एक श्रृंखला कैसे उत्पन्न कर सकते हैं? "192.168.0.0/24" एक नेटवर्क के लिएमैं प्रारंभ और अंत आईपी पता दिए गए आईपी एड्रेस रेंज कैसे उत्पन्न करूं?

उदाहरण:

192.168.0.2 
192.168.0.3 
192.168.0.4 
192.168.0.5 
... 
192.168.0.254 

पुनश्च:: नेटवर्क, प्रारंभ और अंतिम आईपी ऊपर गतिशील हो सकता है सिर्फ एक है

String start = "192.168.0.2" 
String end = "192.168.0.254" 

मैं करना चाहते हैं उदाहरण।

धन्यवाद ...

+2

आपको ऐसा करने के लिए सबनेट को जानना होगा। –

+0

@ ओएमजी टट्टू: मैंने अभी जानकारी जोड़ दी है। – Vishal

+0

आप परिणामस्वरूप पतों को कैसे चाहते हैं? क्या आप उन्हें प्रिंट करना चाहते हैं, या आप उन्हें किसी प्रकार की डेटा संरचना में स्टोर करना चाहते हैं? – jswolf19

उत्तर

10

पहचानो कि एक IPv4 एड्रेस के 4 घटकों के बारे में वास्तव में 00 और एफएफ के बीच एक हेक्स संख्या है।

यदि आप अपनी शुरुआत और अंत आईपी पते 32 बिट हस्ताक्षरित पूर्णांक में बदलते हैं, तो आप केवल निम्नतम से सबसे ऊपर तक लूप कर सकते हैं और प्रत्येक मान को आपके द्वारा लूप को आईपी एड्रेस प्रारूप में परिवर्तित कर सकते हैं।

आपके द्वारा दिए गए उदाहरण में श्रेणी C0A80002 C0A800FE है।

यहाँ, 254 के लिए गिनती, और एक डाल कोड का कोई लिंक है कि एक हेक्स संख्या और एक IPv4 एड्रेस

http://technojeeves.com/joomla/index.php/free/58-convert-ip-address-to-number

+0

हाँ, यह बेहतर है :) आईपीवी 6 पर विचार करना याद रखें। –

+0

@Ryan: हाँ, यही कारण है कि मैं अपने उत्तर में v4 के बारे में स्पष्ट हूं :-) आईपीवी 6 128 बिट्स है, यहां विवरण http://en.wikipedia.org/wiki/IPv6#Larger_address_space –

2

2 पर प्रारंभ के बीच धर्मान्तरित है "192.168.0।" इसे के सामने:

for (int i = 2; i <= 254; i++) { 
    System.out.println("192.168.0." + i); 
} 
+1

यह बहुत सामान्य नहीं है। ओपी निर्दिष्ट नहीं करता है कि केवल निचले घटक को बढ़ाने की आवश्यकता होगी, या तो ... – jswolf19

+0

@Ryan: अपने विशिष्ट उदाहरण के लिए काम करता है, लेकिन क्या होगा यदि सीमा 1 बाइट से अधिक हो? –

+0

@ jswolf19: असल में ओपी ने इस सवाल को संशोधित करने के लिए संशोधित किया कि वास्तव में केवल निम्न बाइट की आवश्यकता बढ़ाई जा सकती है :-), लेकिन मैं मानता हूं कि यह उत्तर बहुत सामान्य नहीं है। –

3

यहाँ आउटपुट है कि आप के लिए क्या पूछा सरल कार्यान्वयन है:

public static void main(String args[]) { 
    String start = "192.168.0.2"; 
    String end = "192.168.0.254"; 

    String[] startParts = start.split("(?<=\\.)(?!.*\\.)"); 
    String[] endParts = end.split("(?<=\\.)(?!.*\\.)"); 

    int first = Integer.parseInt(startParts[1]); 
    int last = Integer.parseInt(endParts[1]); 

    for (int i = first; i <= last; i++) { 
     System.out.println(startParts[0] + i); 
    } 
} 

नोट इस केवलपिछले आंशिक IP पते को शामिल पर्वतमाला के लिए काम करते हैं।

+0

क्या आप रेगेक्स '" (? <= \\।) (?!। * \\।) "'? – Labeo

+2

@Labeo '" (? <= \\।) "'एक पीछे की ओर है जो पिछले इनपुट char को एक बिंदु है। '" (?!। * \\।) "'एक नकारात्मक रूप है जो आगे बताता है कि निम्नलिखित इनपुट किसी भी संख्या के अक्षरों से मेल नहीं खाता है। '" (? <= \\।) (?!। * \\।) "'सभी एक साथ का मतलब है" एक बिंदु के बाद (अक्षर के बीच) मैच के बाद मैच करें जब शेष इनपुट * नहीं * एक डॉट होता है ", जो सामान्य भाषण में" अंतिम बिंदु के ठीक बाद "होता है। – Bohemian

1
void main(String args[]) 
{ 
String start = "192.168.0.2"; 
String end = "192.168.0.254"; 

String[] startParts = start.split("(?<=\\.)(?!.*\\.)"); 
String[] endParts = end.split("(?<=\\.)(?!.*\\.)"); 

int first = Integer.parseInt(startParts[1]); 
int last = Integer.parseInt(endParts[1]); 

for (int i = first; i <= last; i++) 
{ 
System.out.println(startParts[0] + i); 
} 
} 
संबंधित मुद्दे