minghsuy/domain-scout

GitHub: minghsuy/domain-scout

通过证书透明度日志、RDAP 和 DNS 多源联动,帮助企业快速发现与特定公司实体关联的全部域名资产。

Stars: 0 | Forks: 0

# domain-scout [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/93675617d2054029.svg)](https://github.com/minghsuy/domain-scout/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/domain-scout-ct)](https://pypi.org/project/domain-scout-ct/) [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://minghsuy.github.io/domain-scout) 利用 Certificate Transparency 日志、RDAP 和 DNS 发现与企业实体关联的互联网域名。 **[文档](https://minghsuy.github.io/domain-scout)** | **[PyPI](https://pypi.org/project/domain-scout-ct/)** | **[更新日志](CHANGELOG.md)** 适用于安全团队、资产清单和并购尽职调查 —— 尤其在种子域名可能出错、拼写错误或属于母公司的情况下。 ## 安装 ``` pip install domain-scout-ct # core library + CLI pip install domain-scout-ct[api] # + REST API server pip install domain-scout-ct[cache] # + DuckDB query cache pip install domain-scout-ct[all] # everything ``` 用于开发: ``` uv sync --all-groups --all-extras ``` ## 使用方法 ### CLI ``` # 基本用法 domain-scout --name "Cloudflare" --location "San Francisco, CA" # 使用种子域名 domain-scout --name "Palo Alto Networks" --location "Santa Clara, CA" --seed "paloaltonetworks.com" # 多重种子 —— 交叉验证可提高对双方共同发现域名的置信度 domain-scout --name "Walmart" --seed walmart.com --seed samsclub.com # Deep 模式 —— 对未解析域名进行 GeoDNS 全球解析 domain-scout --name "Walmart" --seed "walmart.com" --deep # JSON 输出 domain-scout --name "Acme Corp" --output json > results.json # 详细日志 domain-scout --name "Cloudflare" --seed "cloudflare.com" -v ``` ### REST API ``` # 启动 API 服务器 (默认启用缓存) domain-scout serve --port 8080 # 健康检查 curl http://localhost:8080/health # 运行扫描 curl -X POST http://localhost:8080/scan \ -H "Content-Type: application/json" \ -d '{"entity": {"company_name": "Walmart", "seed_domain": ["walmart.com"]}}' # 就绪检查 (探测 crt.sh 连通性) curl http://localhost:8080/ready ``` ### Docker ``` # 构建 docker build -t domain-scout-ct . # 运行 API 服务器 docker run -p 8080:8080 domain-scout-ct # 运行 CLI 扫描 docker run domain-scout-ct scout --name "Walmart" --seed walmart.com # 在运行间持久化缓存 docker run -p 8080:8080 -v scout-cache:/data/cache domain-scout-ct ``` ### 缓存 ``` # 为 CLI 扫描启用缓存 domain-scout scout --name "Walmart" --seed walmart.com --cache # 查看缓存统计 domain-scout cache stats # 清除缓存 domain-scout cache clear ``` ### 库 ``` from domain_scout import Scout result = Scout().discover( company_name="Palo Alto Networks", location="Santa Clara, CA", seed_domain=["paloaltonetworks.com"], ) for domain in result.domains: print(f"{domain.domain:40s} {domain.confidence:.2f} {domain.sources}") ``` ### Async ``` import asyncio from domain_scout import Scout, EntityInput async def main(): scout = Scout() result = await scout.discover_async(EntityInput( company_name="Palo Alto Networks", seed_domain=["paloaltonetworks.com"], )) return result result = asyncio.run(main()) ``` ## 工作原理 1. **种子验证** — 对种子域名进行 DNS 解析,根据公司名称检查 RDAP 注册组织及 CT 证书组织名称 2. **CT 组织搜索** — 查询 crt.sh Postgres,获取 Subject Organization 与公司名称匹配的证书 3. **种子扩展** — 查找覆盖种子域名的证书上的所有 SAN,以揭示相关域名(例如被收购的公司) 4. **域名猜测** — 根据公司名称 + 常见 TLD 生成候选域名,对其进行解析,并通过 CT 验证 5. **跨种子验证** — 若有多个种子,被 2 个及以上种子独立发现的域名将获得置信度加成 6. **RDAP 印证** — 查询顶级发现域名的 RDAP 注册组织,确认所有权与目标公司匹配 7. **置信度评分** — 基于验证级别的模型根据证据组合(CT 组织匹配、SAN 共现、DNS 解析、RDAP 注册人匹配、跨种子验证和共享基础设施)对每个域名进行 0-1 评分 ### 数据来源 | 来源 | 方法 | 频率限制 | |--------|--------|-------------| | crt.sh | Postgres (主要), JSON API (备选) | 5 个并发查询,1s 突发延迟 | | RDAP | rdap.org 通用引导 | 每次请求 | | DNS | dnspython (8.8.8.8, 1.1.1.1) | 5 个并发 | | Shodan GeoDNS | geonet.shodan.io (深度模式) | 3 个并发,0.5s 延迟 | ## 开发 ``` make install # uv sync --all-groups make test # unit tests (mocked external calls) make lint # ruff + mypy make format # ruff --fix + ruff format make check # format + lint + test ``` 集成测试会访问真实的 crt.sh: ``` make test-integration ``` ## 许可证 MIT
标签:CDN识别, CommandLine, CT日志, DNS查询, DuckDB, ESC4, GitHub, OSINT, Python, RDAP, RESTAPI, 二进制模式, 企业资产盘点, 域名关联, 域名发现, 子域名枚举, 实时处理, 尽职调查, 无后门, 系统安全, 网络侦查, 证书透明度, 请求拦截, 资产测绘, 进程管理, 逆向工具, 通用签名格式