fladnaG86/NetScope

GitHub: fladnaG86/NetScope

一款原生 macOS SwiftUI 网络扫描器,集设备发现、端口扫描、实时链路质量监测与网络诊断于一体。

Stars: 0 | Forks: 0

image Screenshot 2026-06-17 alle 18 54 13 # 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, 云存储安全, 情报分析, 数据统计, 端口扫描, 网络扫描, 网络诊断, 设备发现