yetidevworks/yscan

GitHub: yetidevworks/yscan

一款 TUI 优先的本地网络设备发现与端口扫描器,通过多协议并行探测实现局域网设备的实时可视化盘点。

Stars: 5 | Forks: 3

# YScan ``` _____.___. _________ \__ | |/ _____/ ____ _____ ____ / | |\_____ \_/ ___\\__ \ / \ \____ |/ \ \___ / __ \| | \ / ______/_______ /\___ >____ /___| / \/ \/ \/ \/ \/ Network discovery made easy! ``` ![YScan 截图](https://static.pigsec.cn/wp-content/uploads/repos/cas/2c/2c594f13d1771537acc709352a2aa658ffa8bd64b60fafb7744fc0b459e4b84a.png) 一款 TUI 优先的网络扫描器,通过 ARP、mDNS、SSDP 和主机名探测来发现本地网络上的设备。在一个实时、可排序、可搜索的仪表板中查看所有设备——并附带名称和标识。 **支持的平台:** macOS 和 Linux ## 功能 - **TUI 仪表板** — 包含所有已发现设备的交互式表格,支持实时更新 - **多协议发现** — ARP 扫描、mDNS 服务浏览、SSDP/UPnP、反向 DNS 以及 HTTP banner 检测 - **自动识别** — 解析主机名、制造商名称(通过 OUI)以及服务类型 - **主机名探测** — 通过反向 DNS 和 HTTP banner 探测未命名设备(可识别 Proxmox、TrueNAS、Pi-hole、UniFi 等) - **端口扫描** — 随时对任何设备进行按需端口扫描,涵盖 29 个常用端口 - **排序与过滤** — 支持按任意列排序,并可跨 IP、名称、MAC 和制造商进行搜索 - **剪贴板支持** — 只需一键即可复制 IP 或 MAC 地址 - **8 种颜色主题** — Dark、Light、Dracula、Nord、One Dark、Monokai Pro、Tokyo Night、Synthwave — 按下 `t` 实时切换,您的选择会自动保存 - **Oneshot 模式** — 单次扫描并输出表格或 JSON 格式,方便编写脚本 - **定期重新扫描** — 以可配置的间隔进行持续的后台扫描 ## 安装说明 ### Homebrew(推荐) ``` brew install yetidevworks/yscan/yscan ``` ### 通过 crates.io 安装 ``` cargo install yscan ``` ### 通过源码安装 ``` git clone https://github.com/yetidevworks/yscan cd yscan cargo install --path . ``` ### 预编译二进制文件 从 [GitHub Releases](https://github.com/yetidevworks/yscan/releases) 下载。 ## 快速开始 ``` # 打开 TUI 仪表板(推荐:使用 sudo 运行以进行 ARP 扫描) sudo yscan # 一次性扫描输出到 stdout sudo yscan scan # 用于脚本编写的 JSON 输出 sudo yscan scan --json # 使用特定的网络接口 sudo yscan -i en0 # 以特定主题启动,或在 TUI 中按 't' 循环切换(自动保存) yscan --theme tokyo-night ``` ## TUI 仪表板 直接运行不带任何参数的 `yscan` 命令即可打开交互式仪表板: ``` ┌─ YScan | 12 devices | 192.168.1.0/24 | elevated | ⠹ Scanning network... ───┐ │ │ │ IP Address Name MAC Address Manufacturer │ │ ───────────────────────────────────────────────────────────────────────── │ │ 192.168.1.1 router.local aa:bb:cc:dd:ee:ff Ubiquiti │ │▸ 192.168.1.10 NAS.local 11:22:33:44:55:66 Synology │ │ 192.168.1.20 Proxmox VE 77:88:99:aa:bb:cc Intel │ │ 192.168.1.30 Living Room TV dd:ee:ff:00:11:22 Samsung │ │ 192.168.1.45 pi-hole.local 33:44:55:66:77:88 Raspberry Pi │ │ 192.168.1.100 - 99:aa:bb:cc:dd:ee Apple │ │ │ ├─ Activity ─────────────────────────────────────────────────────────────────┤ │ 10:30:15 Discovered router.local (192.168.1.1) │ │ 10:30:16 Discovered NAS.local (192.168.1.10) │ │ 10:30:17 Scan complete - 12 devices │ ├────────────────────────────────────────────────────────────────────────────┤ │ [/]search [s]ort [p]ort scan [y]ank IP [a]ctivity [r]escan [?]help [q]uit │ └────────────────────────────────────────────────────────────────────────────┘ ``` ### 快捷键 | 按键 | 操作 | |-----|--------| | `j` / `k` / `↑` / `↓` | 浏览设备列表 | | `g` / `G` | 跳转至首个 / 末个设备 | | `PageUp` / `PageDown` | 按页滚动 | | `Enter` | 打开设备详情视图 | | `/` | 搜索 / 过滤设备 | | `s` | 循环切换排序列 (IP → 名称 → MAC → 制造商 → 最后发现时间) | | `S` | 切换排序方式 (升序 / 降序) | | `p` | 对选中设备进行端口扫描 | | `y` | 复制 IP 地址到剪贴板 | | `Y` | 复制 MAC 地址到剪贴板 | | `a` | 切换活动日志面板 | | `t` | 循环切换颜色主题 (自动保存) | | `r` | 触发手动重新扫描 | | `?` | 显示帮助悬浮窗 | | `q` / `Esc` | 退出 (或清除搜索过滤器) | | `Ctrl+C` | 强制退出 | | `Ctrl+Z` | 挂起到后台 (Unix) | ### 详情视图 在任意设备上按下 `Enter` 键即可查看完整详情,包括: - IP 地址和 MAC 地址 - 主机名和 mDNS 名称 - 制造商(通过 IEEE OUI 数据库) - 发现来源(ARP、mDNS、SSDP、DNS) - 开放端口及其服务名称 - 首次发现和最后发现的时间戳 - 来自 mDNS/SSDP 的额外元数据 ## 工作原理 YScan 并行使用多种发现协议,然后根据 IP 地址合并结果: ``` ┌────────────────────────────────────────────────────────────────┐ │ Discovery Engine │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────────────────┐ │ │ │ ARP │ │ mDNS │ │ SSDP │ │ Hostname Probe │ │ │ │ sweep │ │ browse │ │ search │ │ (reverse DNS + │ │ │ │ │ │ │ │ │ │ HTTP banners) │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────────┬──────────┘ │ │ │ │ │ │ │ │ └────────────┴────────────┴────────────────┘ │ │ │ │ │ Merge by IP address │ │ │ │ │ ┌───────▼───────┐ │ │ │ Device Map │ │ │ └───────┬───────┘ │ │ │ │ └────────────────────────────┼───────────────────────────────────┘ │ ┌───────▼───────┐ │ TUI / CLI │ └───────────────┘ ``` ### 发现协议 | 协议 | 发现目标 | 需要 sudo? | |----------|---------------|----------------| | **ARP** | 子网上的所有设备 (IP + MAC + 通过 OUI 获取的制造商) | 是 (用于主动扫描) | | **mDNS** | 发布服务的设备 (打印机、智能家居、NAS 等) | 否 | | **SSDP** | UPnP 设备 (路由器、媒体服务器、智能电视) | 否 | | **Hostname** | 未命名设备的反向 DNS 名称 + HTTP banner 识别 | 否 | ### 主机名探测 未被 mDNS 或 SSDP 发现的设备(如 Proxmox 服务器、裸机或网络设备)通常没有显示名称。YScan 会自动使用以下方式探测这些未命名的设备: 1. **反向 DNS (PTR 查找)** — 速度快,返回诸如 `pve.local` 或 `nas.home` 的主机名 2. **HTTP banner 检测** — 通过原始 HTTP 请求探测 80、8080、8006、443、8443 端口,并根据 `Server` header 和 `` 标签识别设备 已知的服务器特征将被映射为友好的名称: | 服务器 Banner | 识别为 | |---------------|---------------| | `pve-api-daemon/3.0` | Proxmox VE | | `TrueNAS` | TrueNAS | | `Synology` | Synology DSM | | `UniFi` | UniFi Controller | | `Pi-hole` | Pi-hole | | `Home Assistant` | Home Assistant | | `OPNsense` / `pfSense` | OPNsense / pfSense | ## 配置 YScan 开箱即用,无需任何配置。您也可以选择创建配置文件来自定义其行为。 **配置文件位置:** - macOS: `~/Library/Application Support/yscan/config.yaml` - Linux: `~/.config/yscan/config.yaml` ``` # 网络接口(如果省略则自动检测) network_interface: en0 # 自动重新扫描之间的间隔秒数(默认:30) scan_interval: 30 # 每个扫描周期的超时时间(秒)(默认:10) scan_timeout: 10 # 颜色主题:dark, light, dracula, nord, onedark, monokai-pro, tokyo-night, synthwave theme: dark # 切换各个扫描器 scanners: arp: true mdns: true ssdp: true # Port scanner 设置 port_scanner: timeout_ms: 5000 ports: - 22 - 80 - 443 - 8080 # ... add or remove ports as needed ``` ### 默认端口 端口扫描器默认会检查以下 29 个端口: `21` `22` `23` `25` `53` `80` `110` `135` `139` `143` `389` `443` `445` `993` `995` `1433` `1521` `3306` `3389` `5432` `5900` `8080` `8443` `9000` `9090` `9200` `9300` `10000` `27017` ## CLI 参考 ``` yscan [OPTIONS] [COMMAND] Commands: scan One-shot scan, print results to stdout demo Launch with synthetic demo data Options: -i, --interface <INTERFACE> Network interface (e.g., en0) --theme <THEME> Color theme [default: dark] -h, --help Print help -V, --version Print version ``` ### 示例 ``` # 交互式 TUI(默认) sudo yscan # 一次性扫描并输出表格 sudo yscan scan # 用于通过管道传递给 jq、脚本等的 JSON 输出 sudo yscan scan --json # 扫描特定接口 sudo yscan -i eth0 # 使用演示数据尝试 TUI(无需网络访问) yscan demo # Synthwave 主题 yscan --theme synthwave ``` ## 许可证 Apache 2.0 License</div><div><strong>标签:</strong>Maven构建, Rust, TUI, 云存储安全, 可视化界面, 插件系统, 数据统计, 端口扫描, 网络发现, 网络扫描, 网络流量审计, 运维工具, 通知系统</div></article></div> <!-- 人机验证 --> <script> (function () { var base = (document.querySelector('base') && document.querySelector('base').getAttribute('href')) || ''; var path = base.replace(/\/?$/, '') + '/cap-wasm/cap_wasm.min.js'; window.CAP_CUSTOM_WASM_URL = new URL(path, window.location.href).href; })(); </script> </body> </html>