使用 DoH 查询域名 —— 以 core.tantanapp.com 为例的实战分析

前言

在现代 iOS 应用中,为了确保 DNS 查询的隐私和完整性,我们可以使用 DoH(DNS over HTTPS) 来查询域名信息。

本文将以 https://cloudflare-dns.com/dns-query?name=core.tantanapp.com&type=A 为例,通过 Postman 发起一次标准的 DoH GET 请求,完整解析请求与响应内容,并深入讲解相关概念,比如:

  • type=A 的含义
  • 响应中 TTL 的作用
  • 结果如何理解
  • 代码+注释逐行讲解
  • 插图帮助理解域名解析跳转流程

请求分析

在 Postman 中,你发送了如下请求:

http 复制代码
GET https://cloudflare-dns.com/dns-query?name=core.tantanapp.com&type=A
Accept: application/dns-json

请求参数详解:

参数 说明
name 要查询的域名(这里是 core.tantanapp.com
type=A 查询类型是 A 记录(即获取 IPv4 地址)
Accept 请求头部,告诉服务器返回 JSON 格式的 DNS 响应

什么是 type=A

在 DNS 协议中,每个查询都有一个 "Type",指明你想要查询什么类型的资源。

Type 含义
A 查询域名对应的 IPv4 地址
AAAA 查询域名对应的 IPv6 地址
CNAME 查询域名的别名记录
MX 查询邮件服务器记录
TXT 查询文本信息记录

在这里,type=A 意味着我们想要查找 core.tantanapp.comIPv4 地址,即标准的访问 IP 地址。

✅ 这通常是 Web App、移动 App 访问服务器最常见的查询类型。


响应内容分析

服务器返回了以下 JSON 数据(已格式化并加注释):

json 复制代码
{
    "Status": 0,            // 0 表示查询成功
    "TC": false,            // TC = Truncated, 没有被截断
    "RD": true,             // RD = Recursion Desired, 允许递归查询
    "RA": true,             // RA = Recursion Available, 服务器支持递归查询
    "AD": false,            // AD = Authenticated Data, 响应未使用 DNSSEC 验证
    "CD": false,            // CD = Checking Disabled, 检查未禁用
    "Question": [
        {
            "name": "core.tantanapp.com",
            "type": 1          // 1 = A记录
        }
    ],
    "Answer": [
        {
            "name": "core.tantanapp.com",
            "type": 5,         // 5 = CNAME(别名)
            "TTL": 67,         // 生存时间,秒
            "data": "core.cf.vip.tantanapp.com."
        },
        {
            "name": "core.cf.vip.tantanapp.com",
            "type": 5,
            "TTL": 67,
            "data": "core.tantanapp.com.cdn.cloudflare.net."
        },
        {
            "name": "core.tantanapp.com.cdn.cloudflare.net",
            "type": 1,
            "TTL": 247,
            "data": "104.18.11.175"
        },
        {
            "name": "core.tantanapp.com.cdn.cloudflare.net",
            "type": 1,
            "TTL": 247,
            "data": "104.18.10.175"
        }
    ]
}

响应字段重点解释

1. Status = 0

  • 0 表示查询成功。
  • 如果返回其他值,比如 3(Name Error),就表示域名不存在。

2. Answer 数组

DNS 查询的最终结果都在 Answer 中。

第一条记录:
  • name: core.tantanapp.com
  • type: 5 → 表示是 CNAME(别名)记录
  • data: core.cf.vip.tantanapp.com.

👉 说明 core.tantanapp.com 并没有直接绑定 IP,而是指向了 core.cf.vip.tantanapp.com

第二条记录:
  • name: core.cf.vip.tantanapp.com
  • type: 5 → 再次是 CNAME(别名)
  • data: core.tantanapp.com.cdn.cloudflare.net

👉 继续跳转,最终指向 Cloudflare 的 CDN 域名。

第三、四条记录:
  • name: core.tantanapp.com.cdn.cloudflare.net
  • type: 1 → 这才是最终的 A 记录
  • data: 104.18.11.175104.18.10.175

👉 终于拿到最终的服务器 IPv4 地址!


什么是 TTL?

每条记录里都有一个 TTL 字段,比如 67 秒 或 247 秒。

  • TTL(Time To Live) 表示这条 DNS 记录在缓存中可以保存多久(单位:秒)。
  • 过期后客户端必须重新查询 DNS,获取最新的 IP 地址。

📌 举例:

如果 TTL = 67,表示 67 秒内你都可以直接使用缓存 IP,不用再次请求 DNS 服务器。

这可以显著减少延迟和服务器压力,同时在 IP 改变时能够及时刷新。


整体解析跳转流程图

为了更直观理解,我们用一个简单流程图总结整个解析过程:

复制代码
[core.tantanapp.com]
         ↓ (CNAME)
[core.cf.vip.tantanapp.com]
         ↓ (CNAME)
[core.tantanapp.com.cdn.cloudflare.net]
         ↓ (A记录)
[104.18.11.175] 和 [104.18.10.175]

小结

通过本次 Postman 测试,我们清楚了解了:

项目 内容
查询类型 A,查询域名对应的 IPv4 地址
返回数据 包含多层 CNAME 跳转,最终指向真实 IP
TTL 每条记录缓存的有效时间(秒)
使用场景 验证 App 的请求路径、抵御 DNS 劫持、缓存优化

掌握这种查询和解析流程,对于网络安全、性能优化和网络故障排查,都是非常实用的技能!


相关推荐
天桥吴彦祖1 天前
判断iOS如何监听手机屏幕是否锁屏
ios
敲代码的鱼2 天前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios
时光足迹2 天前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
时光足迹2 天前
JPush UniApp UTS 插件完全参考手册:API、事件与厂商通道一网打尽
vue.js·ios·uni-app
时光足迹2 天前
极光推送全攻略(下):uni-app 代码实现与 iOS 排查实战
vue.js·ios·uni-app
时光足迹2 天前
极光推送全攻略(上):被iOS证书折磨了三天,我写了一份前端也能看懂的避坑指南
前端·ios·uni-app
编程范式3 天前
SwiftUI 中图片如何适配可用空间
ios
songgeb5 天前
启发式 UI 自动化:从线性剧本到每步读屏决策
ios·测试
赵文宇6 天前
CoreDNS大屏看板、监控、和企业微信告警通知
dns
壹方秘境9 天前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios