cidrkit 是一款运行在终端里的 CIDR / 子网计算工具:输入一个网段,就能立刻得到网络地址、广播地址、子网掩码与反掩码、首尾可用主机、主机数量、地址类型、反向解析区域、二进制位布局等完整信息;同时支持 VLSM 等分子网划分、超网聚合(CIDR aggregation)、网段包含判定、重叠检测,并提供 JSON / CSV 结构化输出与标准退出码,可以直接嵌入脚本与 CI/CD 流水线。
- 在线子网计算器 广告多、要联网、输入繁琐,一次只能算一个网段,无法批量处理;
- 运维与开发场景中,网段规划属于内网敏感信息,把
10.x/172.16.x的拓扑贴进第三方网页,本身就存在信息泄露风险; - 现有命令行工具要么只支持 IPv4,要么需要 Python/Node 运行时,无法做到"下载一个二进制到处运行";
- 自动化流水线需要机器可读输出和可判断成败的退出码,网页工具完全无法满足。
本项目的产品灵感来自当前 GitHub 上"本地优先(local-first)、零服务器、单文件替代云服务"的开源浪潮——用一个离线、保护隐私、可自动化的小工具替代有泄露风险的在线网页。cidrkit 的全部代码均为独立自研,未复制任何项目的源码,仅借鉴"本地优先"这一产品理念,并在双栈支持、精确 128 位运算、VLSM 规划、CI 友好度等方面做了差异化设计。
- IPv4 / IPv6 双栈一等公民:IPv6 地址空间使用
math/big做精确的 128 位整数运算,不丢精度、不溢出; - 严格遵循 RFC 标准:
/31点对点链路按 RFC 3021 计 2 个可用主机,地址分类覆盖 RFC 1918 / 6598(CGNAT)/ 3927 / 4291 / 4193 / 3849 等; - 真正的最小超网聚合:自动合并相邻网段,并剔除被包含的冗余网段;
- 零第三方依赖:仅使用 Go 标准库,审计友好,编译产物为静态单二进制;
- CI 原生设计:
--json/--csv/ stdin 批量输入 / 语义化退出码一应俱全。
- 🔍
info网段全景体检:网络/广播地址、掩码与反掩码(wildcard)、首尾主机、地址总数与可用主机数、位级布局图、反向 DNS 区域、IANA 特殊地址分类; - ✂️
splitVLSM 等分子网划分:指定目标前缀(--prefix 26)或直接给出需要的子网数量(--count 6,自动计算最省地址的前缀); - 🧩
aggregate超网聚合:把零散网段合并为最小等价 CIDR 集合,自动去重、自动剔除被包含网段,IPv4/IPv6 混合输入自动分族处理; - 📦
contains包含判定:判断 IP / 网段是否落在外网段内,全部包含退出码为 0,否则为 1,适合做准入校验; - ♻️
overlap重叠检测:找出网段清单中所有互相重叠的对,无重叠退出 0、有重叠退出 1; - 🧾 三种输入形式:标准 CIDR(
10.0.0.0/24)、点分掩码(10.0.0.0/255.255.255.0)、裸 IP(自动按/32、/128主机路由处理); - 📟 三种输出形态:终端彩色表格(自动识别 TTY,尊重
NO_COLOR约定)、--json、--csv; - 📥 stdin 批量模式:支持管道、文件重定向,
#开头的注释行与空行自动忽略; - 🛡️ 安全护栏:划分结果超过 65 536 块时直接拒绝,防止笔误(如
/0 → /128)打爆内存; - 🧪 16 项 RFC 已知向量单元测试,核心计算包语句覆盖率 94%+,跨平台 CI 全绿;
- 📦 全平台静态编译:Linux / macOS / Windows × amd64 / arm64,开箱即用,无运行时依赖。
- 直接使用:无需任何运行时,到 Release 页面下载对应平台二进制即可;
- 从源码构建:Go 1.24 或更高版本(本项目不依赖任何第三方 Go 模块)。
# Linux amd64 示例
curl -L -o cidrkit.tar.gz https://github.com/gitstq/cidrkit/releases/latest/download/cidrkit_1.0.0_linux_amd64.tar.gz
tar -xzf cidrkit.tar.gz
./cidrkit versionWindows 用户下载 cidrkit_1.0.0_windows_amd64.zip,解压后在 PowerShell 运行 .\cidrkit.exe version。
# 通过 go install
go install github.com/gitstq/cidrkit@latest
# 或克隆源码后本地构建
git clone https://github.com/gitstq/cidrkit.git
cd cidrkit
make build # 产物在 bin/cidrkit# 1. 查看一个网段的完整信息(输入 IP 不必是网络地址,主机位会自动清零)
cidrkit info 192.168.1.55/24
# 2. 把 /24 划分为至少 6 个子网(自动选择 /27)
cidrkit split 10.0.0.0/24 --count 6
# 3. 把 4 个 /24 聚合成最小超网
cidrkit aggregate 192.168.0.0/24 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24
# 4. 判断地址是否属于 10/8(流水线可根据退出码判断)
cidrkit contains 10.0.0.0/8 10.20.30.40| 命令 | 作用 | 关键参数 / 退出码 |
|---|---|---|
info <cidr...> |
网段详情体检 | 支持多个网段;--json / --csv |
split <cidr> |
等分子网 | --prefix N 或 --count N(二选一) |
aggregate <cidr...>(别名 agg) |
最小超网聚合 | --json |
contains <outer> <target...> |
包含判定 | 全部包含 exit 0,否则 exit 1 |
overlap <cidr...> |
重叠检测 | 无重叠 exit 0,有重叠 exit 1 |
version / help |
版本与帮助 | — |
所有命令通用输出参数:--json(结构化 JSON)、--csv(表格 CSV,仅 info/split)、--no-color(关闭颜色)。
cidrkit info 10.0.0.0/31 # /31 按 RFC 3021 计 2 个可用主机
cidrkit info 172.16.5.9/255.255.0.0 # 支持点分掩码写法
cidrkit info 8.8.8.8 # 裸 IP 自动按 /32 处理
cidrkit info 2001:db8::/32 # IPv6 同样适用
cidrkit info 10.0.0.0/8 --json # 机器可读输出输出字段说明:
- Network address:主机位清零后的规范网络地址;
- Host address:当你输入的 IP 带有非零主机位时,原样保留展示;
- Netmask / Wildcard mask:子网掩码与反掩码(ACL/反掩码配置直接抄);
- First/Last host:首末可用主机地址(
/31、/32按 RFC 特殊处理); - Broadcast:广播地址(仅 IPv4;
/31、/32不保留广播位); - Total / Usable:地址总数与可用主机数,IPv6 使用大数精确显示;
- Address type:地址类型,标注私网、CGNAT、环回、链路本地、文档保留段等及对应 RFC;
- Reverse DNS:反向解析区域(非字节/半字节边界时给出 RFC 2317 无类委派提示);
- Bit layout:32 位二进制布局,
|标记网络位与主机位分界。
# 把 10.10.0.0/22 等分为 /24
cidrkit split 10.10.0.0/22 --prefix 24
# 我需要 6 个业务子网,工具自动算出 /27 并给出前 6 块
cidrkit split 10.0.0.0/24 --count 6
# JSON 输出,方便二次开发
cidrkit split 192.168.1.0/29 --prefix 31 --json📌
--count模式会选择"能容纳 N 个子网的最小前缀";当 N 不是 2 的幂时,会在结果末尾提示等分情况下的总块数。
# 相邻同前缀网段自动合并;被包含的冗余网段自动剔除
cidrkit agg 192.168.0.0/24 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24
# -> 192.168.0.0/22
# IPv4 / IPv6 混合输入会自动分族处理
cidrkit agg 10.0.0.0/24 2001:db8::/33 2001:db8:8000::/33# 所有目标都在 10/8 内 -> exit 0;出现外部地址 -> exit 1
cidrkit contains 10.0.0.0/8 10.2.3.4 10.99.0.0/16
echo $?典型场景:Terraform/Ansible 下发前校验内网地址是否落在规划段内、安全组变更前做防呆检查。
# 输出所有重叠对;规划无冲突时退出码为 0
cidrkit overlap 192.168.0.0/24 192.168.1.0/24 192.168.0.128/25参数可以来自标准输入(空白分隔,支持换行;# 注释自动忽略):
# 批量体检并导出 CSV
cidrkit info --csv < examples/networks.txt > inventory.csv
# 与 grep / xargs 组合
cat route-table.txt | cidrkit aggregate
cidrkit info --csv < examples/networks.txt | grep -i private| 退出码 | 含义 |
|---|---|
0 |
执行成功(contains/overlap 表示校验通过) |
1 |
逻辑不满足(存在外部地址 / 存在重叠) |
2 |
参数或输入错误(非法网段、缺少参数等) |
- 为什么选 Go? 标准库
net提供了成熟的 IP/IPMask 原语,配合math/big可以用同一套代码精确处理 IPv4 与 128 位的 IPv6;交叉编译只需指定GOOS/GOARCH,天然产出无依赖静态二进制,契合"下载即用"的目标。 - 为什么坚持零第三方依赖? 网络工具常用于生产跳板机与 CI Runner,依赖越少,供应链与审计成本越低;同时保证在离线环境中可完整构建。
- 为什么把输出当 API 设计?
--json字段名与--csv列头是稳定契约,配合退出码,让 cidrkit 既能给人看,也能给程序调用。 - 正确性从哪来? 核心计算全部以 RFC 已知向量驱动单元测试(RFC 3021、RFC 1918、RFC 6598、RFC 4291、RFC 4193 等),关键路径覆盖率 94%+。
- v1.1:
range子命令——受控枚举网段内全部地址,支持--limit与格式化模板; - v1.1:支持从文本中抽取所有 CIDR(类似 grep 的网络感知模式);
- v1.2:VLSM 多需求排序分配(给定一组主机数自动出最优地址分配方案);
- v1.2:超网差异对比(两份网段清单的增删改 diff);
- v1.3:MCP / 语言 SDK 模式,输出稳定 JSON 供 AI Agent 与自动化平台调用;
- 持续补充 RFC 特殊地址注册表与多语言文档。
欢迎认领 Roadmap、补充测试向量、完善多语言文档,规范见 CONTRIBUTING.md。
# 一键产出全部平台产物到 dist/(含 SHA256SUMS.txt)
make dist
# 等价于
VERSION=1.0.0 bash scripts/build.sh| 目标平台 | 架构 | 产物 |
|---|---|---|
| Linux | amd64 / arm64 | cidrkit_1.0.0_linux_amd64.tar.gz、cidrkit_1.0.0_linux_arm64.tar.gz |
| macOS | amd64(Intel)/ arm64(Apple Silicon) | cidrkit_1.0.0_darwin_amd64.tar.gz、cidrkit_1.0.0_darwin_arm64.tar.gz |
| Windows | amd64 / arm64 | cidrkit_1.0.0_windows_amd64.zip、cidrkit_1.0.0_windows_arm64.zip |
所有产物均为 CGO_ENABLED=0 静态编译,每个压缩包内置 LICENSE 与 README。
sha256sum -c SHA256SUMS.txt # Linux
shasum -a 256 -c SHA256SUMS.txt # macOS- name: Validate planned network
run: |
curl -L https://github.com/gitstq/cidrkit/releases/latest/download/cidrkit_1.0.0_linux_amd64.tar.gz | tar xz
./cidrkit contains 10.0.0.0/8 ${{ env.PLANNED_IP }}cidrkit 是单二进制无状态 CLI,无需服务端、数据库或常驻进程;放入镜像/Runner 镜像层即可,基础镜像可使用 scratch 或 distroless 直接携带。
我们欢迎 Issue、PR 与测试向量贡献!开始之前请阅读 CONTRIBUTING.md:
- 非平凡改动建议先开 Issue 讨论设计;
- 提交信息遵循 Angular 规范:
feat:/fix:/docs:/test:/refactor:/chore:; - 新计算规则必须附带 RFC 已知答案的单元测试;
- 提交前执行
gofmt -s -w . && go vet ./... && go test ./...,保证三平台 CI 全绿。
本项目基于 MIT License 开源,允许自由使用、修改、分发与商用,保留版权声明即可。
If cidrkit saves you time, consider giving it a ⭐ — it helps a lot!