# ipam **Repository Path**: binrui/ipam ## Basic Information - **Project Name**: ipam - **Description**: ip地址管理,自动计算空余网段 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-13 - **Last Updated**: 2026-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IP 网段管理系统 (IPAM) 基于 **Python + Flask + SQLite** 的本地 Web 工具,用于管理 B 段大网段下的细分网段 (C 段、/30 等任意掩码)。以网段为核心,支持类 Excel 的在线编辑、Excel 导入导出、 空闲网段自动计算,以及「按单位」「按子网顺序」两种查看视角。 > 本文档同时作为**架构与开发参考**,便于后续优化。修改代码时请一并维护本文。 --- ## 1. 功能概览 | 模块 | 能力 | |------|------| | **网段列表(类 Excel)** | 单元格内联编辑、回车/Tab 导航、自动保存、右键插入/删除行、底部空行新增、列宽拖动记忆、从 Excel 复制整块 Ctrl+V 批量录入、多选批量删除、按单位/关键字筛选 | | **字段** | CIDR、单位、VLAN、带宽、运营商、描述、创建/更新时间(时间自动维护) | | **重叠检测** | 编辑/粘贴/导入时自动检测与已有网段重叠,标黄提示(不阻止保存) | | **按单位看** | 各单位下挂网段聚合列表 + 数量统计(亦可在列表页按单位筛选) | | **按子网顺序看** | 选大网段→按掩码切分顺序列出子网,按重叠/包含关系判定 已分配/部分占用/空闲;占用块可展开「明细」;空闲网段自动计算并合并相邻块 | | **Excel 导入/导出** | 列:`网段(CIDR) \| 单位 \| VLAN \| 带宽 \| 运营商 \| 描述`;导入自动建单位、同名网段更新而非重复、错误与重叠回显汇总 | --- ## 2. 技术栈 | 层 | 选型 | 说明 | |----|------|------| | 语言 | Python 3.9+ | 仅用标准库 + 两个三方包 | | Web 框架 | Flask 3.x | 轻量、单进程、`python app.py` 即起 | | 数据库 | SQLite(`sqlite3` 标准库) | 单文件 `ipam.db`,零运维,复制即备份 | | 网段计算 | `ipaddress` 标准库 | CIDR 解析、重叠、子网枚举、空闲计算 | | Excel | openpyxl | xlsx 读写 | | 前端 | 原生 HTML + CSS + Vanilla JS | **无构建、无框架、无 CDN,完全离线** | | 模板 | Jinja2(Flask 内置) | 服务端渲染页面 | 依赖见 [requirements.txt](requirements.txt):`flask`、`openpyxl`。 --- ## 3. 架构 ### 3.1 总体形态 单体应用,**服务端渲染页面 + 局部 JSON API** 的混合模式: ``` 浏览器 │ ├─ 普通页面 (GET) ──► Flask 路由 ──► Jinja 模板渲染 HTML ──► 返回整页 │ · / 网段列表(壳) + 引导数据(JSON) │ · /by-unit 按单位视图 │ · /by-subnet 子网顺序 + 空闲计算 │ · /units 单位 / 大网段管理 │ └─ 表格交互 (fetch/JSON) ──► /api/* ──► db 层 ──► 返回 JSON · 内联编辑、批量粘贴、删除等不刷新整页,由 grid.js 局部更新 DOM ``` ### 3.2 分层 ``` 表现层 templates/*.html + static/grid.js + static/style.css │ (Jinja 渲染骨架 / 引导数据;grid.js 接管表格交互) 路由层 app.py (HTTP 路由、请求解析、JSON 序列化、流程编排) 领域层 ipam.py (纯函数:CIDR 解析/重叠/枚举/空闲/状态判定,无状态、无 IO) 数据层 db.py (SQLite 连接、建表、迁移、CRUD 封装) 持久化 ipam.db (SQLite 文件) ``` **依赖方向**:`app.py → {ipam.py, db.py, excel.py}`;`db.py → ipam.py`(归一化用);`excel.py → {db.py, ipam.py}`。`ipam.py` 不依赖任何项目内模块,可独立测试。 ### 3.3 表格(grid.js)数据流 1. 服务端把当前网段列表序列化为 JSON,注入 `