2016-07-21 2 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が生成されます。 4番目のオクテットだけが変更されるため、すべての範囲に適用されます。しかし、\ 24 example \ 23より小さいネットマスクを渡すと、3番目のオクテットも同様に変更する必要があり、単純なループはジョブを実行せず、別の解決策を見つける必要があります。 また、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 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 

お楽しみに!

関連する問題