我正在尝试构建一个函数,在给定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位),最后一个字节是:
11111110
或11111111
,所以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吗?
谢谢!
答案 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
我希望有所帮助。