使用 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 劫持、缓存优化

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


相关推荐
2501_9159214319 小时前
iOS 抓不到包怎么办?工程化排查与替代抓包方案(抓包/HTTPS/Charles代理/tcpdump)
android·ios·小程序·https·uni-app·iphone·tcpdump
taokexia21 小时前
SwiftUI 组件开发: 自定义下拉刷新和加载更多(iOS 15 兼容)
ios·swift
2501_915918411 天前
Fiddler抓包工具详解,HTTP/HTTPS抓包、代理设置与调试技巧一站式教程(含实战案例)
http·ios·小程序·https·fiddler·uni-app·webview
库奇噜啦呼1 天前
【iOS】UICollectionView
macos·ios·cocoa
qixingchao1 天前
iOS Swift 线程开发指南
ios·swift
AirDroid_cn1 天前
在 iOS 18 离线徒步地图,如何存储和调用?
ios
2501_915909061 天前
iOS 发布 App 全流程指南,从签名打包到开心上架(Appuploader)跨平台免 Mac 上传实战
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915918412 天前
HTTP抓包工具推荐,Fiddler使用教程、代理设置与调试技巧详解(含HTTPS配置与实战案例)
http·ios·小程序·https·fiddler·uni-app·webview