vishnujchandran/subscope

GitHub: vishnujchandran/subscope

subscope 是一个聚合多种被动子域名枚举工具并自动完成数据清洗、去重与报告生成的 Python 安全 CLI。

Stars: 0 | Forks: 0

# subscope `subscope` 是一个用于被动子域名枚举的 Python CLI。 它封装了常见的外部工具,合并它们的输出,对结果进行标准化,并生成清晰的报告。 ## 快速开始 ``` python -m venv .venv source .venv/bin/activate python -m pip install -e .[dev] python -m subscope --domain example.com --out ./output --json ``` ## 功能 - 接受目标域名和输出目录 - 封装已安装的被动工具: - `subfinder` - `assetfinder` - `amass`(被动模式) - 优雅地跳过缺失的工具并发出警告 - 标准化输出(去除 `*.` 前缀,转换为小写) - 验证发现的域名 - 对结果进行去重和排序 - 生成: - `subdomains.txt` - `stats.md` - 通过 `--json` 可选生成的 `stats.json` - 结构化日志,每次运行包含专属的 correlation ID(`run_id`) - 通过 `--workers` 并发执行工具 - 原子化输出写入,避免产生不完整的文件 - 解析每个工具的绝对二进制路径,以提供更清晰的执行来源 - 限制 subprocess 输出捕获,以避免内存无限增长 - Dashboard 绑定安全防护(远程绑定需要显式同意) ## 安装说明 ### 1) 克隆仓库 ``` git clone git@github.com:vishnujchandran/subscope.git cd subscope ``` ### 2) 创建并激活虚拟环境(推荐) ``` python -m venv .venv source .venv/bin/activate ``` ### 3) 安装包和开发依赖 ``` python -m pip install --upgrade pip setuptools wheel python -m pip install -e .[dev] ``` ### 4) 外部工具前置条件(可选但推荐) 安装以下一个或多个工具: - `subfinder` - `assetfinder` - `amass` 如果某个工具未安装,`subscope` 将自动跳过它。 #### Kali/Linux 快速安装 ``` sudo apt update sudo apt install -y golang-go amass go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest go install github.com/tomnomnom/assetfinder@latest ``` #### 将 Go 工具添加到 PATH(重要) 使用当前 shell 的配置文件: ``` # bash 用户 echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc source ~/.bashrc # zsh 用户 echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.zshrc source ~/.zshrc ``` ## 命令 ``` # 运行测试 pytest # Lint / type / security 检查 ruff check . mypy subscope bandit -q -r subscope pip-audit # 作为 module 运行 python -m subscope --domain example.com --out ./output # 运行已安装的 script subscope --domain example.com --out ./output ``` ## 用法 ### 模块执行 ``` python -m subscope --domain example.com --out ./output ``` ### 脚本入口点 ``` subscope --domain example.com --out ./output ``` ### 额外示例 ``` # 仅使用选定的工具 python -m subscope --domain example.com --tools subfinder,assetfinder # 将每个工具的 timeout 提高到 180s python -m subscope --domain example.com --timeout 180 # 同时输出 JSON stats python -m subscope --domain example.com --json # 并行运行工具(默认 workers=3) python -m subscope --domain example.com --workers 3 # 运行后通过 HTTP 提供本地 dashboard python -m subscope --domain example.com --json --serve-dashboard --host 127.0.0.1 --port 8000 # Remote dashboard 绑定(明确 opt-in) python -m subscope --domain example.com --serve-dashboard --host 0.0.0.0 --allow-remote-dashboard # Debug logging python -m subscope --domain example.com --debug ``` ## 输出格式 使用 `--out ./output` 时,文件将写入按域名和每次运行划分的目录中: - `./output///subdomains.txt` — 排序且去重的域名 - `./output///stats.md` — Markdown 摘要(包含 run ID、状态、工具明细) - `./output///stats.json` — 可选的机器可读统计信息(包含 `run_id` 和运行 `status`) - `./output//latest/*` — 最近一次运行的快照,便于快速访问 - `./output//runs.jsonl` — 仅追加的运行历史记录,用于分析 - `./output//dashboard.html` — 根据运行历史自动生成的本地 Dashboard 如果启用了 `--serve-dashboard`,可通过以下地址浏览 Dashboard: - `http://127.0.0.1:8000//dashboard.html` 运行状态: - `success`:所有选定的工具均执行成功 - `partial`:至少有一个选定的工具执行成功 - `failure`:没有选定的工具执行成功 每次执行都会生成一个新的 `run_id`,因此之前的运行输出不会被覆盖。 ## 故障排除 ### 未返回任何结果 - 检查目标域名是否正确。 - 确认至少安装并正常运行了一个受支持的工具。 - 尝试使用 `--debug` 来检查工具的命令执行行为。 ### 工具未找到警告 如果工具未安装,这是预期行为。警告示例: - `tool=subfinder status=skipped reason=not_installed` 请安装缺失的二进制文件并重试。 验证工具路径: ``` which subfinder which assetfinder which amass ``` 如果已安装但仍未找到,请确保 `$HOME/go/bin` 位于正确的 shell 配置文件中(bash 对应 `~/.bashrc`,zsh 对应 `~/.zshrc`),然后运行: ``` hash -r ``` ### 写入输出时出现权限错误 请使用 `--out` 指定一个可写路径,例如 `--out ./output`。 ### 拒绝远程 Dashboard 绑定 默认情况下,`--serve-dashboard` 仅允许本地绑定目标(`127.0.0.1`、`localhost`、`::1`)。 如果您确实需要远程访问,请传入 `--allow-remote-dashboard`。 ### 事件处理 在 `docs/runbook.md` 中提供了一个基础的操作手册。 发布说明位于 `docs/release.md`。 ## 路线图 - 基于解析器的可选主动验证模式 - 输出格式插件(CSV/NDJSON) - 工具适配器接口,便于扩展 - 针对不稳定工具执行的重试/退避策略 ## 法律免责声明 ## 许可证 MIT
标签:GitHub, Python, 任务编排, 子域名枚举, 实时处理, 文档结构分析, 无后门, 系统安全, 逆向工具