# 网络拓扑发现系统 - 项目总结 ## 项目概述 成功开发了一个运行在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日 **状态**: ✅ 已完成,可编译运行