codejake/snoopy-passive-recon

GitHub: codejake/snoopy-passive-recon

一款基于 Python 和 Textual TUI 的被动局域网侦察工具,通过监听常见协议发现流量来实时展示网络中的设备与服务信息。

Stars: 0 | Forks: 0

# Snoopy ![snoopy.py](https://static.pigsec.cn/wp-content/uploads/repos/cas/0e/0ea0b183ff259a56721a27dfd82e636c4cee9c2ac4b007e947a5de990ab3dd66.jpg) `snoopy.py` 是一款带有 Textual TUI 的被动局域网侦察工具。它监听局域网中已有的常见发现和路由流量,将这些流量转化为结构化的发现事件,并在实时仪表盘中展示结果。 它不会主动扫描或探测主机。相反,它通过监控诸如 LLDP、CDP、DHCP、mDNS、NBNS、SSDP、WS-Discovery 和 OSPF/OSPFv3 等流量,帮助你了解哪些设备和服务正在对外通告自身信息。 ## 历史 `snoopy.py` 是我在 20 世纪 90 年代编写的 `snoopy.pl` 工具的重塑版本。 ## 主要功能 - 使用 `tcpdump` 捕获数据包 - 解码来自多种协议的被动发现流量 - 对发现结果进行去重,并生成实时设备表 - 在 Textual 仪表盘中展示详情和近期事件日志 - 允许你通过单次按键将当前发现状态保存为 JSON 格式 ## 环境要求 - macOS 或 Linux - Python 3.13+ - [`uv`](https://github.com/astral-sh/uv) - `tcpdump` 可在 `PATH` 中找到 - 拥有在目标接口上捕获数据包的权限 在许多系统上,你需要提升的权限才能捕获流量,例如使用 `sudo`。 ## 项目依赖状态 本仓库专为 `uv` 配置,目前需要: - Python:`3.13` - 运行时依赖:`textual>=8.2.8` - 外部系统依赖:`tcpdump` 权威的 Python 项目元数据保存在 `pyproject.toml` 中。该脚本还包含内联的 `uv` 头部信息,因此可以直接作为可执行文件运行。 ## 设置 将 Python 依赖安装到本地环境中: ``` uv sync ``` 如果你希望使用特定的解释器: ``` uv python pin 3.13 uv sync ``` 或者: 无需安装,直接从仓库中运行: ``` uv run https://raw.githubusercontent.com/codejake/snoopy-passive-recon/main/snoopy.py -i ``` 请确保已通过你的操作系统包管理器或系统工具单独安装了 `tcpdump`。 ## 用法 通过 `uv` 运行该应用: ``` uv run snoopy.py ``` 由于数据包捕获通常需要特定权限,常见的调用方式是: ``` sudo uv run snoopy.py ``` 如果文件已标记为可执行且安装了 `uv`,你也可以依赖可执行的 shebang: ``` ./snoopy.py ``` ### CLI 选项 ``` -i, --interface Capture on a specific interface -c, --count Stop after this many decoded discovery events ``` 示例: ``` uv run snoopy.py --interface en0 uv run snoopy.py --count 50 sudo uv run snoopy.py --interface eth0 --count 100 ``` 如果你没有传入 `--interface`,Snoopy 会尝试在 macOS 或 Linux 上自动检测默认路由接口。 ## 仪表盘控制 - `q`:退出 - `l`:切换近期发现日志面板 - `s`:将当前发现结果保存到 `snoopy-discoveries-YYYYMMDD-HHMMSS.json` 保存的 JSON 文件会写入当前工作目录。 ## 已解码协议 - LLDP - CDP - DHCP - mDNS - NBNS - SSDP - WS-Discovery - OSPF - OSPFv3 ## 注意事项与限制 - Snoopy 是被动的。如果网络中没有流量,仪表盘也就不会有数据显示。 - 发现的质量取决于相邻设备选择通告的内容。 - DHCP `DHCPOFFER` 流量通常是针对特定客户端的回复流量,因此 Snoopy 能否看到它取决于你的捕获位置。 - 当前环境中必须存在 `tcpdump`,且当前用户有权运行它。 - 接口自动检测目前仅支持 macOS 和 Linux。 ## 故障排除 如果启动失败: - 确认 `tcpdump` 已安装且在 `PATH` 中 - 如果缺少数据包捕获权限,请使用提升的权限重试 - 如果默认路由检测选择了错误的设备,请显式传入 `--interface` - 如果本地缺少 `textual`,请重新运行 `uv sync` 如果你想在未开始捕获前进行快速的语法检查: ``` python3 -m py_compile snoopy.py ```
标签:Python, Snort++, TUI, 局域网发现, 无后门, 被动扫描, 逆向工具, 防御绕过