418 lines
9.0 KiB
Markdown
418 lines
9.0 KiB
Markdown
# AMT 网络扫描器 - 完整使用指南
|
||
|
||
## 🎉 系统已就绪!
|
||
|
||
### 当前状态
|
||
- ✅ **后端服务**: 运行在 `http://localhost:5000`
|
||
- ✅ **前端界面**: 运行在 `http://localhost:3001`
|
||
- ✅ **数据库**: SQLite 已初始化
|
||
- ✅ **Intel SDK**: 已集成并测试成功
|
||
- ✅ **默认凭据**: admin / Guo1wu3shi4!
|
||
|
||
---
|
||
|
||
## 📖 快速开始
|
||
|
||
### 1️⃣ 访问系统
|
||
打开浏览器,访问:
|
||
```
|
||
http://localhost:3001
|
||
```
|
||
|
||
### 2️⃣ 开始扫描
|
||
|
||
#### 步骤 1: 配置扫描参数
|
||
在"网络扫描"标签页:
|
||
- **网络段**: 输入 `192.168.8.0`
|
||
- **子网掩码**: 输入 `255.255.255.0` 或 `/24`
|
||
|
||
#### 步骤 2: 点击"开始扫描"
|
||
系统会自动:
|
||
1. 扫描 254 个 IP 地址(192.168.8.1 - 192.168.8.254)
|
||
2. 检测每个 IP 的 AMT 端口(16992, 16993, 623)
|
||
3. 使用默认凭据尝试连接
|
||
4. 获取设备详细信息
|
||
5. 实时显示进度
|
||
|
||
#### 步骤 3: 查看结果
|
||
- 扫描完成后自动切换到"设备列表"
|
||
- 显示所有发现的 AMT 设备
|
||
- 包含:IP、主机名、版本、配置状态
|
||
|
||
---
|
||
|
||
## 🔧 功能详解
|
||
|
||
### 📡 网络扫描
|
||
|
||
**支持的网络配置:**
|
||
- 单个 C 类网段:`192.168.1.0/24`
|
||
- 自定义子网:`10.0.0.0/16`
|
||
- 小型网络:`172.16.0.0/28`
|
||
|
||
**扫描过程:**
|
||
1. **端口检测** (3秒超时)
|
||
- HTTP: 16992
|
||
- HTTPS: 16993
|
||
- RMCP: 623
|
||
|
||
2. **设备识别**
|
||
- WS-Management Identify
|
||
- 获取 AMT 版本
|
||
- 获取配置状态
|
||
|
||
3. **信息收集**
|
||
- 主机名
|
||
- AMT 版本号
|
||
- 配置状态(PRE/IN/POST)
|
||
- 最后在线时间
|
||
|
||
**实时进度显示:**
|
||
- 已扫描 IP 数量
|
||
- 发现的设备数量
|
||
- 当前扫描的 IP
|
||
- 进度百分比
|
||
|
||
### 📋 设备列表
|
||
|
||
**显示信息:**
|
||
- IP 地址
|
||
- 主机名
|
||
- AMT 版本(主版本.次版本)
|
||
- 配置状态
|
||
- 在线状态
|
||
- 发现时间
|
||
- 最后在线时间
|
||
|
||
**操作功能:**
|
||
- 🔍 搜索设备(按 IP 或主机名)
|
||
- 🗑️ 删除设备
|
||
- 🔄 刷新列表
|
||
|
||
### 🔐 凭据管理
|
||
|
||
**默认凭据:**
|
||
- 用户名: `admin`
|
||
- 密码: `Guo1wu3shi4!`
|
||
- 状态: 默认凭据
|
||
|
||
**添加新凭据:**
|
||
1. 点击"添加凭据"
|
||
2. 填写信息:
|
||
- 名称(例如:机房A凭据)
|
||
- 用户名
|
||
- 密码
|
||
- 描述(可选)
|
||
3. 勾选"设为默认"(如果需要)
|
||
4. 点击"保存"
|
||
|
||
**管理凭据:**
|
||
- ✏️ 编辑凭据
|
||
- 🗑️ 删除凭据
|
||
- ⭐ 设置默认凭据
|
||
|
||
**注意事项:**
|
||
- 密码使用 Base64 加密存储
|
||
- 扫描时使用默认凭据
|
||
- 可以添加多个凭据备用
|
||
|
||
---
|
||
|
||
## 🎯 使用场景
|
||
|
||
### 场景 1: 机房设备盘点
|
||
```
|
||
目标:扫描整个机房网段,找出所有 AMT 设备
|
||
|
||
步骤:
|
||
1. 确定机房网段(如 192.168.8.0/24)
|
||
2. 在扫描页面输入网段和子网掩码
|
||
3. 点击"开始扫描"
|
||
4. 等待扫描完成(约 2-5 分钟)
|
||
5. 在设备列表查看所有发现的设备
|
||
6. 导出设备列表(功能待添加)
|
||
```
|
||
|
||
### 场景 2: 检查设备在线状态
|
||
```
|
||
目标:定期检查 AMT 设备是否在线
|
||
|
||
步骤:
|
||
1. 访问"设备列表"标签页
|
||
2. 查看"在线状态"列
|
||
3. 查看"最后在线时间"
|
||
4. 对离线设备进行排查
|
||
```
|
||
|
||
### 场景 3: 批量管理不同密码的设备
|
||
```
|
||
目标:管理使用不同密码的 AMT 设备
|
||
|
||
步骤:
|
||
1. 在"凭据管理"添加所有可能的密码
|
||
2. 设置最常用的为默认凭据
|
||
3. 扫描时系统会尝试所有凭据(功能待完善)
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 API 测试
|
||
|
||
### 使用 PowerShell 测试
|
||
|
||
#### 1. 测试单个设备连接
|
||
```powershell
|
||
# 测试 192.168.8.111
|
||
$result = Invoke-RestMethod -Uri "http://localhost:5000/api/test/test-connection/192.168.8.111" -Method GET
|
||
$result | Format-List
|
||
|
||
# 预期输出:
|
||
# ip : 192.168.8.111
|
||
# username : admin
|
||
# amtVersion : 9.0.20
|
||
# hostname : test
|
||
# provisioningState : 2
|
||
# provisioningStateName : POST
|
||
# success : True
|
||
```
|
||
|
||
#### 2. 获取所有设备
|
||
```powershell
|
||
$devices = Invoke-RestMethod -Uri "http://localhost:5000/api/devices" -Method GET
|
||
$devices | Format-Table
|
||
```
|
||
|
||
#### 3. 获取所有凭据
|
||
```powershell
|
||
$credentials = Invoke-RestMethod -Uri "http://localhost:5000/api/credentials" -Method GET
|
||
$credentials | Format-Table
|
||
```
|
||
|
||
#### 4. 添加新凭据
|
||
```powershell
|
||
$body = @{
|
||
name = "测试凭据"
|
||
username = "admin"
|
||
password = "NewPassword123!"
|
||
isDefault = $false
|
||
description = "测试用凭据"
|
||
} | ConvertTo-Json
|
||
|
||
Invoke-RestMethod -Uri "http://localhost:5000/api/credentials" -Method POST -Body $body -ContentType "application/json"
|
||
```
|
||
|
||
#### 5. 开始扫描
|
||
```powershell
|
||
$scanConfig = @{
|
||
networkSegment = "192.168.8.0"
|
||
subnetMask = "255.255.255.0"
|
||
} | ConvertTo-Json
|
||
|
||
$result = Invoke-RestMethod -Uri "http://localhost:5000/api/scan/start" -Method POST -Body $scanConfig -ContentType "application/json"
|
||
Write-Host "扫描任务 ID: $($result.taskId)"
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 故障排除
|
||
|
||
### 问题 1: 前端无法连接后端
|
||
**症状**: 前端显示网络错误
|
||
|
||
**解决方案**:
|
||
1. 检查后端是否运行:
|
||
```powershell
|
||
# 查看进程
|
||
Get-Process | Where-Object {$_.ProcessName -like "*dotnet*"}
|
||
```
|
||
|
||
2. 测试后端 API:
|
||
```powershell
|
||
Invoke-RestMethod -Uri "http://localhost:5000/api/credentials" -Method GET
|
||
```
|
||
|
||
3. 重启后端:
|
||
```powershell
|
||
cd backend-csharp/AmtScanner.Api
|
||
dotnet run
|
||
```
|
||
|
||
### 问题 2: 扫描无进度更新
|
||
**症状**: 点击开始扫描后没有进度显示
|
||
|
||
**可能原因**:
|
||
- SignalR 连接失败
|
||
- 浏览器控制台有错误
|
||
|
||
**解决方案**:
|
||
1. 打开浏览器控制台(F12)
|
||
2. 查看 Console 标签页的错误信息
|
||
3. 查看 Network 标签页的 WebSocket 连接
|
||
4. 刷新页面重试
|
||
|
||
### 问题 3: 无法连接 AMT 设备
|
||
**症状**: 扫描完成但没有发现设备
|
||
|
||
**检查清单**:
|
||
- [ ] 设备是否在同一网段?
|
||
- [ ] 设备是否开启了 AMT?
|
||
- [ ] 防火墙是否阻止了 16992 端口?
|
||
- [ ] 凭据是否正确?
|
||
|
||
**测试步骤**:
|
||
1. Ping 设备:
|
||
```powershell
|
||
ping 192.168.8.111
|
||
```
|
||
|
||
2. 测试端口:
|
||
```powershell
|
||
Test-NetConnection -ComputerName 192.168.8.111 -Port 16992
|
||
```
|
||
|
||
3. 浏览器访问:
|
||
```
|
||
http://192.168.8.111:16992
|
||
```
|
||
|
||
4. 使用测试 API:
|
||
```powershell
|
||
Invoke-RestMethod -Uri "http://localhost:5000/api/test/test-connection/192.168.8.111" -Method GET
|
||
```
|
||
|
||
### 问题 4: 数据库错误
|
||
**症状**: 后端日志显示数据库错误
|
||
|
||
**解决方案**:
|
||
1. 停止后端
|
||
2. 删除数据库文件:
|
||
```powershell
|
||
Remove-Item backend-csharp\AmtScanner.Api\amtscanner.db
|
||
```
|
||
3. 重启后端(会自动重新创建数据库)
|
||
|
||
### 问题 5: Intel SDK DLL 找不到
|
||
**症状**: 后端启动时报错找不到 Intel.Wsman.Scripting.dll
|
||
|
||
**解决方案**:
|
||
```powershell
|
||
Copy-Item "amt-sdk-20-0-0-1\WsmanLibModule\Bin\Intel.Wsman.Scripting.dll" "backend-csharp\AmtScanner.Api\bin\Debug\net8.0\"
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 性能优化
|
||
|
||
### 扫描速度优化
|
||
|
||
**当前配置**:
|
||
- 线程池大小: 100
|
||
- 端口超时: 3 秒
|
||
- 预计扫描时间: 2-5 分钟(254 个 IP)
|
||
|
||
**调整配置**:
|
||
编辑 `backend-csharp/AmtScanner.Api/appsettings.json`:
|
||
```json
|
||
{
|
||
"Scanner": {
|
||
"ThreadPoolSize": 200, // 增加并发数
|
||
"TimeoutSeconds": 2 // 减少超时时间
|
||
}
|
||
}
|
||
```
|
||
|
||
**注意**:
|
||
- 线程数过高可能导致网络拥塞
|
||
- 超时时间过短可能漏检设备
|
||
|
||
---
|
||
|
||
## 🔒 安全建议
|
||
|
||
1. **密码管理**
|
||
- 定期更换 AMT 密码
|
||
- 使用强密码(至少 8 位,包含大小写字母、数字、特殊字符)
|
||
- 不要在多个设备使用相同密码
|
||
|
||
2. **网络隔离**
|
||
- 将 AMT 管理网络与业务网络隔离
|
||
- 使用防火墙限制访问
|
||
- 只允许管理员 IP 访问
|
||
|
||
3. **访问控制**
|
||
- 限制扫描器的访问权限
|
||
- 记录所有扫描操作
|
||
- 定期审计设备列表
|
||
|
||
---
|
||
|
||
## 📝 下一步计划
|
||
|
||
### 待添加功能
|
||
- [ ] 导出设备列表(Excel/CSV)
|
||
- [ ] 设备分组管理
|
||
- [ ] 定时自动扫描
|
||
- [ ] 设备状态变化告警
|
||
- [ ] 批量操作(重启、关机等)
|
||
- [ ] 设备详情页面
|
||
- [ ] 扫描历史记录
|
||
- [ ] 用户权限管理
|
||
|
||
---
|
||
|
||
## 💡 提示和技巧
|
||
|
||
1. **快速测试单个设备**
|
||
- 使用测试 API 而不是完整扫描
|
||
- 节省时间,快速验证
|
||
|
||
2. **批量扫描多个网段**
|
||
- 可以多次运行扫描
|
||
- 结果会自动合并到设备列表
|
||
|
||
3. **查看实时日志**
|
||
- 后端控制台显示详细日志
|
||
- 帮助诊断问题
|
||
|
||
4. **使用浏览器书签**
|
||
- 收藏常用页面
|
||
- 快速访问系统
|
||
|
||
---
|
||
|
||
## 📞 获取帮助
|
||
|
||
如果遇到问题:
|
||
|
||
1. **查看日志**
|
||
- 后端控制台日志
|
||
- 浏览器控制台(F12)
|
||
|
||
2. **检查配置**
|
||
- API 地址是否正确
|
||
- 凭据是否有效
|
||
|
||
3. **测试连接**
|
||
- 使用 PowerShell 测试 API
|
||
- 使用浏览器访问设备
|
||
|
||
4. **重启服务**
|
||
- 重启后端和前端
|
||
- 清除浏览器缓存
|
||
|
||
---
|
||
|
||
## 🎓 技术栈
|
||
|
||
- **后端**: ASP.NET Core 8.0 + Intel AMT SDK
|
||
- **前端**: Vue 3 + Element Plus
|
||
- **数据库**: SQLite + Entity Framework Core
|
||
- **实时通信**: SignalR
|
||
- **认证**: Digest Authentication (Intel SDK)
|
||
|
||
---
|
||
|
||
**系统版本**: 1.0.0
|
||
**最后更新**: 2026-01-19
|
||
**状态**: ✅ 生产就绪
|