# 网络拓扑发现系统 基于Go语言开发的Windows网络拓扑发现工具,通过SSH协议远程获取多厂商网络设备接口信息,自动生成可视化网络拓扑图。 ## 功能特性 - ✅ 支持多种设备类型: Cisco、华为、H3C、ASA防火墙、Linux服务器、Windows Server - ✅ 通过SSH协议远程采集设备信息 - ✅ 自动发现网络拓扑关系 (基于LLDP/CDP协议) - ✅ 交互式Web界面展示拓扑图 - ✅ 实时扫描进度显示 - ✅ 设备详情查看 (接口信息、邻居设备等) - ✅ 支持网段扫描和手动添加设备 - ✅ 拓扑导出功能 ## 系统要求 - Windows 7/8/10/11 或 Windows Server - Go 1.22+ (仅编译时需要) - 网络设备的SSH访问权限 ## 快速开始 ### 方式一: 使用编译好的程序 1. 运行编译脚本: ```batch build.bat ``` 2. 启动程序: ```batch network-topology.exe ``` 3. 打开浏览器访问: http://localhost:8080 ### 方式二: 从源码编译 ```bash # 克隆项目 git clone cd network-topology-discovery # 下载依赖 go mod download # 编译 go build -o network-topology.exe ./cmd # 运行 network-topology.exe ``` ## 配置说明 配置文件 `config.json`: ```json { "scan_ranges": ["192.168.1.0/24"], // 要扫描的网段 "devices": [ // 预配置的设备 { "ip": "192.168.1.1", "type": "cisco", // 设备类型 "username": "admin", "password": "your_password", "port": 22 } ], "ssh": { "timeout": 10, // SSH超时时间(秒) "max_retries": 3, // 最大重试次数 "port": 22 // SSH端口 }, "web": { "port": 8080, // Web服务端口 "host": "0.0.0.0" // 监听地址 }, "scanner": { "concurrency": 10, // 并发扫描数 "timeout": 2 // 扫描超时(秒) } } ``` ## 使用方法 ### 1. 扫描网段 1. 在界面中输入IP范围 (如: 192.168.1.0/24) 2. 输入SSH用户名和密码 3. 点击"开始扫描" 4. 等待扫描完成,自动显示拓扑图 ### 2. 手动添加设备 1. 点击"添加设备"按钮 2. 填写设备信息: - IP地址 - 设备类型 (Cisco/华为/H3C/ASA/Linux/Windows) - 用户名和密码 3. 点击"添加" ### 3. 查看拓扑 - **缩放**: 鼠标滚轮 - **拖拽**: 鼠标左键拖动节点 - **查看详情**: 点击设备节点 - **导出拓扑**: 点击"导出拓扑"按钮 ## 支持的设备命令 ### Cisco - `show version` - 版本信息 - `show interface` - 接口详情 - `show ip interface brief` - 接口摘要 - `show cdp neighbors detail` - CDP邻居 - `show lldp neighbors detail` - LLDP邻居 ### 华为 - `display version` - 版本信息 - `display interface` - 接口详情 - `display ip interface brief` - 接口摘要 - `display lldp neighbor` - LLDP邻居 ### H3C - `display version` - 版本信息 - `display interface` - 接口详情 - `display ip interface brief` - 接口摘要 - `display lldp neighbor-list` - LLDP邻居 ### ASA防火墙 - `show version` - 版本信息 - `show interface` - 接口详情 - `show ip` - IP信息 - `show inventory` - 设备清单 ### Linux服务器 - `hostname` - 主机名 - `uname -a` - 系统信息 - `ip addr show` - 网络接口 - `ip link show` - 链路状态 - `uptime` - 运行时间 ### Windows Server - `hostname` - 主机名 - `systeminfo` - 系统信息 - `Get-NetAdapter` - 网络适配器 - `Get-NetIPAddress` - IP地址 ## 项目结构 ``` network-topology-discovery/ ├── cmd/ │ └── main.go # 主程序入口 ├── internal/ │ ├── ssh/ │ │ └── client.go # SSH客户端 │ ├── device/ │ │ ├── parser.go # 解析器基类 │ │ ├── cisco.go # Cisco解析器 │ │ ├── huawei.go # 华为解析器 │ │ ├── h3c.go # H3C解析器 │ │ ├── asa.go # ASA解析器 │ │ ├── linux.go # Linux解析器 │ │ └── windows.go # Windows解析器 │ ├── topology/ │ │ └── builder.go # 拓扑构建器 │ ├── scanner/ │ │ └── scanner.go # 网络扫描器 │ └── config/ │ └── config.go # 配置管理 ├── web/ │ ├── index.html # Web界面 │ ├── css/style.css # 样式文件 │ └── js/app.js # 应用逻辑 ├── pkg/ │ └── models/ │ └── models.go # 数据模型 ├── build.bat # 编译脚本 ├── config.example.json # 配置示例 └── README.md ``` ## 技术栈 - **后端**: Go 1.22+ - `golang.org/x/crypto/ssh` - SSH客户端 - `embed` - 嵌入Web资源 - `net/http` - HTTP服务器 - **前端**: - Cytoscape.js - 拓扑图渲染 - 原生HTML5/CSS3/JavaScript ## 常见问题 ### 1. 扫描失败 - 检查SSH凭据是否正确 - 确认设备已启用SSH服务 - 检查防火墙规则 ### 2. 无法访问Web界面 - 检查端口是否被占用 - 确认防火墙允许访问该端口 - 尝试使用 127.0.0.1:8080 访问 ### 3. 设备识别错误 - 尝试手动指定设备类型 - 检查设备是否支持标准命令 ## 许可证 MIT License ## 贡献 欢迎提交Issue和Pull Request! ## 联系方式 如有问题或建议,请提交Issue。