【问题标题】:Understanding IPs, CIDR and how IPs map to CIDRs了解 IP、CIDR 以及 IP 如何映射到 CIDR
【发布时间】: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 位),最后一个字节为:

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、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


【解决方案1】:

我回顾了您的示例,我认为您的计算略有偏差。

让我们分解每个示例。

使用 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

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-01-07
    • 2012-11-04
    • 2011-10-12
    相关资源
    最近更新 更多