John0n1/CamSniff
GitHub: John0n1/CamSniff
这是一款专注于 IP 摄像头和网络视频设备的自动化侦察工具包,提供从设备发现、指纹识别到快照捕获的一站式解决方案。
Stars: 90 | Forks: 13
# CamSniff
/`:
您可以使用 `--output-root` 覆盖基础目录,并使用 `--run-name` 追加标签。
示例:`/mnt/scan-results/20250101T000000Z-office/`。
报告以 `report.md` 或 `report.html` 形式写入每次运行的目录中。
当启用 `--encrypt-results` 时,会创建一个加密的 `.tar.gz.age` 或 `.tar.gz.gpg` 存档
与运行目录并存(明文仍保留在磁盘上)。
若要无提示进行 GPG 对称加密,请设置 `CAM_ENCRYPT_PASSPHRASE`。
* `discovery.json` — 包含丰富元数据 + 置信度评分的规范主机数据集
* `credentials.json` — 每台主机的凭据尝试与成功记录
* `thumbnails/` — 成功抓取的 JPEG 快照(按运行组织)
* `logs/` — 原始阶段日志(`nmap-output.txt`, `masscan-output.json`, `avahi-services.txt`, `tshark-traffic.csv`, `coap-probe.log`, `http-metadata.jsonl`, `ssdp-discovery.jsonl`, `onvif-discovery.jsonl`)
* `analysis/` — 来自 `scripts/tools/analyze.sh` 的可选汇总统计
`discovery.json` 快照示例(已修剪):
```
{
"ip": "192.168.1.42",
"mac": "AA:BB:CC:DD:EE:FF",
"sources": ["Nmap","TShark","Avahi"],
"ports": [80,554,8443],
"observed_paths": ["/onvif/device_service", "rtsp://..."],
"profile_match":{
"vendor":"VendorX",
"model":"ModelY",
"matched_by":"oui",
"rtsp_candidates":[...],
"http_snapshot_candidates":[...],
"cve_ids":["CVE-2024-XXXX"]
},
"confidence": {
"score": 78,
"level": "high",
"classification": "camera",
"reasons": ["rtsp url discovered", "onvif detected"]
}
}
```
# 发现与画像逻辑(简述)
* **观察到的证据**:Nmap + TShark + Avahi 合并到主机记录中。
* **启发式规则**:端口指纹、OUI 正则、观察到的 HTTP/RTSP URI、ONVIF/SSDP/HTTP Banner。
* **供应商模板**:`data/catalog/paths.csv` 包含 OUI 及端口启发式规则 → RTSP/HTTP 模板 + CVEs。
* **丰富化**:小型 Python 后处理器对候选进行排名并注释 `discovery.json`。
* **智能定位**:`--smart` 利用早期信号优先进行更深层探测并打印置信度排名。
* **SSDP 描述**:`--ssdp-describe` 获取设备描述以增强指纹。
# 凭据探测行为
`scripts/credential-probe.sh` 使用:
1. 供应商默认组合(来自 `data/catalog/paths.csv`)+ 空白/空密码检查。
2. 精选的、受模式限制的用户名/密码对列表(`data/dictionaries/usernames.txt`, `data/dictionaries/passwords.txt`)。
3. 枚举的 RTSP 路径(画像 + 暴力破解 + 从 TShark 观察)。
4. HTTP 快照模板端点(`data/dictionaries/http-paths.txt`)。
成功的尝试记录:凭据对、使用的端点、缩略图路径、时间戳。**凭据以纯 JSON 格式存储** —— 请将其视为敏感材料并相应地保护结果目录。
# 目标文件格式
CamSniff 可以使用 `--targets` 标志从外部文件摄取 IP 地址和 CIDR 范围。这允许预定义目标列表并与其他侦察工具集成。
## JSON 格式
```
{
"targets": [
"192.168.1.0/24",
"10.0.0.1",
"172.16.0.0/28"
]
}
```
JSON 文件必须包含一个 `targets` 数组,其中包含作为字符串的 IP 地址和/或 CIDR 范围。
## 文本格式
```
# 以 # 开头的注释行将被忽略
192.168.1.0/24
10.0.0.1
# 另一个网络
172.16.0.0/28
```
文本文件支持每行一个 IP 地址或 CIDR 范围。空行和以 `#` 开头的行将被忽略。空白将自动修剪。
## 使用示例
```
# 从 JSON 文件扫描目标
sudo camsniff --mode medium --targets /path/to/targets.json
# 从文本文件扫描目标
sudo camsniff --mode war --targets /path/to/targets.txt
# 使用附带的示例文件
sudo camsniff --mode medium --targets data/examples/example-targets.json
```
`data/` 目录中提供了示例目标文件:
- `data/examples/example-targets.json` — JSON 格式示例
- `data/examples/example-targets.txt` — 文本格式示例
使用 `--targets` 时,脚本将绕过自动网络检测并仅扫描指定的目标。
# 配置与扩展字典
所有字典位于 `data/` 且可编辑:
* `catalog/paths.csv` — 供应商 OUI 正则 → 默认凭据, RTSP/HTTP 模板, CVE IDs
* `dictionaries/rtsp-urls.txt` — 扩展 NSE 的 RTSP 暴力破解字典
* `dictionaries/http-paths.txt` — 后备 HTTP 快照端点(模板化)
* `dictionaries/usernames.txt` / `dictionaries/passwords.txt` — 精选凭据列表(忽略注释)
* `vendors//http-paths.txt` — 特定供应商的 HTTP 快照模板
* `vendors//rtsp-paths.txt` — 特定供应商的 RTSP 模板
* `core/port-profiles.sh` — 每种扫描模式使用的逻辑命名端口集
编辑后,下次运行将使用更新后的文件。保持添加内容简洁、可验证且有文档记录(理想情况下每个供应商一行)。
供应商字典格式:
- HTTP: `template|port|channel|stream|label`
- RTSP: `template|port|channel|stream|transport|label`
模板可包含 `{{ip_address}}`, `{{username}}`, `{{password}}`, `port}}`,
`{{channel}}`, 和 `{{stream}}` 占位符。
# 分析助手与 IVRE 集成
* `scripts/tools/analyze.sh` — 打印主机数量、供应商多样性、RTSP 发现量、凭据成功率。
* `scripts/integrations/ivre-manager.sh` — 可选地引导带有 IVRE + pymongo 的 Python venv 并将丰富后的主机推送到 IVRE(使用 `--extra ivre`)。
# 依赖项
核心运行时(尽可能自动安装):
* nmap, masscan (可选), tshark (wireshark/tshark), avahi-utils, ffmpeg, curl, jq, python3 (+ venv), chafa (可选, 用于 ASCII 预览), libpcap.
* libcoap / `coap-client` 的构建工具(`git`, `cmake`, `build-essential`, `pkg-config`) — 脚本 `scripts/setup/build-coap.sh` 将在缺失时尝试构建。
# 故障排除与技巧
* **`discovery.json` 为空** — 检查接口、ARP 可见性,运行非隐蔽模式进行测试。
* **Masscan 被跳过** — 确保 `--mode` 允许(例如 `medium`+)。
* **无缩略图** — 检查 `ffmpeg` 可用性及 `dev/results//logs/` 中的每主机日志。
* **ONVIF 假阴性** — SSL/证书重定向或非标准端口可能隐藏端点 — 针对可疑端点手动尝试 `curl -k`。
* **CoAP 探测失败** — 通过 `scripts/setup/build-coap.sh` 构建 `coap-client`,检查 `logs/coap-probe.log`。
* **性能** — 如果 `nuke` 耗时过长,请使用 `medium` 或自定义端口配置。
环境开关:
* `NO_ANIM=1` — 跳过 ASCII/介绍动画(在 CI 中有用)。
* `CAM_MODE_PORT_PROFILE` — 以编程方式覆盖端口配置(高级)。
# 加固、道德与负责任的使用
* **授权** — 切勿在未经明确书面许可的情况下对网络/设备使用 CamSniff。
* **数据保护** — 捕获的图像、设备元数据和凭据属于敏感信息 —— 加密并限制访问。
* **最小影响** — 发现阶段从 `stealth` 模式开始,仅在获得授权时升级。
* **CVE 数据** — 视为建议;需要手动验证和安全披露实践。
* **避免不受控制的凭据喷洒** — 凭据尝试受模式限制;尊重目标运营稳定性。
# 路线图(简述)
* Web 仪表板:实时 JSON + 缩略图。
* 实时马赛克/时间线捕获模式。
* 加密凭据存储与基于角色的访问。
* 可插拔导出器:Markdown/HTML 摘要报告。
* 更多协议签名(MQTT, SIP, 更多专有 API)。
有功能想法?请开一个 Issue 描述用例。
# 许可证
MIT — 见 [LICENSE](LICENSE)。 © 2025 John Hauger Mitander. 作者不对滥用负责。请践行合乎道德的安全研究。
[](https://github.com/John0n1/CamSniff/commits/main)
[](#)
[](#)
[](LICENSE)
**当前版本:** `2.2.3` ·
# 目录
1. [概述](#overview)
2. [为什么选择 CamSniff?](#why-camsniff)
3. [功能矩阵](#feature-matrix)
4. [架构与流程](#architecture--flow)
5. [项目布局](#project-layout)
6. [扫描模式](#scanning-modes)
7. [安装与快速开始](#install--quick-start)
8. [命令行示例](#command-line-examples)
9. [输出格式与产物](#output-format--artifacts)
10. [发现与画像逻辑(简述)](#discovery--profiling-logic-short)
11. [凭据探测行为](#credential-probing-behavior)
12. [配置与扩展字典](#configuration--extending-dictionaries)
13. [分析助手与 IVRE 集成](#analysis-helper--ivre-integration)
14. [依赖项](#dependencies)
15. [故障排除与技巧](#troubleshooting--tips)
16. [加固、道德与负责任的使用](#hardening-ethics--responsible-use)
17. [贡献与路线图](#contributing--roadmap)
18. [许可证](#license)
# 概述
**CamSniff** 是一个模块化侦察工具包,专注于在*本地网络*上发现、画像 IP 摄像头和网络视频源,并伺机获取快照/流。它融合了主动扫描(Nmap,可选 Masscan)、被动发现(Avahi/mDNS/SSDP)、短时流量采样(TShark)、HTTP/ONVIF Banner 抓取,以及供应商模板(`data/catalog/paths.csv`),以产生结构化、可复现的结果。
关键设计点:
* 模式感知:可在 **stealth** → **nuke** 之间调节,以权衡噪音与覆盖范围
* 多协议:RTSP, ONVIF, HLS, WebRTC, SRT, RTMP, CoAP 探测等
* 输出:结构化 JSON(`discovery.json`, `credentials.json`)+ 缩略图与日志
* 离线友好:无需外部查询 —— 供应商情报位于 `data/` 中
# 为什么选择 CamSniff?
* 减少重复的手动侦察:一条命令即可生成一致、可审计的数据集。
* 模板化的供应商情报加速了可能快照/RTSP 端点的发现。
* 可调节的凭据探测使操作可追溯,并受所选模式限制。
* 旨在与 IVRE 集成,构建持久、可查询的侦察数据库。
# 功能矩阵
| 区域 | 亮点 |
| ------------------- | ---------------------------------------------------------------------------------- |
| 发现 | Nmap TCP/UDP 扫描, NSE RTSP 暴力破解, 可选 Masscan + SSDP 广播扫描 |
| 目标指定| 自动检测本地网络或使用 `--targets` 从 JSON/文本文件加载 |
| 被动 | Avahi/mDNS & SSDP 过滤摄像头/服务关键词; HTTP Banner 收集 |
| 流量采样 | 针对性 TShark 捕获以提取观察到的 URI |
| 协议 | ONVIF (含设备信息), RTSP, HLS, WebRTC/STUN, RTMP, SRT, CoAP `/.well-known/core` |
| 供应商画像 | `data/catalog/paths.csv` 映射 OUI/启发式规则 → RTSP/HTTP 模板 + CVEs |
| 凭据策略 | 模式限制的精选用户名/密码列表,默认组合 |
| 获取 | ffmpeg RTSP 抓取, HTTP 快照请求, 可选 ASCII 预览 (chafa) |
| 输出 | `discovery.json`, `credentials.json`, 缩略图, HTTP/ONVIF/SSDP 元数据日志 |
| 额外功能 | IVRE 同步脚本, 扫描后分析脚本, 丰富器 |
# 架构与流程(简述)
1. 通过 `scripts/core/mode-config.sh` 决定模式(时间、广度、凭据上限)。
2. 主动扫描:Nmap(脚本化 RTSP 暴力破解 NSE);可选 Masscan 合并端口。
3. 被动发现:SSDP 广播扫描 + Avahi/mDNS 查找摄像头/服务关键词。
4. 流量采样:对观察到的主机进行 TShark 捕获以查找候选 URI。
5. UDP 微扫描用于 STUN/WS-Discovery/SRT 指示符。
6. CoAP 探测 `/.well-known/core` 以查找受限设备。
7. HTTP 元数据 & ONVIF 设备信息拉取,用于 Banner/Realm 关联。
8. 使用 `data/catalog/paths.csv` 进行供应商匹配 → 生成候选 RTSP/HTTP 模板。
9. 组装 `discovery.json` 并运行凭据/媒体获取阶段。
10. 可选,使用 `--extra ivre` 推送到 IVRE。
# 项目布局
* `scripts/camsniff.sh` — 每个扫描阶段的启动器/编排器。
* `scripts/core/` — 模式/端口配置逻辑及其他共享调节参数。
* `scripts/setup/` — 依赖/引导助手(libcoap 构建,包安装)。
* `scripts/probes/` — SSDP, ONVIF, 凭据探测及相关主动模块。
* `scripts/helpers/` — 用于目录丰富、HTTP 解析、RTSP 摘要的 Python 工具。
* `scripts/integrations/` — IVRE 同步和管理工具。
* `scripts/tools/` — 分析/报告助手。
* `scripts/ui/` — Banner 和终端渲染助手。
* `data/catalog/` — 供应商模板 + CVEs。
* `data/dictionaries/` — 凭据,HTTP/RTSP 字典。
* `data/examples/` — 示例目标列表。
* `data/protocols/` — NSE RTSP 暴力破解脚本和协议资产。
# 扫描模式(摘要)
每种模式调整端口配置、时间、Masscan 使用、NSE 广度和最大凭据尝试次数。
| 模式 | Masscan | Nmap 速度 | 凭据 (最大) | TShark (秒) | 用例 |
| -----------: | :-----: | :------------------: | :---------: | :--------: | ----------------------- |
| `stealth+` | 否 | -T1 | 8 | 15 | 最低噪音,最慢 |
| `stealth` | 否 | -T2 | 12 | 20 | 安静的本地扫描 |
| `medium` | 是 | -T4 | 32 | 35 | 默认平衡 |
| `aggressive` | 是 | -T4 -A | 64 | 45 | 更多脚本/版本探测 |
| `war` | 是 | -T5 -A | 96 | 55 | 广泛的供应商覆盖 |
| `nuke` | 是 | -T5 -A --script vuln | 128 | 75 | 全端口扫描 (1–65535) |
默认:`--mode medium`。示例:`sudo camsniff --mode stealth`。
# 安装与快速开始
## A — 从 Release 安装(Debian 包)
```
# 下载最新 .deb 版本
sudo apt install ./camsniff_*amd64.deb
# 运行
sudo camsniff --mode medium
```
## B — 从源码安装(开发者 / 实时编辑)
```
git clone https://github.com/John0n1/CamSniff.git
cd CamSniff
chmod +x scripts/*.sh data/*.sh
sudo scripts/camsniff.sh # first run bootstraps dependencies if needed
```
# 命令行示例
```
# 快速平衡扫描(默认强度)
sudo camsniff --mode medium
# 静默扫描(低占用)
sudo camsniff --mode stealth+
# 激进模式,包含 IVRE 摄取
sudo camsniff --mode aggressive --extra ivre
# 跳过确认(非交互式)
sudo camsniff --yes
# 固定输出位置并标记运行
sudo camsniff --output-root /mnt/scan-results --run-name office
# 强制指定 tshark 的捕获接口
sudo camsniff --interface eth0
# 跳过自动凭证探测
sudo camsniff --skip-credentials
# 跳过依赖项安装(假定工具已存在)
sudo camsniff --skip-install
# 生成 markdown 或 HTML 报告
sudo camsniff --report markdown
sudo camsniff --report html
# 智能目标整形与置信度排名
sudo camsniff --smart --smart-min 35 --smart-max 60
# 使用设备描述丰富 SSDP 结果
sudo camsniff --ssdp-describe
# 加密结果(自动选择 age/gpg)
sudo camsniff --encrypt-results --encrypt-recipient "age1example..."
# 强制使用密钥 ID 进行 gpg 加密
sudo camsniff --encrypt-results gpg --encrypt-recipient "KEYID"
# 从 JSON 文件扫描指定 IP 范围
sudo camsniff --mode medium --targets /path/to/targets.json
# 从文本文件扫描指定 IP 范围
sudo camsniff --mode war --targets /path/to/targets.txt
# 显示帮助 / 版本
sudo camsniff --help
sudo camsniff --version
```
# 输出格式与产物
所有运行输出默认位于 `dev/results/
标签:Bash, CTI, IP摄像头, Kali工具, ONVIF协议, Python, RTSP协议, Shodan替代, SOC, 加密文件系统, 安防监控, 应用安全, 插件系统, 数据统计, 无后门, 物联网安全, 端口扫描, 红队评估, 网络安全审计, 网络视频流, 足迹分析, 逆向工具