跳至主要内容

cidrsubnets 函数

cidrsubnets 计算特定 CIDR 前缀内一系列连续的 IP 地址范围。

代码块
cidrsubnets(prefix, newbits...)

prefix 必须使用 CIDR 表示法给出,如 RFC 4632 第 3.1 节 中所定义。

上面指示为 newbits 的其余参数,每个参数都指定一个返回的地址范围的额外网络前缀位数。因此,返回值是一个列表,每个 newbits 参数对应一个元素,每个元素都是一个字符串,包含以 CIDR 表示法表示的地址范围。

有关 IP 地址概念的更多信息,请参阅相关函数 cidrsubnet 的文档。cidrsubnet 计算前缀内单个子网地址,同时允许您指定其子网编号,而 cidrsubnets 可以一次计算多个子网,这些子网的大小可能不同,并自动分配子网编号。

在使用此函数将地址空间划分为网络地址计划的一部分时,一旦将网络地址分配给实际基础设施,您绝不能更改任何现有参数,否则以后的地址分配将失效。但是,只要有足够的地址空间可用,您可以安全地将新参数附加到现有调用中。

此函数接受 IPv6 和 IPv4 前缀,结果始终使用与给定前缀相同的寻址方案。

示例

代码块
> cidrsubnets("10.1.0.0/16", 4, 4, 8, 4)
[
"10.1.0.0/20",
"10.1.16.0/20",
"10.1.32.0/24",
"10.1.48.0/20",
]

> cidrsubnets("fd00:fd12:3456:7890::/56", 16, 16, 16, 32)
[
"fd00:fd12:3456:7800::/72",
"fd00:fd12:3456:7800:100::/72",
"fd00:fd12:3456:7800:200::/72",
"fd00:fd12:3456:7800:300::/88",
]

您可以使用嵌套的 cidrsubnets 调用和 for 表达式 来简洁地分配网络地址块组

代码块
> [for cidr_block in cidrsubnets("10.0.0.0/8", 8, 8, 8, 8) : cidrsubnets(cidr_block, 4, 4)]
[
[
"10.0.0.0/20",
"10.0.16.0/20",
],
[
"10.1.0.0/20",
"10.1.16.0/20",
],
[
"10.2.0.0/20",
"10.2.16.0/20",
],
[
"10.3.0.0/20",
"10.3.16.0/20",
],
]
  • cidrhost 计算给定网络地址前缀内单个主机的 IP 地址。
  • cidrnetmask 将 CIDR 表示法中的 IPv4 网络前缀转换为网络掩码表示法。
  • cidrsubnet 计算单个子网地址,允许您指定其网络编号。