sxlmwn/network-scanner
GitHub: sxlmwn/network-scanner
一款基于Nmap的全栈WiFi网络扫描仪表盘,可实时发现并展示局域网设备信息、端口状态和地理位置,适合网络资产可视化监控。
Stars: 0 | Forks: 0
# 🛡️ 网络扫描仪仪表盘
一款全栈网络安全工具,可扫描您的本地 WiFi 网络,显示连接的设备、开放的端口,并在交互式地图上绘制地理位置数据。
## 🚀 功能
- **真实网络扫描**:使用 Nmap 发现网络上的所有连接设备
- **设备详情**:显示 IP、MAC 地址、主机名、制造商和设备类型
- **端口扫描**:扫描任何设备上的开放端口并进行风险评估
- **地理位置映射**:在交互式世界地图上标绘设备
- **实时终端日志**:实时显示扫描活动的黑客风格终端
- **设备警报**:当新设备或未知设备加入网络时即时发出通知
- **事件历史**:记录所有设备连接和断开连接的完整日志
- **暗色黑客主题**:带有霓虹绿色点缀的专业网络安全美学界面
## 🗂️ 项目结构
```
network-scanner/
├── backend/ # Python FastAPI backend
│ ├── main.py # FastAPI app with WebSocket support
│ ├── scanner.py # Nmap scanning logic & device detection
│ ├── geolocation.py # IP geolocation service
│ ├── monitor.py # Background monitoring thread
│ ├── database.py # SQLite database manager
│ ├── models.py # Pydantic data models
│ └── requirements.txt # Python dependencies
│
└── frontend/ # React + Vite frontend
├── src/
│ ├── App.jsx # Main app component
│ ├── main.jsx # React entry point
│ ├── components/
│ │ ├── Dashboard.jsx # Main layout
│ │ ├── DeviceGrid.jsx # Device list
│ │ ├── DeviceCard.jsx # Individual device
│ │ ├── PortScanner.jsx # Port scan modal
│ │ ├── TerminalLog.jsx # Live terminal
│ │ ├── AlertBanner.jsx # New device alerts
│ │ ├── HistoryLog.jsx # Event history
│ │ └── GeoMap.jsx # Leaflet map
│ └── styles/
│ └── globals.css # Tailwind + custom styles
├── index.html
├── vite.config.js
├── tailwind.config.js
├── postcss.config.js
└── package.json
```
## ⚙️ 技术栈
| 组件 | 技术 |
|-----------|-----------|
| 后端 | Python, FastAPI, Uvicorn |
| 网络扫描 | python-nmap (Nmap 封装库) |
| 地理位置 | ip-api.com (免费,无需 API 密钥) |
| 数据库 | SQLite3 |
| 实时通信 | WebSockets |
| 前端 | React 18, Vite |
| 样式 | Tailwind CSS 3 |
| 地图 | Leaflet.js + React-Leaflet |
| 图标 | Lucide React |
## 📋 系统要求
### 系统要求
- **Nmap**:必须安装在您的系统上
- **Windows**:从 [nmap.org](https://nmap.org/download.html) 下载
- **macOS**:`brew install nmap`
- **Linux**:`sudo apt install nmap` (Ubuntu/Debian) 或等效命令
- **Python 3.8+**
- **Node.js 16+** 和 npm
### 权限
- **需要管理员/Sudo 权限**才能进行网络扫描(Nmap 需要提升的权限)
## 🚀 安装与设置
### 1. 安装 Nmap (系统级)
**Windows:**
- 从 https://nmap.org/download.html 下载安装程序
- 运行安装程序并按照提示操作
**macOS:**
```
brew install nmap
```
**Linux (Ubuntu/Debian):**
```
sudo apt update
sudo apt install nmap
```
**Linux (Fedora/RHEL):**
```
sudo dnf install nmap
```
验证安装:
```
nmap --version
```
### 2. 后端设置
```
# 导航到 backend 目录
cd backend
# 创建 virtual environment(推荐)
python -m venv venv
# 激活 virtual environment
# 在 macOS/Linux 上:
source venv/bin/activate
# 在 Windows 上:
venv\Scripts\activate
# 安装 Python 依赖
pip install -r requirements.txt
```
### 3. 前端设置
```
# 导航到 frontend 目录
cd frontend
# 安装 Node 依赖
npm install
# 构建或运行 development server
npm run dev # Development mode with hot reload
# 或
npm run build # Production build
```
## 🎯 运行应用程序
### 终端 1:启动后端 (使用 sudo)
```
cd backend
# 激活 virtual environment(如果尚未激活)
source venv/bin/activate # or venv\Scripts\activate on Windows
# 使用 sudo 运行(Nmap 获取 MAC 地址需要)
sudo python main.py
# 或者如果 python 不在 PATH 中
sudo python3 main.py
```
您应该会看到:
```
╔════════════════════════════════════╗
║ Network Scanner Dashboard API ║
║ FastAPI Server ║
╚════════════════════════════════════╝
Starting server on http://0.0.0.0:8000
WebSocket: ws://localhost:8000/ws/live
```
### 终端 2:启动前端
```
cd frontend
npm run dev
```
您应该会看到:
```
VITE v5.0.0 ready in 123 ms
➜ Local: http://localhost:5173/
➜ press h to show help
```
### 3. 在浏览器中打开
打开浏览器并访问:
```
http://localhost:5173
```
仪表盘将显示您网络上已连接的设备!
## 📡 API 接口
### REST 接口
```
GET /api/devices - Get all connected devices
GET /api/devices/{ip}/ports - Scan open ports on device
GET /api/history - Get connection history
GET /api/logs - Get terminal logs
GET /api/stats - Get network statistics
GET /api/rescan - Manually trigger network scan
```
### WebSocket 接口
```
WS /ws/live - Real-time updates and alerts
```
## 🔒 安全说明
- ✅ **100% 本地化**:所有扫描均在您的机器上进行。除了地理位置查询外,不会向外部服务器发送任何数据。
- ✅ **免费**:无需 API 密钥,无需订阅,无需云服务。
- ✅ **开源**:完全透明的源代码。
- ⚠️ **需要管理员权限**:网络扫描需要管理员/sudo 权限(MAC 地址检测所必需)。
- ⚠️ **仅扫描您拥有的网络**:未经授权的网络扫描可能是非法的。
## 🔧 故障排除
### "Nmap not found" 错误
- **解决方法**:在您的系统上安装 Nmap(参见上文的安装部分)
- 验证:在终端中运行 `nmap --version`
### "Permission denied" 错误
- **解决方法**:使用 sudo 运行后端:`sudo python main.py`
- Nmap 执行 ARP 扫描和 MAC 地址检测需要提升的权限
### "Port 8000 already in use" (端口 8000 已被占用)
- **解决方法**:更改 `backend/main.py` 中的端口或终止占用 8000 端口的进程
- 或者编辑 main.py 文件中的端口
### "Port 5173 already in use" (端口 5173 已被占用)
- **解决方法**:更改 `frontend/vite.config.js` 中的端口
- 或者终止占用 5173 端口的进程
### WebSocket 连接失败
- **解决方法**:确保后端以正确的 URL 运行
- 如果在不同域上运行,请检查 CORS 设置
- 验证防火墙没有阻止 WebSocket 连接
### 未发现设备
- **解决方法**:
- 确保您的设备已连接到同一 WiFi 网络
- 点击刷新按钮进行手动重新扫描
- 检查您的 WiFi 网络是否支持 ARP 扫描
- 尝试使用不同的网络接口运行
## 📊 数据库
该应用程序创建一个 SQLite 数据库 (`backend/network_scanner.db`),包含:
- **devices** 表:网络上的所有已知设备
- **history** 表:连接/断开连接事件
- **logs** 表:终端日志条目
- **geo_cache** 表:缓存的地理位置数据
数据库将在首次运行时自动创建。
## 🎨 自定义
### 更改扫描间隔
编辑 `backend/monitor.py`,在 `monitor = NetworkMonitor(scan_interval=30)` 行
### 更改要扫描的端口
编辑 `backend/scanner.py`,在 `scan_ports()` 方法中:
```
arguments='-p 20-23,25,53,80,110,143,443...'
```
### 自定义主题
编辑 `frontend/tailwind.config.js` 以更改颜色、字体、动画
### 更改地图图块
编辑 `frontend/src/components/GeoMap.jsx`,修改 TileLayer URL 以使用不同的地图提供商
## 🐛 已知限制
1. **MAC 地址检测**:仅在具有管理员/sudo 权限时可用
2. **端口扫描速度**:根据网络情况,完整的端口扫描可能需要 30 秒以上
3. **地理位置**:准确性取决于 IP 地理位置数据库(通常为城市级别)
4. **私有 IP**:本地网络设备在地图上显示为“Local Network”
5. **扫描间隔**:默认为 30 秒(可在代码中调整)
## 📝 许可证
本项目为开源项目,可免费用于教育和个人用途。
## ⚡ 性能提示
- 如果希望更快地检测到变化,可以缩短扫描间隔
- 限制端口范围以加快端口扫描速度
- 扫描仪机器使用有线连接以获得最佳效果
- 关闭不必要的浏览器标签页以提高 UI 响应速度
- 保持 Nmap 更新以获得最佳网络覆盖
## 🆘 获取帮助
如果您遇到问题:
1. 检查终端输出中的错误消息
2. 验证 Nmap 是否已安装:`nmap --version`
3. 确保您拥有管理员权限
4. 尝试通过仪表盘进行手动重新扫描
5. 检查防火墙设置
## 🚀 未来增强功能
未来版本的潜在功能:
- 设备认证与封锁
- 网络流量分析
- 设备漏洞扫描
- 自定义警报和通知
- 导出扫描报告
- 多子网扫描
- Wake-on-LAN 功能
- 网络拓扑可视化
- 设备分组和标记
**用 ❤️ 为网络安全爱好者构建**
标签:AMSI绕过, AV绕过, FastAPI, MAC地址扫描, Nmap, Python, React, SQLite, Syscalls, Vite, WebSocket, Web安全, WiFi扫描, 仪表盘, 依赖分析, 前后端分离, 可视化大屏, 地理定位, 威胁检测, 局域网扫描, 开源安全工具, 插件系统, 攻击路径可视化, 数据统计, 无后门, 无线安全, 检测规则, 端口扫描, 网络安全, 网络资产发现, 蓝队分析, 虚拟驱动器, 设备发现, 逆向工具, 逆向工程平台, 隐私保护, 黑客工具