fladnaG86/NetScope
GitHub: fladnaG86/NetScope
一款原生 macOS SwiftUI 网络扫描器,集设备发现、端口扫描、实时链路质量监测与网络诊断于一体。
Stars: 0 | Forks: 0
# NetScope
一款使用 SwiftUI 构建的原生 macOS 网络扫描器。发现本地网络上的设备、扫描端口、实时测量链路质量并运行网络诊断——所有这些都在一个 Mac 应用中完成。
## 功能
### 网络发现
- 跨 IP 范围、CIDR 或单个主机的 **Ping 扫描**
- 用于获取 MAC 地址的 **ARP 表解析**(在 Ping 扫描后批量读取 `arp -a`)
- 用于获取主机名的 **DNS 反向查找**
- **MAC 厂商**识别 (OUI)
- **端口扫描**(Deep 模式下包含 18 个常用端口)
- **Quick**(Ping + ARP + DNS)和 **Deep**(增加端口扫描)扫描模式
- 通过 `getifaddrs` **自动检测子网**(无硬编码范围)
### 实时指标
- 每台设备的延迟、抖动、丢包率
- 综合质量评分(考量丢包率因素)
- 扫描期间的实时进度
### 诊断(针对每台设备及独立运行)
- Traceroute
- MTU 发现
- 带宽测试(需要 `iperf3`;缺失时回退至占位符)
- DNS 查找 + 诊断
- 延迟 / 抖动视图
- 所有端口视图
### UI
- 用于设备和端口的可排序、可筛选的 SwiftUI `Table`
- 包含 4 个标签页(概述、端口、指标、诊断)的设备详情
- 独立诊断窗口
- 支持英语 / 意大利语切换的设置
### 导出与持久化
- 将结果导出为 **CSV**、**JSON** 或 **HTML**
- 通过 GRDB 进行 SQLite 持久化(设备 + 指标历史,WAL 模式)
## 系统要求
- macOS 14.0+ (Sonoma / Sequoia)
- Xcode 16+(本项目使用 Xcode-beta 构建)— 如有需要,请运行 `sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer`
- [XcodeGen](https://github.com/yonaskolb/XcodeGen) (`brew install xcodegen`)
- Homebrew(用于安装 `gh`、`xcodegen`)
## 构建与运行
**务必构建 `.app` 包并通过 `open` 命令启动。** 请勿直接运行原始的 SPM 可执行文件——从终端启动的原始可执行文件不会被注册为关键的 GUI 应用,因此虽然窗口会出现,但按键操作永远无法到达文本输入框。
```
bash build.sh
open ./DerivedData/Build/Products/Debug/NetScope.app
```
`build.sh` 会运行 `xcodegen generate`、`xcodebuild`(生成 `NetScope.app`),并使用网络权限对包进行临时代码签名。
## 测试
```
swift test
```
76 项测试,涵盖数据库、存储库、视图模型、actor、控制器和服务(包含基于协议的 mock)。集成测试会运行真实的 ping/ARP/DNS 操作。
## 架构
- **SwiftUI** + **@Observable** 视图模型(无 Combine)
- **Actor** 用于共享可变状态(`ScanStateActor`、`DeviceCacheActor`、`MetricsCollectorActor`)
- **async/await** 用于所有 I/O 服务(ping、ARP、DNS、端口、traceroute、MTU、带宽)
- **基于协议的依赖注入** — 零单例;在 `@main` 应用入口点进行组装
- **GRDB.swift 7** 用于 SQLite(测试使用内存模式,生产环境使用 WAL 模式)
- **Network.framework** + shell 进程辅助工具(`AsyncProcess` — 具有基于 continuation 的 `waitUntilExit` 的非阻塞式 `Process`)
- **Swift Charts** 用于指标展示
### 项目结构
```
Sources/NetScope/
App/ @main entry point, DI wiring
Models/ Device, PortInfo, NetworkMetrics, NetworkInterface, ScanMode, Errors
Actors/ ScanState, DeviceCache, MetricsCollector
Controllers/ Scan, Metrics, Export
ViewModels/ DeviceList, DeviceDetail, ScanConfig, Settings
Views/ MainWindow, Sidebar, DeviceList, DeviceDetail, Settings, Standalone diagnostics
Services/ Network/, Diagnostics/, Export/, Config/
Database/ DatabaseManager + repositories (GRDB)
Tests/NetScopeTests/
```
## 已知限制
- String Catalog 本地化尚未连接(代码中为英文字符串)
- 未内置 OUI 数据库(MAC 厂商识别会平滑降级)
- 带宽测试需要在目标机器上安装 `iperf3`
- 无持续监控(已刻意排除)
- 子网扫描静默限制在 1024 台主机
- 侧边栏诊断作为独立窗口实现
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
## 致谢
- [GRDB.swift](https://github.com/groue/GRDB.swift) — SQLite 工具包标签:SwiftUI, 云存储安全, 情报分析, 数据统计, 端口扫描, 网络扫描, 网络诊断, 设备发现