我正在尝试在 C#/.NET 2.0 中完成以下任务:
给定一个 IPAddress 对象(例如 192.168.127.100)和另一个包含 IPv4Mask / 子网掩码的 IPAddress 对象(例如 255.255.248.0),我应该能够计算 IP 地址范围的开始和结束。
(是的,我正在尝试通过子网上的一系列地址进行 for 循环。)
从理论上讲,我应该能够对 IPAddress 和 SubnetMask 进行按位与来获取 IPStart。然后我应该能够对 IPStart 和倒置的 (NOT'd) SubnetMask 执行按位异或,以获得 IPEnd。
IPAddress 对象提供将地址输出为“long”或“byte[]”(字节数组)的方法。
对 long 执行按位运算(因为它是有符号的?)会产生无效的结果。而且我似乎无法对 IPAddresses 作为字节数组执行按位运算。
EDIT-1:好的,遍历数组中的每个字节并执行按位与、非和异或(在每种情况下)都会得到正确的结果。
我遇到的下一个问题是,在将 byte[] 数组转换为 UInt32 或 long 后,我无法轻松执行 for 循环。所以,第一个值可以正常工作,但是将 uint/long 加一会使 IP 地址从 192.168.127.0 增加到 193.168.127.0 -- 似乎在 byte[] 数组转换为 uint/long 之后,字节被反转。所以没有简单的方法可以从 IPStart 递增到 IPEnd。
有什么建议吗?