了解IP,CIDR以及IP如何映射到CIDR

时间:2016-01-20 13:44:29

标签: regex networking network-programming ip cidr

我正在尝试构建一个函数,在给定CIDR的情况下,返回一个与映射到该CIDR的IP匹配的正则表达式。

例如:

def cidr_to_regex(cidr_input):
     return ip_matcher

cidr_to_regex('192.168.100.14/24')的结果应该是与该CIDR地址关联的IP匹配的正则表达式。

这是我理解CIDR映射的方式,但我不确定它是否正确。能帮我解决一下吗?

在示例中调用cidr_to_regex应返回与192.168.100.x匹配的正则表达式,其中x是0到255之间的数字。

这是因为/ 24表示24位为1,即地址的前3个字节为1,这意味着我们只关心剩余的字节。

如果我有cidr_to_regex('192.168.100.14/23'),前23位将为1,所以我不关心前2个字节(16位),最后一个字节是:

1111111011111111,所以224或225。

这意味着我应匹配192.168.y.x,其中y为224或225,x介于0和225之间。

如果我有cidr_to_regex('192.168.100.14/13') IP的前13位是1.这意味着我不关心第一个字节而第二个字节的前5位等于1,所以它是这样的:

第一位:11111111

第二位:11111xyz(所以它可以是11111000,111111001,111101010等)

我的表达式应匹配192.z.y.x,其中z介于248和255之间,而x和y介于0和255之间。

我不确定我对CIDR的理解是否正确。你能帮我理解IP如何映射到CIDR吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我回过头来看你的例子,我觉得你的计算有些偏差。

让我们打破每个例子。

使用192.168.100.14/24,它以二进制文件提供以下内容。

11000000.10101000.01100100.00001110 - IP address      192.168.100.14
11111111.11111111.11111111.00000000 - Subnet mask     255.255.255.0 or /24
11000000.10101000.01100100.00000000 - Network address 192.168.100.0
                       ^ - last common bit

此范围内的地址为192.168.100.0 - 192.168.100.255

使用192.168.100.14/23,它以二进制文件提供以下内容。

11000000.10101000.01100100.00001110 - IP address      192.168.100.14
11111111.11111111.11111110.00000000 - Subnet mask     255.255.254.0 or /23
11000000.10101000.01100100.00000000 - Network address 192.168.100.0
                       ^ - last common bit

因此,此范围内的地址为192.168.100.0 - 192.168.101.255

使用192.168.100.14/13,它以二进制文件提供以下内容。

11000000.10101000.01100100.00001110 - IP address      192.168.100.14
11111111.11111000.00000000.00000000 - Subnet mask     255.248.0.0 or /13
11000000.10101000.00000000.00000000 - Network address 192.168.0.0
             ^ - last common bit

因此,此范围内的地址为192.168.0.0 - 192.175.255.255

我希望有所帮助。