CIDR 与 IP 子网计算器
计算 IPv4 和 IPv6 网络的范围、掩码和大小,拆分为子网,并检查谁包含或与谁重叠。
代码示例
可直接复制到你自己的项目中。每个示例只使用该语言的标准库,因此无需安装任何东西。
const cidr = '192.168.1.0/24'
const ip = '192.168.1.42'
const toNumber = (address) => address.split('.').reduce((total, octet) => total * 256 + Number(octet), 0)
const [network, prefix] = cidr.split('/')
const size = 2 ** (32 - Number(prefix))
const contains = Math.floor(toNumber(ip) / size) === Math.floor(toNumber(network) / size)
console.log(contains)它能做什么
计算 IPv4 和 IPv6 网络的范围、子网掩码、反掩码和大小,把网络拆分为子网,并检查谁包含谁、谁与谁重叠。所有运算都是精确的,所以 IPv6 也能用。
如何使用
- 每行输入或粘贴一个网络,例如
192.168.1.0/24或2001:db8::/32。单独的地址视为一台主机,也可以使用 IPv4 子网掩码,例如/255.255.255.0。 - 选择模式:详情显示每个网络的范围和大小,拆分按你选择的前缀把它切成子网,包含检查地址是否在每个网络内,重叠找出相互嵌套的网络。
- 在输出下方查看第一个网络的详细信息:掩码、反掩码、可用主机数,以及这是哪一类地址。
示例
192.168.1.77/24 → 192.168.1.0/24 · 192.168.1.0–192.168.1.255 · 256
把 10.0.0.0/24 拆分为 /26:
10.0.0.0/26
10.0.0.64/26
10.0.0.128/26
10.0.0.192/26
须知
- 一个 /24 包含 256 个地址,前缀每少一位,数量翻倍。
- 在 IPv4 中,第一个和最后一个地址分别是网络地址和广播地址,所以 /24 有 254 个可用主机。/31(RFC 3021)和 /32 会用到每个地址。
- /64 是单个 IPv6 网络的常见大小。
- 拆分时最多列出 1024 个子网。
什么是 CIDR 表示法?
CIDR 把网络写成“地址/前缀长度”,例如 192.168.1.0/24:前 24 位表示网络,其余用于主机。/24 有 256 个地址,每少一位就翻一倍。IPv6 的做法相同,共 128 位,/64 是一个网络的常见大小。
常见问题
为什么 IPv4 子网里有两个地址不能用?
第一个地址代表网络本身,最后一个是广播地址,所以 /24 有 254 个可用主机。/31 点对点网络(RFC 3021)和 /32 单主机会用到所有地址。
“拆分”做什么?
把一个网络切成大小相等的更小网络:把 10.0.0.0/24 拆分为 /26,得到 4 个各含 64 个地址的子网。最多列出 1024 个子网。
这个工具会把我的网络发送到别处吗?
不会。所有计算都在你的浏览器中用精确的整数运算完成,因此也支持 IPv6。你输入的内容不会发送到我们的服务器。