一尘不染

给定IP地址和网络掩码时,如何计算IP范围?

c#

当IP范围写为aaa.bbb.ccc.ddd /
netmask(CIDR表示法)时,我需要使用C#计算此范围内的第一个和最后一个包含的IP地址。

例:

输入: 192.168.0.1/25

结果: 192.168.0.1-192.168.0.126


阅读 1820

收藏
2020-05-19

共1个答案

一尘不染

我的好朋友亚历山德罗(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
2020-05-19