आप eExNetworkLibrary से eExNetworkLibrary.IP.IPAddressAnalysis क्लास का उपयोग कर सकते हैं।
निम्न कोड आईपीवी 4 और आईपीवी 6 (बस परीक्षण) के साथ काम करता है।
string strIn = "2001:DB8::/120";
//Split the string in parts for address and prefix
string strAddress = strIn.Substring(0, strIn.IndexOf('/'));
string strPrefix = strIn.Substring(strIn.IndexOf('/') + 1);
int iPrefix = Int32.Parse(strPrefix);
IPAddress ipAddress = IPAddress.Parse(strAddress);
//Convert the prefix length to a valid SubnetMask
int iMaskLength = 32;
if(ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
{
iMaskLength = 128;
}
BitArray btArray = new BitArray(iMaskLength);
for (int iC1 = 0; iC1 < iMaskLength; iC1++)
{
//Index calculation is a bit strange, since you have to make your mind about byte order.
int iIndex = (int)((iMaskLength - iC1 - 1)/8) * 8 + (iC1 % 8);
if (iC1 < (iMaskLength - iPrefix))
{
btArray.Set(iIndex, false);
}
else
{
btArray.Set(iIndex, true);
}
}
byte[] bMaskData = new byte[iMaskLength/8];
btArray.CopyTo(bMaskData, 0);
//Create subnetmask
Subnetmask smMask = new Subnetmask(bMaskData);
//Get the IP range
IPAddress ipaStart = IPAddressAnalysis.GetClasslessNetworkAddress(ipAddress, smMask);
IPAddress ipaEnd = IPAddressAnalysis.GetClasslessBroadcastAddress(ipAddress, smMask);
//Omit the following lines if your network range is large
IPAddress[] ipaRange = IPAddressAnalysis.GetIPRange(ipaStart, ipaEnd);
//Debug output
foreach (IPAddress ipa in ipaRange)
{
Console.WriteLine(ipa.ToString());
}
Console.ReadLine();
मैं पूरी तरह से यकीन है कि अगर मैं सबनेट मास्क सही युक्त एक बाइट सरणी के लिए उपसर्ग लंबाई से रूपांतरण किया है, लेकिन इस कोड को आप एक अच्छा प्रारंभिक बिंदु देना चाहिए नहीं कर रहा हूँ।
संपादित करें: कोड के बिट-झुकाव भाग को अपडेट किया गया। बदसूरत हो सकता है, लेकिन इस उदाहरण के लिए काम करता है। मुझे लगता है कि यदि आपको आवश्यकता हो तो बेहतर समाधान खोजने में सक्षम होंगे। उन बिट्स गर्दन में दर्द होता है।
ध्यान रखें कि आईपीवी 6 नेटवर्क रेंज उत्पन्न करना नेटवर्क बहुत बड़ा होने पर बहुत मेमोरी/सीपीयू थकाऊ कार्य हो सकता है।
आप शायद अपने कार्यक्षमता पर पुनर्विचार करने की जरूरत है। डिज़ाइन द्वारा, आईपीवी 6 पर आप देख सकेंगे लगभग कोई भी सबनेट/64, या (2^64) -1 मेजबान बड़ा होगा। – Joe
यह सही है, मुझे सभी 18,446,744,073,70 9,551,616 आईपी पते चाहिए;) – DaveUK
और आप उनके साथ क्या करेंगे? यहां तक कि 10 मिलियन एक सेकंड में, आपको उन सभी के माध्यम से जाने के लिए 58,000 साल की आवश्यकता होगी। – Joe