100arab/PortsScanner
GitHub: 100arab/PortsScanner
一款分离架构的网络端口扫描与攻击检测工具,通过 Go 后端并发扫描与 PyQt5 暗色 GUI 实现可视化端口监控、实时告警和防火墙联动防御。
Stars: 0 | Forks: 0
# Port Guardian — 网络扫描与攻击检测器
一款采用分离架构的安全工具:
- **Go backend** — 高性能并发端口扫描器、7 信号攻击检测引擎、OS 防火墙控制器、REST + WebSocket API
- **Python GUI** — 高级暗色主题 PyQt5 客户端,配备实时警报控制台、可排序端口表和防火墙控制按钮
## 环境要求
| 组件 | 版本 |
|-----------|---------|
| Go | 1.21+ |
| Python | 3.9+ |
| OS | Windows 10/11 (主要),Linux (次要) |
| 权限 | **Administrator / root**(控制防火墙需具备此权限) |
## 快速开始 (Windows)
```
Right-click run.bat → Run as Administrator
```
此操作将:
1. 构建 Go backend (`go build`)
2. 安装 Python 依赖 (`pip install -r requirements.txt`)
3. 启动 GUI(将自动启动 backend)
## 手动构建
### Go 后端
```
cd backend
go mod tidy # download dependencies
go build -o portscanner.exe .
.\portscanner.exe # runs on localhost:8787
```
### Python GUI
```
pip install -r requirements.txt
python gui\main.py
```
## 架构
```
Python GUI (PyQt5) ←──HTTP/WebSocket──→ Go Backend (:8787)
│
┌───────┴────────┐
Port Scanner Firewall Control
Attack Detector (netsh / ufw)
config.json
```
## API 参考
| Method | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/status` | 主机名、IP、打开/关闭计数、防火墙状态 |
| GET | `/ports` | 完整端口表(缓存) |
| POST | `/scan/local` | 触发本地端口枚举 |
| POST | `/scan/remote` | `{"host":"…","port_range":"1-1024"}` — TCP connect 扫描 |
| GET | `/alerts` | 警报历史记录(最近 500 条) |
| WS | `/ws/alerts` | 实时警报流 |
| POST | `/firewall/disable` | 阻断所有入站流量 |
| POST | `/firewall/restore` | 移除阻断所有规则 |
| POST | `/firewall/set-default` | 将当前端口保存为受信任的 baseline |
| GET/POST | `/settings` | 检测阈值 + 自动响应开关 |
| POST | `/consent/remote` | `{"consented":true}` — 启用远程扫描模式 |
## 检测信号
| # | 信号 | 数据来源 | 默认阈值 |
|---|--------|-------------|-------------------|
| 1 | 水平端口扫描 | 模拟事件流 | 15 端口 / 10 秒 |
| 2 | 垂直(子网)扫描 | 模拟 | 10 主机 / 30 秒 |
| 3 | 连接洪泛 | 模拟 | 50 连接/秒 |
| 4 | Baseline 偏移 | **真实**(端口表轮询) | 任意新端口 |
| 5 | 开启可疑端口 | **真实**(端口表轮询) | 预定义列表 |
| 6 | 暴力破解模式 | 模拟 | 20 次失败 / 60 秒 |
| 7 | 可配置阈值 | 所有信号 | 通过 `/settings` |
## 文件
```
portscanner/
├── backend/
│ ├── main.go # entry point, wiring
│ ├── go.mod
│ ├── store/store.go # types + JSON persistence
│ ├── scanner/
│ │ ├── scanner.go # PortEntry, LocalIPs, ParsePortRange
│ │ ├── local_windows.go # GetExtendedTcpTable syscall
│ │ ├── local_linux.go # /proc/net/tcp parsing
│ │ └── remote.go # TCP connect scan (500 goroutines)
│ ├── detector/engine.go # 7-signal detection + simulation
│ ├── firewall/
│ │ ├── firewall.go # Controller interface
│ │ ├── windows.go # netsh implementation
│ │ └── linux.go # ufw / iptables implementation
│ └── api/
│ ├── rest.go # all HTTP handlers
│ └── websocket.go # broadcast hub
├── gui/
│ ├── main.py # entry: splash, backend launch, window
│ ├── main_window.py # QMainWindow assembly + refresh timer
│ ├── client.py # REST + WebSocket client
│ └── widgets/
│ ├── header.py # hostname/IP/scan controls
│ ├── summary.py # stat cards + firewall badge
│ ├── port_table.py # sortable/filterable QTableView
│ ├── alert_console.py # live HTML feed + HIGH banner
│ ├── firewall_buttons.py # 3 control buttons
│ └── settings_panel.py # thresholds + toggles
├── config.json # auto-created on first run
├── requirements.txt
└── run.bat # Windows one-click launcher
```
标签:日志审计, 逆向工具