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

# prowl
[](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, 云存储安全, 可视化界面, 局域网, 插件系统, 数据统计, 特征检测, 端口扫描, 网络扫描, 网络流量审计, 通知系统