Initial commit: 网络拓扑发现系统
- 支持Cisco、华为、H3C、ASA、Linux、Windows设备 - SSH远程采集设备信息 - 自动发现网络拓扑(LLDP/CDP) - Web可视化界面 - 支持旧版SSH加密算法兼容
Šī revīzija ir iekļauta:
+223
@@ -0,0 +1,223 @@
|
||||
# 网络拓扑发现系统
|
||||
|
||||
基于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 <repository-url>
|
||||
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。
|
||||
Atsaukties uz šo jaunā problēmā
Block a user