2016-07-21 64 views
1

我正在使用IPNetwork C#庫來查找第一個和最後一個可用的IP地址。 我想要實現的是在列表中打印或存儲第一個和最後一個可用IP之間的所有IP地址範圍。我正在使用以下來查找第一個和最後一個可用的IP。找到第一個IP和最後一個IP之間的所有IP

IPNetwork ipnetwork = IPNetwork.Parse("192.168.1.1/24"); 
    string first = ipnetwork.FirstUsable.ToString(); 
    string last = ipnetwork.LastUsable.ToString(); 

如果我通過網絡掩碼大於或等於24這是很簡單的打印所有的範圍內,因爲在最大/ 24,我們有256個IP地址,254可用於主機和一個簡單的循環將產生所有的範圍,因爲只有第四個八位組將被改變。但是,如果我傳遞一個小於\ 24 example \ 23的網絡掩碼,那麼第三個八位字節需要更改,並且一個簡單的循環將不會執行此任務,並且需要找到另一個解決方案。 此外,傳遞給IPNetwork.Parse的參數可能不是必需的192.168.1.1或10.0.2.1,但分別是192.168.1.130或10.0.2.200,這也是需要考慮的。

+0

這是否有幫助:http://stackoverflow.com/questions/1470792/how-to-calculate-the-ip-range-when-the-ip-address-and-the-netmask-is-given and this http://stackoverflow.com/questions/14327022/calculate-ip-range-by-subnet-mask? –

+0

你寫了IPNetwork.Parse()嗎?還是它是一個預先存在的庫? – Wamadahama

+0

這是一個現有的圖書館。 – user2307236

回答

1

例8:

IPNetwork net = IPNetwork.Parse("192.168.0.1/23"); 
IPNetwork ips= IPNetwork.Subnet(net , 32); 

Console.WriteLine("{0} was subnetted into /{1} ips", net ,  ips.Count); 
Console.WriteLine("First: {0}", subneted[0]); 
Console.WriteLine("Last : {0}", subneted[subneted.Count - 1]); 
Console.WriteLine("All :"); 

foreach (IPNetwork ipnetwork in ips) 
{ 
    Console.WriteLine("{0}", ipnetwork); 
} 

輸出

192.168.0.1/23 was subnetted into /32 subnets 
First: 192.168.0.0/32 
Last : 192.168.1.254/32 
All : 
192.168.0.0 
192.168.0.1 
... 
192.168.1.254 

玩得開心!