【发布时间】:2016-04-26 09:34:57
【问题描述】:
我正在尝试构建一个函数,在给定 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、11111001、11111010等)
我的表达式应该匹配 192.z.y.x,其中 z 介于 248 和 255 之间,而 x 和 y 介于 0 和 255 之间。
我不确定我对 CIDR 的理解是否正确。您能帮我了解一下 IP 是如何映射到 CIDR 的吗?
谢谢!
【问题讨论】:
-
您似乎正确理解了 CIDR 和 VLSM。您的程序是否存在特定问题或错误?
-
我确定我没有正确理解它。我在这里描述的规则与许多在线 cidr 计算器给出的结果不同。此外,我仍在努力构建一个匹配给定 cidr 的所有 IP 的正则表达式。
标签: regex networking network-programming ip cidr