1e1e5957e8
- Ips.vue: el-select 添加 width: 280px,修复网段下拉框过窄 - Ips.vue: query 参数 networkId → network_id(与 FastAPI snake_case 一致) - Scan.vue: el-select 用 network.id 代替整个 network 对象作为 value,修复切换网段不生效 - enhanced_scan_service.py: 替换失效的 scapy ARP 扫描为 arp-scan 命令;扫描结果自动创建缺失 IP 记录
6.8 KiB
6.8 KiB
IPAM 管理系统 - 开发文档
项目概述
IPAM (IP Address Management) 是一个企业级IP地址管理系统,用于自动化扫描、发现和管理网络IP资产。
需求优先级划分
P0 - 核心功能(必须优先实现)
1. 项目基础架构
- FastAPI 后端框架搭建
- MySQL 数据库模型设计
- Redis 缓存配置
- Celery 异步任务框架
- Docker & Docker Compose 容器化部署
2. 网络与子网管理
- 网段CRUD(支持CIDR格式)
- 网段分组管理
- 网段统计视图(总IP、已用、空闲、使用率)
3. IP资产台账
- IP地址实体模型
- 基础字段:IP、MAC、主机名
- IP状态管理(在线、离线、空闲、保留)
- 自定义字段扩展框架
4. 基础扫描引擎
- ICMP Ping扫描
- 手动触发扫描
P1 - 重要功能(核心功能完成后实现)
1. 高级扫描功能
- ARP扫描获取MAC地址
- 反向DNS解析主机名
- 定时扫描任务调度
2. SNMP设备集成
- SNMP凭据池(v2c + v3)
- 网络设备台账
- SNMP连通性测试
- ARP表拉取(IP-MAC映射)
- MAC地址表拉取(MAC-端口映射)
3. 告警与异常检测
- IP冲突告警
- 非授权接入告警
- 网段耗尽预警
P2 - 增强功能
1. 厂商深度发现
- Cisco/H3C私有MIB支持
- LLDP/CDP邻居发现
- 物理拓扑解析
- OUI厂商识别
2. 系统管理
- 操作审计日志
- IP历史轨迹
- 角色权限控制
3. 前端界面
- Vue 3 + Element Plus
- 网段大盘视图
- IP台账表格
- 网络拓扑展示
技术栈
后端
- Web框架: FastAPI 0.110+
- 数据库: MySQL 8.0
- ORM: SQLAlchemy 2.0
- 缓存: Redis 7.0
- 异步任务: Celery 5.3+
- SNMP: pysnmp
- 网络探测: Scapy
- 数据验证: Pydantic 2.0
前端
- 框架: Vue 3
- UI组件: Element Plus
- 状态管理: Pinia
- 路由: Vue Router 4
部署
- 容器化: Docker + Docker Compose
- 反向代理: Nginx
项目结构
ipam/
├── backend/ # 后端代码
│ ├── app/
│ │ ├── api/ # API路由
│ │ │ ├── v1/
│ │ │ │ ├── networks.py
│ │ │ │ ├── ips.py
│ │ │ │ ├── scan.py
│ │ │ │ └── devices.py
│ │ │ └── dependencies.py
│ │ ├── core/ # 核心配置
│ │ │ ├── config.py
│ │ │ ├── database.py
│ │ │ └── security.py
│ │ ├── models/ # 数据库模型
│ │ │ ├── network.py
│ │ │ ├── ip.py
│ │ │ ├── device.py
│ │ │ └── alert.py
│ │ ├── schemas/ # Pydantic模型
│ │ │ ├── network.py
│ │ │ ├── ip.py
│ │ │ └── scan.py
│ │ ├── services/ # 业务逻辑
│ │ │ ├── network_service.py
│ │ │ ├── scan_service.py
│ │ │ └── snmp_service.py
│ │ ├── tasks/ # Celery任务
│ │ │ ├── celery_app.py
│ │ │ ├── scan_tasks.py
│ │ │ └── snmp_tasks.py
│ │ └── main.py
│ ├── requirements.txt
│ ├── Dockerfile
│ └── .env.example
├── frontend/ # 前端代码
│ ├── src/
│ ├── package.json
│ └── Dockerfile
├── docker-compose.yml
├── docs/ # 文档
│ └── DEVELOPMENT.md
└── README.md
数据库设计
核心表结构
networks(网段表)
id INT PRIMARY KEY
cidr VARCHAR(50) UNIQUE -- 如: 192.168.1.0/24
name VARCHAR(100)
description TEXT
group_name VARCHAR(100) -- 分组名称
gateway VARCHAR(50)
vlan_id INT
total_ips INT
used_ips INT DEFAULT 0
reserved_ips INT DEFAULT 0
created_at DATETIME
updated_at DATETIME
ip_addresses(IP地址表)
id INT PRIMARY KEY
network_id INT FOREIGN KEY
ip_address VARCHAR(50) UNIQUE
mac_address VARCHAR(50) NULL
hostname VARCHAR(255) NULL
status ENUM('available', 'online', 'offline', 'reserved')
owner VARCHAR(100) NULL
business_type VARCHAR(50) NULL
notes TEXT NULL
custom_fields JSON -- 自定义字段
last_seen DATETIME NULL
created_at DATETIME
updated_at DATETIME
scan_tasks(扫描任务表)
id INT PRIMARY KEY
network_id INT NULL
task_type ENUM('ping', 'arp', 'snmp')
status ENUM('pending', 'running', 'completed', 'failed')
progress INT DEFAULT 0
started_at DATETIME NULL
completed_at DATETIME NULL
result TEXT NULL
created_at DATETIME
snmp_credentials(SNMP凭据表)
id INT PRIMARY KEY
name VARCHAR(100)
version ENUM('v2c', 'v3')
community_string VARCHAR(255) NULL -- v2c
username VARCHAR(100) NULL -- v3
auth_password VARCHAR(255) NULL -- v3
auth_protocol VARCHAR(50) NULL -- MD5, SHA
priv_password VARCHAR(255) NULL -- v3
priv_protocol VARCHAR(50) NULL -- DES, AES
created_at DATETIME
network_devices(网络设备表)
id INT PRIMARY KEY
name VARCHAR(100)
ip_address VARCHAR(50)
device_type VARCHAR(50) -- core, distribution, access
vendor VARCHAR(100) NULL
model VARCHAR(100) NULL
snmp_credential_id INT FOREIGN KEY
last_polled_at DATETIME NULL
created_at DATETIME
alerts(告警表)
id INT PRIMARY KEY
alert_type ENUM('ip_conflict', 'unauthorized', 'subnet_full')
severity ENUM('warning', 'error', 'critical')
message TEXT
resolved BOOLEAN DEFAULT FALSE
resolved_at DATETIME NULL
created_at DATETIME
API 接口设计
网段管理
GET /api/v1/networks- 获取网段列表POST /api/v1/networks- 创建网段GET /api/v1/networks/{id}- 获取网段详情PUT /api/v1/networks/{id}- 更新网段DELETE /api/v1/networks/{id}- 删除网段GET /api/v1/networks/{id}/stats- 获取网段统计数据
IP地址管理
GET /api/v1/ips- 获取IP列表GET /api/v1/ips/{id}- 获取IP详情PUT /api/v1/ips/{id}- 更新IP信息GET /api/v1/ips/export- 导出IP台账
扫描管理
POST /api/v1/scan/ping/{network_id}- 触发Ping扫描GET /api/v1/scan/tasks/{task_id}- 获取扫描任务状态
开发规范
- 代码风格: 遵循 PEP 8,使用 black 格式化
- 类型注解: 使用 Python 类型注解
- 数据库迁移: 使用 Alembic 管理数据库迁移
- API文档: FastAPI 自动生成 Swagger 文档
- 日志: 使用 logging 模块记录关键操作
- 测试: 每个模块完成后编写单元测试
部署说明
详见 docker-compose.yml 配置文件。