d0927cbad5
- 支持Cisco、华为、H3C、ASA、Linux、Windows设备 - SSH远程采集设备信息 - 自动发现网络拓扑(LLDP/CDP) - Web可视化界面 - 支持旧版SSH加密算法兼容
5.1 KiB
5.1 KiB
网络拓扑发现系统 - 项目总结
项目概述
成功开发了一个运行在Windows系统上的网络拓扑发现程序,可以远程获取网络设备的接口信息并自动生成网络拓扑图。
已完成功能
✅ 核心功能
-
多厂商设备支持
- Cisco路由器/交换机
- 华为路由器/交换机
- H3C路由器/交换机
- ASA防火墙
- Linux服务器
- Windows Server
-
SSH远程采集
- 支持密码认证
- 支持密钥认证
- 智能命令执行和输出解析
- 并发采集提高效率
-
拓扑发现
- 基于LLDP协议发现邻居关系
- 基于CDP协议发现邻居关系(Cisco)
- 自动构建拓扑图
- 支持网段扫描
-
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行
使用方法
快速启动
- 双击
start.bat启动程序 - 打开浏览器访问
http://localhost:8080 - 输入IP范围和SSH凭据,点击"开始扫描"
- 等待扫描完成,查看拓扑图
编译程序
- 双击
build.bat编译 - 生成
network-topology.exe
配置设备
在 config.json 中预配置设备:
{
"devices": [
{
"ip": "192.168.1.1",
"type": "cisco",
"username": "admin",
"password": "password"
}
]
}
技术亮点
- 并发扫描: 使用goroutine和channel实现高效并发
- 智能解析: 正则表达式解析不同厂商的命令输出
- 拓扑算法: 基于LLDP/CDP自动发现设备连接关系
- 模块化设计: 清晰的架构,易于扩展新设备类型
- 嵌入式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等
注意事项
- 网络要求: 需要能够SSH访问目标设备
- 权限要求: 需要具有执行show/display命令的权限
- 防火墙: 确保22端口(SSH)和8080端口(Web)可访问
- 性能: 大网段扫描建议使用较高的并发数
后续扩展建议
- 支持SNMP协议采集
- 添加设备配置备份功能
- 支持拓扑自动刷新
- 添加告警功能
- 支持更多设备厂商
- 添加认证中间件
- 数据库持久化
- API鉴权
编译信息
- 编译时间: 2026-04-25
- 文件大小: 10.5 MB
- 目标平台: Windows AMD64
- Go版本: 1.22+
测试建议
- 在测试环境验证各厂商设备兼容性
- 测试大网段扫描性能
- 验证拓扑图准确性
- 测试并发连接稳定性
开发完成时间: 2026年4月25日 状态: ✅ 已完成,可编译运行