subfinder的crtsh数据源实现深度剖析:PostgreSQL直连+HTTP API双通道回退设计

发布时间:2026/9/19 22:28:58
subfinder的crtsh数据源实现深度剖析:PostgreSQL直连+HTTP API双通道回退设计 subfinder的crtsh数据源实现深度剖析PostgreSQL直连HTTP API双通道回退设计【免费下载链接】subfinderFast passive subdomain enumeration tool.项目地址: https://gitcode.com/gh_mirrors/su/subfindersubfinder是一款快速被动子域名枚举工具它通过聚合各类在线被动数据源无需发送任何探测流量即可挖掘出目标域名的有效子域名。本文将深入剖析其内置的crtsh数据源基于证书透明度日志 crt.sh为什么它要同时实现PostgreSQL 直连与HTTP API两条通道回退逻辑又是如何保证结果稳定性的一、先认识 subfinder 的数据源体系subfinder 采用高度模块化的架构每个数据源都是一个独立的 Go 包只要实现统一的Source接口见 pkg/subscraping/types.go就能被枚举引擎无缝接入。一个数据源需要回答几个核心问题接口方法作用Run拉取该源的子域名结果Name/IsDefault数据源名称是否默认启用HasRecursiveSupport是否支持递归查询子域名的子域名KeyRequirement是否需要 API Key无需/可选/必需crtsh 数据源的完整实现位于 pkg/subscraping/sources/crtsh/crtsh.go并被注册进全部 52 个数据源的清单中pkg/passive/sources.go。它的三个自我声明很关键默认启用IsDefault返回true无需 API KeyNoKey支持递归查询HasRecursiveSupport返回true因此能配合-recursive参数对已有子域名继续挖零配置即可工作是新手上手 subfinder 时的主力数据源二、双通道回退设计为什么要有两条路crt.sh 是全球最大的证书透明度Certificate Transparency查询服务所有公开签发的 TLS 证书都会记录在案因此是被动子域名挖掘的宝库。但它的官方入口只有 HTTP 接口查询量大、稳定性一般。聪明的做法是crt.sh 本身把证书数据暴露在公共 PostgreSQL 数据库库名certwatch上任何人都可以用只读账号guest直连查询。于是 subfinder 设计了SQL 优先、HTTP 兜底的双通道策略Run() ──▶ ① getSubdomainsFromSQLPostgreSQL 直连 │ 有结果── 是 ──▶ 直接返回省掉 HTTP 请求 │ 否 └──▶ ② getSubdomainsFromHTTPcrt.sh JSON API核心调度逻辑非常简洁crtsh.go先执行 SQL 查询只要返回了至少一条数据就立即结束只有 SQL 通道颗粒无收比如网络不通、数据库访问被限制时才会回落到 HTTP API 通道。三、通道一PostgreSQL 直连这是 crtsh 数据源最快的一条路实现了几个值得一提的工程细节crtsh.go1. 连接参数即防御连接串中把connect_timeout设为全局超时进入会话后再执行SET statement_timeout从建连到查询两个环节都锁死耗时上限防止慢查询拖垮整个枚举流程。2. 全文检索 模糊匹配双保险查询语句同时使用 PostgreSQL 的plainto_tsquery全文检索与ILIKE模糊匹配直接在certificate_and_identities表上取NAME_VALUE字段。注释中特别说明下游只需要NAME_VALUE所以不再去联表解析每个证书对象的 x509 结构——这是针对大查询的性能优化大幅降低了数据库侧的解析开销。3. 默认 10000 条上限如果没有指定-all参数该开关通过 context 透传见 pkg/runner/runner.goSQL 会自动追加LIMIT 10000。对于常见域名一万条证书记录通常已足够覆盖其子域名而大站点在默认模式下也能避免一次拉回百万行数据。四、通道二HTTP API 回退当 SQL 通道失败或无结果时回退逻辑crtsh.go会向 crt.sh 发起一次标准 JSON 查询请求格式https://crt.sh/?q%.域名outputjson即按任意前缀 域名模糊搜索响应是[{id, name_value}, ...]数组name_value中可能包含换行分隔的多个子域名一张证书可同时关联多个名称因此代码会逐行拆分处理走的是 subfinder 统一的Session.SimpleGet自动继承全局超时、代理与限速配置pkg/subscraping/agent.go两条通道殊途同归产出的都是subscraping.Result结果流通过 Go channel 异步交给上游互不阻塞。五、结果加工提取、去噪与统计无论结果来自哪条通道都会经过同一套流水线正则提取pkg/subscraping/extractor.go 按目标域名编译正则从原始文本中精准切出子域名并过滤掉形如foo.example.com.evil.org这类长主机名前缀的误报小写化与去重统一转小写后进入全局去重集合统计上报源结构体记录了errors/results/requests/timeTaken四项指标crtsh.gosubfinder 结束时会汇总展示各数据源的产出情况——如果 SQL 通道生效你会看到 crtsh 的requests计数为 0这正是双通道设计的直观证据六、快速上手只用 crtsh 数据源# 仅使用 crtsh 数据源枚举 subfinder -d example.com -s crtsh # 对已有子域名递归继续挖crtsh 支持递归 subfinder -d api.example.com -s crtsh -recursive # 使用全部数据源含更多源更慢 subfinder -d example.com -all七、小结维度PostgreSQL 直连HTTP API 回退速度⭐⭐⭐ 全文检索毫秒级⭐⭐ 受接口限流影响稳定性依赖网络能直连 DB更普适的兜底方案数据量默认 LIMIT 10000接口默认返回额外依赖无需 API Key无需 API Keycrtsh 数据源用一份不到 230 行的代码演示了一个数据源设计的教科书级思路主通道追求性能备用通道保证可用两条通道的产出统一收敛到同一个结果管道。这种双通道回退模式值得任何需要对接不稳定上游服务的开发者借鉴。 相关源码导航数据源实现pkg/subscraping/sources/crtsh/crtsh.go数据源接口定义pkg/subscraping/types.go全量数据源注册表pkg/passive/sources.goHTTP 会话与限速pkg/subscraping/agent.go子域名提取器pkg/subscraping/extractor.go【免费下载链接】subfinderFast passive subdomain enumeration tool.项目地址: https://gitcode.com/gh_mirrors/su/subfinder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询