C#/.NET 2.0 で次のことを達成しようとしています。
IPAddress オブジェクト (たとえば、192.168.127.100) と、IPv4Mask/サブネット マスク (たとえば、255.255.248.0) を含む別の IPAddress オブジェクトが与えられた場合、IP アドレス範囲の開始と終了を計算できるはずです。
(はい、サブネット上のアドレスの範囲を介して for ループを実行しようとしています。)
理論的には、IPAddress と SubnetMask のビットごとの AND を実行して、IPStart を取得できるはずです。次に、IPStart と反転された (NOT'd) SubnetMask でビットごとの XOR を実行して、IPEnd を取得できるはずです。
IPAddress オブジェクトは、アドレスを「long」または「byte[]」(バイト配列) として出力するメソッドを提供します。
long に対してビット演算を実行すると (署名されているため?)、無効な結果が生成されます。また、バイト配列として IPAddresses に対してビット単位の操作を実行できないようです。
EDIT-1: わかりました、配列内の各バイトをループし、ビット単位の AND、NOT、および XOR を (それぞれの状況で) 実行すると、正しい結果が得られます。
私が直面している次の問題は、byte[] 配列を UInt32 または long に変換した後、for ループを簡単に実行できないことです。したがって、最初の値は適切に機能しますが、uint/long を 1 ずつ増やすと、IP アドレスが 192.168.127.0 から 193.168.127.0 に増加します。byte[] 配列が uint/long に変換された後、バイトが反転します。そのため、IPStart から IPEnd にインクリメントする簡単な方法はありません。
何か提案はありますか?