DNS 传播检测 API

同时向 Google、Cloudflare、阿里、DNSPod、Quad9、AdGuard、NextDNS 等公共 DoH 查询同一记录,检查修改 DNS 后各地是否已生效、答案是否一致

数据来源:公共 DoH(DNS over HTTPS)JSON 接口

返回统一的 JSON 格式 { code, message, cached, stale, updatedAt, data },支持跨域,免注册每天可免费调用 100 次,注册后每天 10000 次。

多个公共 DNS 并发查询,对比解析结果是否一致

GET /api/dns/propagation

请求参数

  • domain(必填):要检测的域名(支持中文域名,允许 _dmarc 这类下划线标签;不接受 IP),示例 github.com
  • type:记录类型:A / AAAA / CNAME / MX / TXT / NS,示例 A

返回字段

  • domain(string):查询的域名(ASCII 形式,中文域名为 punycode)
  • type(string):查询的记录类型
  • consistent(boolean):所有成功响应的源答案是否完全一致(比较记录值集合与状态,不比较 TTL;出错的源不参与)。注意:使用 GeoDNS / CDN 的域名在不同地区本就会返回不同 IP,此时不一致是正常现象,不代表未生效
  • total(number):查询的源数量
  • responded(number):成功得到 DNS 答复的源数量(含 nxdomain、empty)
  • failed(number):查询失败(超时、HTTP 错误、SERVFAIL 等)的源数量
  • majority(object|null):最多源给出的答案(即 groups 的第一组);全部失败时为 null
  • majority.status(string):该答案的状态:ok 有记录 / empty 域名存在但无该类型记录 / nxdomain 域名不存在
  • majority.values(array):该答案的记录值(已规范化并排序);empty / nxdomain 时为空数组
  • majority.sources(array):给出该答案的源 id 列表
  • majority.count(number):给出该答案的源数量
  • majority.tie(boolean):是否有其他答案与它票数相同(并列时取源顺序靠前的一组)
  • groups(array):按答案分组(相同答案的源归为一组),按源数量从多到少排列;出错的源不计入
  • groups[].status(string):该组答案的状态:ok / empty / nxdomain
  • groups[].values(array):该组的记录值(已规范化并排序)
  • groups[].sources(array):该组包含的源 id
  • groups[].count(number):该组的源数量
  • sources(array):每个 DoH 源的查询结果,顺序固定
  • sources[].id(string):源 id:google / cloudflare / alidns / dnspod / quad9 / adguard / nextdns
  • sources[].name(string):源名称
  • sources[].location(string):服务节点分布(Anycast 表示按访问者就近接入,本服务器所在地区决定实际节点)
  • sources[].endpoint(string):查询的 DoH JSON 接口地址
  • sources[].verified(boolean):该接口是否已确认支持 DoH JSON 格式;false 表示未经确认,若不支持会显示为 error
  • sources[].status(string):查询状态:ok 有记录 / empty 域名存在但没有该类型记录 / nxdomain 域名不存在 / error 查询失败
  • sources[].rcode(number|null):DNS 响应码:0 NOERROR、2 SERVFAIL、3 NXDOMAIN、5 REFUSED 等;请求失败未得到 DNS 答复时为 null
  • sources[].records(array):与查询类型一致的记录(CNAME 链中的中间记录不含在内),按值排序、去重
  • sources[].records[].value(string):记录值(规范化后):A / AAAA 为 IP;CNAME / NS 为小写且去掉末尾点的域名;MX 为"优先级 邮件服务器";TXT 已去掉引号并拼接分段
  • sources[].records[].ttl(number|null):该源返回的剩余 TTL(秒):递归服务器缓存的剩余时间,各源不同属正常;未返回时为 null
  • sources[].ms(number):该源查询耗时(毫秒,含 HTTPS 连接)
  • sources[].error(string|null):失败原因的中文说明(如"查询超时(5 秒)""HTTP 400""DNS 返回 SERVFAIL");成功时为 null