d0927cbad5
- 支持Cisco、华为、H3C、ASA、Linux、Windows设备 - SSH远程采集设备信息 - 自动发现网络拓扑(LLDP/CDP) - Web可视化界面 - 支持旧版SSH加密算法兼容
183 line
5.1 KiB
Markdown
183 line
5.1 KiB
Markdown
# 网络拓扑发现系统 - 项目总结
|
|
|
|
## 项目概述
|
|
|
|
成功开发了一个运行在Windows系统上的网络拓扑发现程序,可以远程获取网络设备的接口信息并自动生成网络拓扑图。
|
|
|
|
## 已完成功能
|
|
|
|
### ✅ 核心功能
|
|
1. **多厂商设备支持**
|
|
- Cisco路由器/交换机
|
|
- 华为路由器/交换机
|
|
- H3C路由器/交换机
|
|
- ASA防火墙
|
|
- Linux服务器
|
|
- Windows Server
|
|
|
|
2. **SSH远程采集**
|
|
- 支持密码认证
|
|
- 支持密钥认证
|
|
- 智能命令执行和输出解析
|
|
- 并发采集提高效率
|
|
|
|
3. **拓扑发现**
|
|
- 基于LLDP协议发现邻居关系
|
|
- 基于CDP协议发现邻居关系(Cisco)
|
|
- 自动构建拓扑图
|
|
- 支持网段扫描
|
|
|
|
4. **Web可视化界面**
|
|
- 交互式拓扑图展示(Cytoscape.js)
|
|
- 实时扫描进度显示
|
|
- 设备详情查看
|
|
- 支持缩放、拖拽
|
|
- 拓扑导出功能
|
|
|
|
### ✅ 技术实现
|
|
|
|
**后端 (Go)**
|
|
- SSH客户端封装 (`internal/ssh/client.go`)
|
|
- 6种设备解析器 (`internal/device/`)
|
|
- 拓扑构建器 (`internal/topology/builder.go`)
|
|
- 网络扫描器 (`internal/scanner/scanner.go`)
|
|
- 配置管理 (`internal/config/config.go`)
|
|
- HTTP服务器 (`cmd/main.go`)
|
|
|
|
**前端 (HTML5/CSS3/JavaScript)**
|
|
- 响应式布局
|
|
- Cytoscape.js拓扑渲染
|
|
- AJAX异步通信
|
|
- 模态框交互
|
|
|
|
## 项目结构
|
|
|
|
```
|
|
network-topology-discovery/
|
|
├── cmd/
|
|
│ └── main.go # 主程序(278行)
|
|
├── internal/
|
|
│ ├── ssh/
|
|
│ │ └── client.go # SSH客户端(177行)
|
|
│ ├── device/
|
|
│ │ ├── parser.go # 解析器接口(94行)
|
|
│ │ ├── cisco.go # Cisco解析器(285行)
|
|
│ │ ├── huawei.go # 华为解析器(170行)
|
|
│ │ ├── h3c.go # H3C解析器(159行)
|
|
│ │ ├── asa.go # ASA解析器(113行)
|
|
│ │ ├── linux.go # Linux解析器(108行)
|
|
│ │ └── windows.go # Windows解析器(200行)
|
|
│ ├── topology/
|
|
│ │ └── builder.go # 拓扑构建器(123行)
|
|
│ ├── scanner/
|
|
│ │ └── scanner.go # 网络扫描器(129行)
|
|
│ └── config/
|
|
│ └── config.go # 配置管理(126行)
|
|
├── web/
|
|
│ ├── index.html # Web界面(113行)
|
|
│ ├── css/
|
|
│ │ └── style.css # 样式(272行)
|
|
│ └── js/
|
|
│ └── app.js # 应用逻辑(344行)
|
|
├── pkg/
|
|
│ └── models/
|
|
│ └── models.go # 数据模型(95行)
|
|
├── build.bat # 编译脚本
|
|
├── start.bat # 启动脚本
|
|
├── config.example.json # 配置示例
|
|
├── README.md # 使用文档
|
|
├── go.mod # Go模块文件
|
|
└── network-topology.exe # 编译后的程序(10MB)
|
|
```
|
|
|
|
**总代码量**: 约2,800行
|
|
|
|
## 使用方法
|
|
|
|
### 快速启动
|
|
1. 双击 `start.bat` 启动程序
|
|
2. 打开浏览器访问 `http://localhost:8080`
|
|
3. 输入IP范围和SSH凭据,点击"开始扫描"
|
|
4. 等待扫描完成,查看拓扑图
|
|
|
|
### 编译程序
|
|
1. 双击 `build.bat` 编译
|
|
2. 生成 `network-topology.exe`
|
|
|
|
### 配置设备
|
|
在 `config.json` 中预配置设备:
|
|
```json
|
|
{
|
|
"devices": [
|
|
{
|
|
"ip": "192.168.1.1",
|
|
"type": "cisco",
|
|
"username": "admin",
|
|
"password": "password"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 技术亮点
|
|
|
|
1. **并发扫描**: 使用goroutine和channel实现高效并发
|
|
2. **智能解析**: 正则表达式解析不同厂商的命令输出
|
|
3. **拓扑算法**: 基于LLDP/CDP自动发现设备连接关系
|
|
4. **模块化设计**: 清晰的架构,易于扩展新设备类型
|
|
5. **嵌入式Web**: 静态资源可直接访问,无需额外部署
|
|
|
|
## 支持的设备命令
|
|
|
|
| 设备类型 | 版本信息 | 接口信息 | 邻居发现 |
|
|
|---------|---------|---------|---------|
|
|
| Cisco | show version | show interface | CDP/LLDP |
|
|
| 华为 | display version | display interface | LLDP |
|
|
| H3C | display version | display interface | LLDP |
|
|
| ASA | show version | show interface | - |
|
|
| Linux | uname -a | ip addr show | - |
|
|
| Windows | systeminfo | Get-NetAdapter | - |
|
|
|
|
## 依赖库
|
|
|
|
- `golang.org/x/crypto/ssh` - SSH客户端
|
|
- `crypto/rand` - 唯一ID生成
|
|
- 标准库: `net/http`, `encoding/json`, `sync` 等
|
|
|
|
## 注意事项
|
|
|
|
1. **网络要求**: 需要能够SSH访问目标设备
|
|
2. **权限要求**: 需要具有执行show/display命令的权限
|
|
3. **防火墙**: 确保22端口(SSH)和8080端口(Web)可访问
|
|
4. **性能**: 大网段扫描建议使用较高的并发数
|
|
|
|
## 后续扩展建议
|
|
|
|
1. 支持SNMP协议采集
|
|
2. 添加设备配置备份功能
|
|
3. 支持拓扑自动刷新
|
|
4. 添加告警功能
|
|
5. 支持更多设备厂商
|
|
6. 添加认证中间件
|
|
7. 数据库持久化
|
|
8. API鉴权
|
|
|
|
## 编译信息
|
|
|
|
- **编译时间**: 2026-04-25
|
|
- **文件大小**: 10.5 MB
|
|
- **目标平台**: Windows AMD64
|
|
- **Go版本**: 1.22+
|
|
|
|
## 测试建议
|
|
|
|
1. 在测试环境验证各厂商设备兼容性
|
|
2. 测试大网段扫描性能
|
|
3. 验证拓扑图准确性
|
|
4. 测试并发连接稳定性
|
|
|
|
---
|
|
|
|
**开发完成时间**: 2026年4月25日
|
|
**状态**: ✅ 已完成,可编译运行
|