Files
Your Name d0927cbad5 Initial commit: 网络拓扑发现系统
- 支持Cisco、华为、H3C、ASA、Linux、Windows设备
- SSH远程采集设备信息
- 自动发现网络拓扑(LLDP/CDP)
- Web可视化界面
- 支持旧版SSH加密算法兼容
2026-04-25 22:35:51 +08:00

183 lines
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日
**状态**: ✅ 已完成,可编译运行