当IP范围写为aaa.bbb.ccc.ddd / netmask(CIDR表示法)时,我需要使用C#计算此范围内的第一个和最后一个包含的IP地址。
例:
输入: 192.168.0.1/25
结果: 192.168.0.1-192.168.0.126
我的好朋友亚历山德罗(Alessandro)在C#中有一篇关于位运算符的不错的文章,您应该阅读它,以便知道该怎么做。
这很容易 。如果将提供给您的IP分解为二进制,则网络地址是所有主机位(子网掩码中的0)为0的ip地址,而最后一个地址(广播地址)为所有主机的位置位是1。
例如:
ip 192.168.33.72 mask 255.255.255.192 11111111.11111111.11111111.11000000 (subnet mask) 11000000.10101000.00100001.01001000 (ip address)
粗体部分为主机位(其余为网络位)。如果将IP上的所有主机位都设为0,则会获得第一个可能的IP:
11000000.10101000.00100001.01000000 (192.168.33.64)
如果将所有主机位都设为1,则将获得最后一个可能的IP(即广播地址):
11000000.10101000.00100001.01111111 (192.168.33.127)
因此,对于我的示例:
the network is "192.168.33.64/26": Network address: 192.168.33.64 First usable: 192.168.33.65 (you can use the network address, but generally this is considered bad practice) Last useable: 192.168.33.126 Broadcast address: 192.168.33.127