把地址和前缀放在一起
#0.330.0 为工具箱增加了「IP 与网段」。输入 IPv4 或 IPv6 地址,可以附带 CIDR 前缀;只写地址时,分别按 /32 或 /128 计算。工具箱因此有了十八项工具,新的入口也能从站内搜索和快捷导航找到。
这次的输入范围很明确:最多 128 个 UTF-8 字节,不接受域名、端口、方括号、区域标识、换行或控制字符。解析与计算使用本站 Rust 后端,只有点击计算才提交;工具不访问输入的地址,也不进行 DNS 或连通性探测。
打开 IP 与网段 →范围和分配分开
#报告中的首末地址与地址总数,描述一个前缀覆盖的完整范围。比如 192.0.2.10/24 对应 192.0.2.0/24,覆盖 192.0.2.0 至 192.0.2.255,共 256 个地址。输入地址仍保留为 192.0.2.10,不会被网络首地址替换。
这 256 个地址不等于实际网络中可以分配的主机数量。工具没有统一扣除两个地址,也没有替地址标记网络、广播或其他保留用途;它只提供前缀覆盖的结果。RFC 3021 单独讨论了 IPv4 点对点链路使用 /31 的场景,这也说明分配规则需要结合用途理解。
让边界也能计算
#IPv4 与 IPv6 的地址位宽分别为 32 和 128;计算时统一转换为 u128。下面摘取当前实现中的掩码与首末地址计算:width 是地址位宽,prefix_length 是已校验的前缀长度,value 是输入地址对应的无符号整数。主机位为 128 时单独取 u128::MAX,避免进行移位 128 位的操作。
IPv6 /0 覆盖的地址数为 2^128,超过 u128 可保存的最大整数;报告把这一数量精确写成十进制字符串。其他数量同样按整数计算,不使用浮点数。Rust 测试遍历全部合法前缀,核对输入被范围包含、区间长度与位分界,也分别检查零前缀、单地址和一个主机位的边界。
代码示例 · 14 行
let host_bits = width - prefix_length;
let all = if width == 128 {
u128::MAX
} else {
u128::from(u32::MAX)
};
let host_mask = if host_bits == 128 {
u128::MAX
} else {
(1_u128 << host_bits) - 1
};
let mask = all ^ host_mask;
let first = value & mask;
let last = first | host_mask;
留一份可复用的报告
#阅读文本适合直接查看,TOML 适合保留为结构化报告。下面是工具实际计算 192.0.2.10/24 后返回的部分字段:保留规范地址、网络与范围,数量使用字符串。完整报告还包含完整地址、输入是否为范围首地址,以及网络位和主机位的分界。
开启脚本后,可以复制完整结果,或下载 home-ip.toml 与 home-ip-result.txt。更改输入或报告格式会隐藏旧结果,未完成的旧请求也不能覆盖后来的输入;修改本身不会自动重新计算。关闭脚本时,仍可使用原生表单提交并查看响应。
代码示例 · 10 行
family = "IPv4"
address = "192.0.2.10"
prefix_length = 24
network = "192.0.2.0/24"
first_address = "192.0.2.0"
last_address = "192.0.2.255"
subnet_mask = "255.255.255.0"
host_bit_mask = "0.0.0.255"
address_count = "256"
address_count_exponent = 8
把入口和验证接起来
#新工具沿用已有的收藏和可选最近工具记录。收藏或启用后的最近记录只使用工具标识,不会把填写的 IP 地址和计算报告带入这些入口资料。使用指南新增了一个章节,项目介绍和开发计划同步记录了新的工具范围。
发布 0.330.0 时,371 项 Rust 测试与全部 46 组公开回归通过。IP 工具的独立检查包含 36 项检查和 16 组布局组合;数据大小和时间间隔的已有下载流程也单独回归,避免新增报告格式影响其他工具。
这一版完成的是地址与前缀的计算入口,没有增加网络探测、DNS 查询或服务器配置修改。这里留下实现与验证的记录,具体操作继续放在工具说明中。