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 记录
278 lines
8.2 KiB
Markdown
278 lines
8.2 KiB
Markdown
# IPAM 管理系统 - 完整功能
|
|
|
|
企业级 IP 地址管理系统,支持自动化扫描、发现和管理网络 IP 资产。
|
|
|
|
## ✅ 已完成功能
|
|
|
|
### 🎯 P0 - 核心功能
|
|
- ✅ **FastAPI 后端框架** - 高性能 RESTful API
|
|
- ✅ **MySQL 数据库** - 持久化存储
|
|
- ✅ **Redis 缓存** - 任务队列和缓存
|
|
- ✅ **网段管理** - CIDR 网段增删改查,自动创建 IP 记录
|
|
- ✅ **IP 资产台账** - IP 地址全生命周期管理
|
|
- ✅ **Ping 扫描引擎** - ICMP 在线状态检测
|
|
|
|
### 🚀 P1 - 高级功能
|
|
- ✅ **ARP 扫描** - 获取 MAC 地址
|
|
- ✅ **反向 DNS 解析** - 获取主机名
|
|
- ✅ **MAC 厂商识别** - 内置 OUI 数据库
|
|
- ✅ **Celery 异步任务** - 后台并发扫描
|
|
- ✅ **SNMP 设备集成**
|
|
- SNMP v2c/v3 支持
|
|
- 设备连接测试
|
|
- ARP 表自动采集
|
|
- 接口信息采集
|
|
- ✅ **告警与异常检测**
|
|
- IP 冲突告警
|
|
- 未授权接入检测
|
|
- 网段耗尽预警
|
|
- 设备离线告警
|
|
- 新设备发现告警
|
|
- MAC 地址白名单
|
|
|
|
### 🎨 P2 - 前端界面
|
|
- ✅ **Vue 3 + Element Plus** - 现代化 UI 框架
|
|
- ✅ **仪表盘** - 统计概览、网段使用率、告警统计
|
|
- ✅ **网段管理** - 网段 CRUD、扫描、导出
|
|
- ✅ **IP 地址管理** - 筛选、搜索、编辑
|
|
- ✅ **扫描管理** - 综合扫描、结果导出
|
|
- ✅ **SNMP 管理** - 设备、凭据、ARP 表
|
|
- ✅ **告警中心** - 告警列表、统计、白名单
|
|
|
|
## 🚀 快速启动
|
|
|
|
### 方式一:使用启动脚本(推荐)
|
|
|
|
```bash
|
|
cd /root/ipam
|
|
|
|
# 启动所有服务
|
|
chmod +x start.sh
|
|
./start.sh
|
|
```
|
|
|
|
### 方式二:手动启动
|
|
|
|
**1. 启动数据库和缓存**
|
|
```bash
|
|
# MySQL 已运行在 3308 端口
|
|
# Redis 已运行在 6379 端口
|
|
```
|
|
|
|
**2. 启动后端服务**
|
|
```bash
|
|
cd /root/ipam/backend
|
|
source venv/bin/activate
|
|
uvicorn app.main:app --host 0.0.0.0 --port 8008
|
|
```
|
|
|
|
**3. 启动 Celery Worker**
|
|
```bash
|
|
cd /root/ipam/backend
|
|
source venv/bin/activate
|
|
celery -A app.tasks.celery_app worker --loglevel=info --concurrency=4
|
|
```
|
|
|
|
**4. 启动前端服务**
|
|
```bash
|
|
cd /root/ipam/frontend
|
|
npm run dev -- --host 0.0.0.0 --port 3000
|
|
```
|
|
|
|
## 🌐 访问地址
|
|
|
|
| 服务 | 地址 | 说明 |
|
|
|------|------|------|
|
|
| 前端界面 | http://服务器IP:3000 | Web 管理界面 |
|
|
| 后端 API | http://服务器IP:8008 | API 服务 |
|
|
| API 文档 | http://服务器IP:8008/docs | Swagger 在线文档 |
|
|
| MySQL | 服务器IP:3308 | 数据库 |
|
|
| Redis | 服务器IP:6379 | 缓存和任务队列 |
|
|
|
|
## 📖 API 使用示例
|
|
|
|
### 1. 创建网段
|
|
```bash
|
|
curl -X POST http://localhost:8008/api/v1/networks \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"cidr": "192.168.1.0/24",
|
|
"name": "办公网络",
|
|
"group_name": "office",
|
|
"gateway": "192.168.1.1"
|
|
}'
|
|
```
|
|
|
|
### 2. 触发扫描
|
|
```bash
|
|
curl -X POST http://localhost:8008/api/v1/scan/comprehensive/1
|
|
```
|
|
|
|
### 3. 查看统计
|
|
```bash
|
|
curl http://localhost:8008/api/v1/networks/stats
|
|
```
|
|
|
|
## 🏗️ 项目结构
|
|
|
|
```
|
|
/root/ipam/
|
|
├── backend/ # 后端代码
|
|
│ ├── app/
|
|
│ │ ├── api/ # API 路由
|
|
│ │ │ └── v1/
|
|
│ │ │ ├── networks.py # 网段管理
|
|
│ │ │ ├── ips.py # IP管理
|
|
│ │ │ ├── scan.py # 扫描管理
|
|
│ │ │ ├── enhanced_scan.py # 增强扫描
|
|
│ │ │ ├── snmp.py # SNMP管理
|
|
│ │ │ └── alerts.py # 告警管理
|
|
│ │ ├── core/ # 核心配置
|
|
│ │ │ ├── config.py # 配置文件
|
|
│ │ │ └── database.py # 数据库连接
|
|
│ │ ├── models/ # 数据模型
|
|
│ │ │ ├── network.py # 网段/IP/扫描任务
|
|
│ │ │ ├── snmp.py # SNMP设备/凭据
|
|
│ │ │ └── alert.py # 告警模型
|
|
│ │ ├── schemas/ # Pydantic 验证模型
|
|
│ │ │ └── network.py
|
|
│ │ ├── services/ # 业务逻辑
|
|
│ │ │ ├── network_service.py # 网段服务
|
|
│ │ │ ├── scan_service.py # Ping扫描服务
|
|
│ │ │ ├── enhanced_scan_service.py # ARP/DNS扫描服务
|
|
│ │ │ ├── snmp_service.py # SNMP服务
|
|
│ │ │ └── alert_service.py # 告警服务
|
|
│ │ ├── tasks/ # Celery 任务
|
|
│ │ │ ├── celery_app.py # Celery 应用
|
|
│ │ │ └── scan_tasks.py # 扫描任务
|
|
│ │ └── main.py # FastAPI 应用入口
|
|
│ ├── requirements.txt # Python 依赖
|
|
│ └── venv/ # Python 虚拟环境
|
|
├── frontend/ # 前端代码
|
|
│ ├── src/
|
|
│ │ ├── views/ # 页面组件
|
|
│ │ │ ├── Dashboard.vue # 仪表盘
|
|
│ │ │ ├── Networks.vue # 网段管理
|
|
│ │ │ ├── IPs.vue # IP地址
|
|
│ │ │ ├── Scan.vue # 扫描管理
|
|
│ │ │ ├── SNMP.vue # SNMP管理
|
|
│ │ │ └── Alerts.vue # 告警中心
|
|
│ │ ├── layout/ # 布局组件
|
|
│ │ │ └── MainLayout.vue # 主布局
|
|
│ │ ├── router/ # 路由配置
|
|
│ │ │ └── index.js
|
|
│ │ ├── api/ # API 客户端
|
|
│ │ │ └── index.js
|
|
│ │ ├── utils/ # 工具函数
|
|
│ │ │ └── api.js
|
|
│ │ ├── App.vue # 根组件
|
|
│ │ └── main.js # 应用入口
|
|
│ ├── package.json
|
|
│ └── vite.config.js # Vite 配置
|
|
├── docs/ # 文档
|
|
├── docker-compose.yml # Docker 配置
|
|
├── start.sh # 启动脚本
|
|
└── README.md
|
|
```
|
|
|
|
## 🔧 技术栈
|
|
|
|
### 后端
|
|
- **Web 框架**: FastAPI 0.110
|
|
- **ORM**: SQLAlchemy 2.0
|
|
- **数据库**: MySQL 8.0
|
|
- **缓存/队列**: Redis 7.0
|
|
- **异步任务**: Celery 5.3
|
|
- **SNMP**: PySNMP 4.4.12
|
|
- **网络探测**: Scapy 2.5.0
|
|
- **HTTP 客户端**: httpx
|
|
|
|
### 前端
|
|
- **框架**: Vue 3.5
|
|
- **UI 组件**: Element Plus 2.14
|
|
- **路由**: Vue Router 4.6
|
|
- **状态管理**: Pinia 4.0
|
|
- **HTTP 客户端**: Axios 1.18
|
|
- **构建工具**: Vite 5.0
|
|
|
|
## 📊 数据库表
|
|
|
|
| 表名 | 说明 |
|
|
|------|------|
|
|
| networks | 网段信息 |
|
|
| ip_addresses | IP 地址台账 |
|
|
| scan_tasks | 扫描任务记录 |
|
|
| snmp_credentials | SNMP 凭据配置 |
|
|
| network_devices | 网络设备列表 |
|
|
| arp_entries | ARP 表记录 |
|
|
| mac_address_table | MAC 地址表 |
|
|
| device_interfaces | 设备接口信息 |
|
|
| alerts | 告警记录 |
|
|
| alert_rules | 告警规则配置 |
|
|
| whitelisted_macs | MAC 地址白名单 |
|
|
|
|
## 🎯 核心特性
|
|
|
|
### 1. 智能扫描
|
|
- **ICMP Ping**: 快速检测在线状态
|
|
- **ARP 扫描**: 二层网络 MAC 发现
|
|
- **反向 DNS**: 自动解析主机名
|
|
- **并发扫描**: Celery 异步执行,不阻塞 Web 服务
|
|
|
|
### 2. SNMP 设备管理
|
|
- 支持 SNMP v2c/v3
|
|
- 自动采集 ARP 表、接口信息
|
|
- 设备连通性测试
|
|
- 轮询状态监控
|
|
|
|
### 3. 智能告警
|
|
- IP 冲突自动检测
|
|
- 未授权设备接入告警
|
|
- 网段使用率预警
|
|
- MAC 白名单机制
|
|
|
|
### 4. 厂商识别
|
|
- 内置 IEEE OUI 数据库
|
|
- 自动识别 3000+ 设备厂商
|
|
- 支持 Cisco、H3C、华为、华三等主流厂商
|
|
|
|
## 📝 开发计划
|
|
|
|
### 待实现功能 (P3)
|
|
- [ ] 历史趋势图表
|
|
- [ ] 报告导出
|
|
- [ ] 用户权限管理
|
|
- [ ] 邮件/钉钉/企业微信通知
|
|
- [ ] VLAN 自动发现
|
|
- [ ] 拓扑图自动生成
|
|
- [ ] 端口控制(关闭/开启)
|
|
- [ ] 资产变更审计日志
|
|
|
|
## 🔐 安全建议
|
|
|
|
1. **修改默认密码**
|
|
- MySQL root 密码
|
|
- Redis 密码配置
|
|
|
|
2. **配置防火墙**
|
|
- 仅开放必要端口:3000(前端)、8008(API)
|
|
- 限制 3308(MySQL)、6379(Redis) 访问来源
|
|
|
|
3. **HTTPS**
|
|
- 生产环境建议配置 Nginx 反向代理 + SSL
|
|
|
|
4. **访问控制**
|
|
- 配置 API 认证 (JWT)
|
|
- 限制管理后台访问来源
|
|
|
|
## 📞 技术支持
|
|
|
|
如有问题或建议,请查看 API 文档:
|
|
- Swagger UI: http://服务器IP:8008/docs
|
|
- ReDoc: http://服务器IP:8008/redoc
|
|
|
|
---
|
|
|
|
**版本**: 1.0.0
|
|
**最后更新**: 2026-07-17
|