TomiXRM/prowl

GitHub: TomiXRM/prowl

一款无需 root 权限的 Rust 局域网扫描工具,支持 TUI/Web/GUI 多前端,可发现设备、解析厂商与主机名、扫描端口并持续监控设备在线状态。

Stars: 0 | Forks: 0

prowl # prowl [![CI](https://github.com/TomiXRM/prowl/actions/workflows/ci.yml/badge.svg)](https://github.com/TomiXRM/prowl/actions/workflows/ci.yml) **一款无需 sudo 的 TUI / Web / GUI 局域网扫描工具,使用 Rust 编写。**
一款无需权限即可快速列出当前网络中已连接设备的 TUI / Web / GUI 工具。 `prowl` 能够发现局域网内的设备,并在同一界面展示 **IP / MAC / 供应商 / 主机名 / 开放端口**, 此外还支持**持续存活监控**,通过颜色变化提示新增/离线设备。与 `nmap` 或 `arp-scan` 不同,它不需要 root 权限。 ## 特性 - 🔓 **无需权限** — 通过 UDP 诱导与读取 OS 邻居表获取主机/MAC(不使用 raw socket) - 🏷 **完整的 OUI 供应商数据库** — 从 MAC 地址解析制造商(支持 MA-L/M/S,内置数据库) - 🔎 **名称解析链** — 通过 OS 解析器(getnameinfo) → mDNS → NetBIOS 进行尽力解析 - 🚪 **端口/服务扫描** — 通过 TCP connect 扫描选定主机,获取服务名称及 Banner - 📡 **持续监控** — 按固定间隔自动重新扫描,并用颜色高亮显示 **新增=绿色 / 离线=红色** - 🖥 **TUI** — 基于 `ratatui` 构建,异步执行,UI 不会卡顿 - 🧩 **易于扩展的设计** — 发现/信息丰富/扫描/前端均可通过 trait 进行替换 ## 操作说明 | 按键 | 动作 | |---|---| | `↑` `↓` / `j` `k` | 选择主机 | | `Enter` / `s` | 对选定的主机进行端口扫描 | | `m` | 开启/关闭持续监控 | | `r` | 手动重新扫描 | | `/` | 筛选(IP/MAC/供应商/名称) | | `q` | 退出 | 图例: ` ` 在线 / `+` 新增(绿色) / `×` 离线(红色) ## 构建与运行 ``` git clone https://github.com/TomiXRM/prowl cd prowl cargo run # TUI 起動(root 不要) cargo run -- --web # Web UI 起動 → http://127.0.0.1:7878 cargo run -- --web --mock # 実NW非依存の決定論モード(デモ/テスト用) ``` ``` cargo build --release # 単一バイナリ → target/release/prowl cargo test --workspace # Rust テスト ``` 支持环境: macOS (Apple Silicon / Intel) + Linux (x86_64 / arm64),Rust 1.96+。 ### 下载版本([Releases](https://github.com/TomiXRM/prowl/releases)) | 操作系统 | 文件 | |---|---| | macOS (Apple Silicon) | `prowl--arm64.dmg` | | Linux (x86_64) | `prowl--x86_64.tar.gz` | ## 更新(自我替换) ``` prowl --check-update # 最新リリースがあるか確認するだけ prowl --update # 確認 → DL → SHA-256検証 → バイナリ/.app 差し替え → 再起動 ``` 在 GUI(GPUI) 中,程序启动时会在后台进行检查,如果有新版本,头部会显示 **“⬆ 更新至 vX.Y.Z”** 的横幅。 下载过程通过 HTTPS 和 SHA-256 进行验证,替换操作是原子性的(失败时保留当前版本)。 如果通过自我更新机制进行,由于不会被标记为 quarantined,因此**即使是 ad-hoc 签名也能无警告地更新**。 (关于签名与公证的机制,请参阅 [`docs/RELEASING.md`](./docs/RELEASING.md)) ### Web UI 与可运行 AI 的 e2e 测试 使用 `--web` 可将相同的引擎映射到**浏览器(DOM)**中(与 TUI 共享相同的 `Command`/`AppState` 契约)。 因为是 DOM,所以可以通过 **Playwright** 进行端到端验证,结合 `--mock` 使用,即可在没有实际局域网的情况下进行确定性的测试: ``` cd e2e && npm ci && npx playwright install chromium && npx playwright test ``` ## 原理(简述) ``` 提示の軸(外側) TUI(ratatui) / Web(DOM, WebSocket) / GPUI(将来) │ Command(操作)↓ / AppState(状態)↑ ← UI非依存の契約 (prowl-app) prowl-core (エンジン) │ Discovery / Enricher / PortScanner トレイト データの軸(内側) 発見(近隣テーブル/ARP)・名前(DNS/mDNS/NetBIOS)・OUI・ポートスキャン ``` | Crate | 作用 | |---|---| | `prowl-app` | 不依赖 UI 的契约(`Command`/`AppState`/`Frontend`) | | `prowl-core` | 扫描引擎及各 trait 的实现(不依赖 UI,可进行单元测试) | | `prowl-tui` | `ratatui` 前端 | | `prowl-web` | Web(DOM) 前端(axum + WebSocket,可通过 Playwright 验证) | | `prowl-update` | 自我更新(domain 纯净层 + io 层,SHA-256 验证,原子替换) | | `prowl` | 包含装配逻辑并启动前端的轻量级二进制程序 | 扩展示例: - 添加 IPv6 发现 → 实现 `Discovery` 并注册(现有 ARP 无需修改) - 添加 OS 指纹识别/服务探测 → 添加 `Enricher` / `PortScanner` - 添加 GUI → 实现 `Frontend`(设计原则为各前端自带独立的 runtime) 有关设计和需求的详细信息,请参阅 [`REQUIREMENTS.md`](./REQUIREMENTS.md)。 ## 路线图 - [x] Web(DOM) 前端 + Playwright e2e - [x] GPUI 原生前端(longbridge gpui-component) - [x] 自我更新(从 GitHub Releases 替换二进制文件/.app,SHA-256 验证) - [x] macOS 签名/公证流水线(基于 secret 驱动,支持 ad-hoc 回退) - [ ] OS 指纹识别(TTL/开放端口特征) - [ ] JSON / CSV 导出 - [ ] mDNS 服务浏览(增强名称和型号信息) - [ ] sudo 模式(通过 ARP/SYN 扫描实现高速、高精度化) - [ ] IPv6 支持 ## 许可证 MIT — 详见 [LICENSE](./LICENSE).
标签:Rust, TUI, 云存储安全, 可视化界面, 局域网, 插件系统, 数据统计, 特征检测, 端口扫描, 网络扫描, 网络流量审计, 通知系统