minghsuy/domain-scout
GitHub: minghsuy/domain-scout
通过证书透明度日志、RDAP 和 DNS 多源联动,帮助企业快速发现与特定公司实体关联的全部域名资产。
Stars: 0 | Forks: 0
# domain-scout
[](https://github.com/minghsuy/domain-scout/actions/workflows/ci.yml)
[](https://pypi.org/project/domain-scout-ct/)
[](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, 二进制模式, 企业资产盘点, 域名关联, 域名发现, 子域名枚举, 实时处理, 尽职调查, 无后门, 系统安全, 网络侦查, 证书透明度, 请求拦截, 资产测绘, 进程管理, 逆向工具, 通用签名格式