我已经找了很多关于将CIDR表示法(72.20.10.0/24)的网络转换为IP地址范围的C#代码,但没有什么好结果。虽然在stackoverlow上有一些与CIDR有关的主题,但似乎没有任何C#代码并且涵盖我所需的内容。因此,我决定自己编写代码,并且在这个版本中不想让代码依赖于System.Net进行任何转换。
也许对某些人有帮助。
参考: 从网络位数转换到子网掩码的最佳方法是什么? http://www.laffeycomputer.com/whatmask.html的"Whatmask" C代码
用法:
代码假定所有内容都是32位。
也许对某些人有帮助。
参考: 从网络位数转换到子网掩码的最佳方法是什么? http://www.laffeycomputer.com/whatmask.html的"Whatmask" C代码
用法:
uint startIP, endIP;
Network2IpRange("72.20.10.0/24", out startIP, out endIP);
代码假定所有内容都是32位。
static void Network2IpRange(string sNetwork, out uint startIP, out uint endIP)
{
uint ip, /* ip address */
mask, /* subnet mask */
broadcast, /* Broadcast address */
network; /* Network address */
int bits;
string[] elements = sNetwork.Split(new Char[] { '/' });
ip = IP2Int(elements[0]);
bits = Convert.ToInt32(elements[1]);
mask = ~(0xffffffff >> bits);
network = ip & mask;
broadcast = network + ~mask;
usableIps = (bits >30)?0:(broadcast - network - 1);
if (usableIps <= 0)
{
startIP = endIP = 0;
}
else
{
startIP = network + 1;
endIP = broadcast - 1;
}
}
public static uint IP2Int(string IPNumber)
{
uint ip = 0;
string[] elements = IPNumber.Split(new Char[] { '.' });
if (elements.Length==4)
{
ip = Convert.ToUInt32(elements[0])<<24;
ip += Convert.ToUInt32(elements[1])<<16;
ip += Convert.ToUInt32(elements[2])<<8;
ip += Convert.ToUInt32(elements[3]);
}
return ip;
}
欢迎提交您的改进。
maskBits
为 32 时,mask = ~(0xFFFFFFFF >> maskBits)
不会产生正确的值 - 值将为 0x0 而不是 0xFFFFFFFF。 - Colin Breame~(0xFFFFFFFF >> 24)
返回的是0.255.255.255
而不是255.255.255.0
。对我有用的是:0xFFFFFFFF >> -24
。 - cogumel0