我正在尝试构建一个函数,该函数在给定CIDR的情况下,返回与映射到该CIDR的IP相匹配的正则表达式。
例如:
def cidr_to_regex(cidr_input):
return ip_matchercidr_to_regex('192.168.100.14/24')的结果应该是与该CIDR地址相关联的IP相匹配的正则表达式。
这就是我对CIDR映射的理解,但我不确定它是否正确。你能帮我弄清楚吗?
调用示例中的cidr_to_regex应该返回一个与192.168.100.x匹配的正则表达式,其中x是一个介于0和255之间的数字。
这是因为/24表示1的24位,即地址的前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、11111001、11111010等)
我的表达式应该匹配192.z.y.x,其中z在248到255之间,而x和y在0到255之间。
我不确定我对CIDR的理解是正确的。您能告诉我IP是如何映射到CIDR的吗?
谢谢!
发布于 2016-01-21 06:32:46
我重新看过你的例子,我认为你的计算有一点偏差。
让我们把每个例子都分解一下。
使用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
我希望这能有所帮助。
https://stackoverflow.com/questions/34901743
复制相似问题