5f66f0be001c6e063dad0da00c41f68512e066d7
- 生成go.sum依赖锁定文件 - 从.gitignore移除go.sum排除 - 确保其他人克隆后可以正常编译
网络拓扑发现系统
基于Go语言开发的Windows网络拓扑发现工具,通过SSH协议远程获取多厂商网络设备接口信息,自动生成可视化网络拓扑图。
功能特性
- ✅ 支持多种设备类型: Cisco、华为、H3C、ASA防火墙、Linux服务器、Windows Server
- ✅ 通过SSH协议远程采集设备信息
- ✅ 自动发现网络拓扑关系 (基于LLDP/CDP协议)
- ✅ 交互式Web界面展示拓扑图
- ✅ 实时扫描进度显示
- ✅ 设备详情查看 (接口信息、邻居设备等)
- ✅ 支持网段扫描和手动添加设备
- ✅ 拓扑导出功能
系统要求
- Windows 7/8/10/11 或 Windows Server
- Go 1.22+ (仅编译时需要)
- 网络设备的SSH访问权限
快速开始
方式一: 使用编译好的程序
-
运行编译脚本:
build.bat -
启动程序:
network-topology.exe -
打开浏览器访问: http://localhost:8080
方式二: 从源码编译
# 克隆项目
git clone <repository-url>
cd network-topology-discovery
# 下载依赖
go mod download
# 编译
go build -o network-topology.exe ./cmd
# 运行
network-topology.exe
配置说明
配置文件 config.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. 扫描网段
- 在界面中输入IP范围 (如: 192.168.1.0/24)
- 输入SSH用户名和密码
- 点击"开始扫描"
- 等待扫描完成,自动显示拓扑图
2. 手动添加设备
- 点击"添加设备"按钮
- 填写设备信息:
- IP地址
- 设备类型 (Cisco/华为/H3C/ASA/Linux/Windows)
- 用户名和密码
- 点击"添加"
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。
描述
儲存庫語言
Go
66.8%
JavaScript
19%
HTML
8%
CSS
3.9%
Batchfile
2.3%