IPv4 地址段展开器

将 IPv4 地址段或 CIDR 展开为完整地址列表,并实时计数。适用于防火墙规则与资产清单。

把范围变成清单。 给出起止范围(192.168.1.1-192.168.1.20)或 CIDR(10.0.0.0/28),即可得到其中每个地址及计数。超大范围会为避免浏览器卡顿而截断。本地计算。

超过 10,000 个地址时仅显示前 10,000 个并附计数。

把地址段展开成列表

描述同一段地址的两种方式

CIDR 块和起止地址对都能描述一段连续地址,但表达能力并不相同。CIDR 只能表示大小为 2 的幂、且基地址按该大小对齐的块——10.0.0.0/30 合法,而 10.0.0.1/3010.0.0.0/30 表示的是同一个块,因为低位会被掩码抹掉。像 192.168.0.254-192.168.1.2 这样的任意区间根本无法写成单个 CIDR,需要三个才能覆盖。

本工具两种形式都接受,并把它们展开成显式列表。这在列表的消费方不认识 CIDR 时特别有用:老式设备的白名单、表格列、shell 循环,以及快速确认某个区间是否真的覆盖了你以为的范围。

边界情况为什么关键

自己手写展开器最常见的 bug,是把地址当成四个独立的数字、只对最后一段做自增。这在区间不跨段时能用,一旦跨段,192.168.0.255 的下一个就会变成 192.168.0.256 而不是 192.168.1.0。转成 32 位整数、自增、再转回来,进位自然就正确了,这是唯一值得采用的做法。

另一个陷阱是符号位。在按位运算结果为有符号 32 位整数的语言里,255.255.255.255 如果不强制转回无符号就会变成 -1。所有高于 127.x.x.x 的地址都会中招,而如果你只用 10 或 192 开头的 RFC 1918 地址测试,这个 bug 会一直藏着。

为什么输出有上限

一个 /8 包含 1670 万个地址,展开成文本大约 250 MB,浏览器标签页在渲染完成之前就会卡死。这里的输出设有上限,同时单独给出真实总数,让你既能看到区间的实际规模,又不必让浏览器去渲染它。如果确实需要遍历超大地址块,应该在服务端以流式方式处理,而不是塞进一个文本框。

开源说明:使用原生 JavaScript 实现,不依赖第三方库。

常见问题

支持哪些输入格式?
既支持 10.0.0.0/29 这样的 CIDR 写法,也支持用连字符或空格分隔的起止地址,例如 10.0.0.1 - 10.0.0.9。
为什么输出有数量上限?
完整列出一个 /8 会产生一千六百多万行,直接把标签页卡死。上限保证页面保持响应,同时计数栏仍会显示该区间的真实规模。
列表包含网络地址和广播地址吗?
包含。展开器会逐个枚举区间内的每一个地址,因此得到的是完整地址块,而不仅仅是可分配的主机地址。
为什么我的区间被拒绝了?
最常见的原因是结束地址在数值上小于起始地址。工具会把两者当作 32 位整数比较,因此 10.0.0.5 到 10.0.0.1 不是有效区间。
结果可以直接粘进防火墙规则吗?
可以,这正是展开区间最常见的用途。多数工具接受以换行分隔的列表,不过在支持 CIDR 的地方,用 CIDR 写法会更紧凑。
跨八位组进位能正确处理吗?
能。运算是在 32 位整数上进行的,因此从 10.0.0.255 跨到 10.0.1.0 的区间会正确地继续下去。