云计算百科
云计算领域专业知识百科平台

Wireshark 抓包实战:从 DNS 解析到 HTTPS 加密全解析

Wireshark 抓包实战:从 DNS 解析到 HTTPS 加密全解析> 实验环境:Kali Linux 2026 + Wireshark + MariaDB 11 + Pikachu 靶场

目标:理解 DNS 解析过程、HTTPS 加密原理、以及生产环境 HTTP 安全头部配置


一、前言

理解"域名如何变成 IP"、"HTTPS 为什么比 HTTP 安全"是基本功。本文通过 Wireshark 抓包,从数据包层面观察:

  • DNS 查询的真实过程(不是简单的"域名→IP")
  • HTTP 明文传输 vs HTTPS 加密传输的差异
  • 生产环境(百度/知乎/GitHub)的 HTTP 安全头部配置对比

  • 二、实验环境

    组件版本/说明
    Kali Linux 2026.x
    Wireshark 内置最新版
    网络接口 eth0(VMware NAT)
    测试工具 dig、curl

    三、DNS 抓包分析

    3.1 启动 Wireshark

    sudo wireshark &

    选择 eth0 接口(访问外网流量),开始抓包。

    Wireshark启动界面

    3.2 过滤 DNS 流量

    过滤栏输入:

    udp.port == 53

    DNS流量过滤
    为什么用 UDP 53? DNS 查询默认走 UDP 53 端口,数据量小、速度快。只有响应超过 512 字节时才切换 TCP。

    3.3 触发 DNS 查询

    浏览器访问外网可能走系统 DNS 缓存,抓不到查询过程。使用 dig 强制触发:

    dig @8.8.8.8 example.com

    3.4 分析 DNS 包

    查询包(Standard query):

    • Queries:查询的域名和类型
    • Flags:Recursion desired: Do query recursively(递归查询)

    DNS查询包

    响应包(Standard query response):

    DNS响应包
    Answers 详情:

    在这里插入图片描述

    3.5 DNS 解析链分析

    以 www.ctrip.com 为例,真实的解析过程不是"一步到 IP",而是 CNAME 链式跳转:

    www.ctrip.com
    → CNAME → cert1.c1.geo.ctripgslb.net
    → CNAME → std.c1.default.acc.ctripgslb.net
    → CNAME → dinixodcdwbrky.wsglb0.com
    → A 记录 → 61.163.112.24
    → A 记录 → 58.144.228.126

    关键发现:

    • 经过 3 层 CNAME 才到实际 IP
    • 返回了 2 个 IP 地址(负载均衡/高可用)
    • 这是典型的 CDN 架构

    四、HTTP vs HTTPS 对比抓包

    Wireshark 抓包时如果不加过滤,会同时抓到 TCP、UDP、ARP、ICMP 等大量无关流量,根本找不到目标。过滤表达式的作用就是"只显示我关心的协议和端口"。

    4.1 HTTP 明文抓包(tcp.port == 80)

    为什么用 tcp.port == 80?

    • 80 端口是 HTTP 协议的默认端口
    • 浏览器访问 http:// 开头的网站时,默认向服务器的 80 端口发起 TCP 连接
    • 过滤后 Wireshark 只显示 80 端口的流量,排除其他干扰,方便定位 HTTP 请求和响应

    过滤条件:

    tcp.port == 80

    浏览器访问:

    http://httpbin.org/get

    结果: Wireshark 中能看到明文 HTTP 请求和响应,包括 URL、Header、Body 内容。

    在这里插入图片描述

    4.2 HTTPS 加密抓包(tcp.port == 443)

    为什么用 tcp.port == 443?

    • 443 端口是 HTTPS 协议的默认端口
    • 浏览器访问 https:// 开头的网站时,默认向服务器的 443 端口发起 TLS 握手
    • 过滤后只显示 443 端口的流量,可以清晰观察到 TLS 握手过程(ClientHello、ServerHello、Certificate 等)
    • 与 80 端口对比,能直观看到"同样都是 HTTP 应用层数据,为什么一个明文一个密文"

    过滤条件:

    tcp.port == 443

    浏览器访问:

    https://www.baidu.com

    结果: 只能看到 TLS 握手过程,Application Data 是加密的,无法直接读取内容。

    在这里插入图片描述

    观察到的 TLSv1.2 握手过程:

  • Server Key Exchange(服务器发送公钥)
  • Client Key Exchange(客户端发送预主密钥)
  • New Session Ticket(会话票据)
  • Application Data(加密后的应用数据)
  • 4.3 核心对比

    维度HTTPHTTPS
    端口 80 443
    协议 HTTP TLS + HTTP
    能否看到内容 ✅ 明文可见 ❌ 加密不可见
    安全性 低,中间人可窃听 高,加密传输

    结论: HTTPS 通过 TLS 握手协商加密密钥,后续所有 HTTP 数据都是密文传输,防止中间人窃听。


    五、HTTP 安全头部对比分析

    5.1 检查方法

    使用 curl -I 查看响应头:

    curl -I https://www.baidu.com
    curl -I https://www.zhihu.com
    curl -I https://github.com
    curl -I http://localhost/pikachu/

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.2 实测结果对比

    检查项百度知乎GitHubPikachu(本地靶场)
    X-Frame-Options ❌ 缺失 ❌ 缺失 ✅ deny ❌ 缺失
    CSP ❌ 缺失 ❌ 缺失 ✅ 非常完善 ❌ 缺失
    HSTS ❌ 缺失 ❌ 缺失 ✅ max-age=31536000; includeSubdomains; preload ❌ 缺失
    X-Content-Type-Options ❌ 缺失 ❌ 缺失 ✅ nosniff ❌ 缺失
    Referrer-Policy ❌ 缺失 ⚠️ no-referrer-when-downgrade ✅ strict-origin-when-cross-origin ❌ 缺失
    Server 头 ⚠️ bfe(隐藏版本) ⚠️ BLB/25.12.0.2 ✅ github.com(无版本) ❌ Apache/2.4.68 (Debian)(暴露版本!)
    Cookie HttpOnly ❌ 无 ❌ 无 ✅ 有 ❌ 无
    Cookie Secure ⚠️ 部分有 ❌ 无 ✅ 有 ❌ 无

    5.3 关键发现

    GitHub(安全配置标杆):

    • strict-transport-security: max-age=31536000; includeSubdomains; preload
    • x-frame-options: deny
    • x-content-type-options: nosniff
    • content-security-policy 极长,限制极严格
    • Cookie 同时设置了 HttpOnly + secure + SameSite=Lax

    百度/知乎(国内网站典型配置):

    • 安全头部较少
    • 但百度隐藏了 Server 版本(bfe 是百度自研负载均衡),属于基本的信息泄露防护

    Pikachu 靶场(故意不设防):

    • Server: Apache/2.4.68 (Debian) → 信息泄露
    • 无任何安全头部 → 这是靶场故意设计的漏洞,方便练习攻击

    六、HTTP 安全头部检查清单(实用工具)

    基于今天的分析,整理一份可复用的检查清单:

    #检查项检查命令合格标准风险修复方法
    1 X-Frame-Options curl -I 有 DENY/SAMEORIGIN header(“X-Frame-Options: DENY”);
    2 CSP curl -I 有 CSP 策略 header(“CSP: default-src ‘self’”);
    3 HSTS curl -I 有 HSTS 头 header(“HSTS: max-age=31536000”);
    4 X-Content-Type-Options curl -I 有 nosniff header(“X-Content-Type-Options: nosniff”);
    5 Referrer-Policy curl -I 有 Referrer-Policy header(“Referrer-Policy: strict-origin”);
    6 Server 头隐藏 curl -I 不暴露版本 Apache: ServerTokens Prod; ServerSignature Off;
    7 Cookie HttpOnly 浏览器 F12 Set-Cookie 有 HttpOnly setcookie(…, [‘httponly’ => true]);
    8 Cookie Secure 浏览器 F12 Set-Cookie 有 Secure setcookie(…, [‘secure’ => true]);

    七、思考

  • 安全是配置出来的:GitHub 的 CSP 策略那么长,不是一次写成的,而是长期对抗 XSS 攻击的积累。
  • Server 头泄露版本是低级错误,但现实中大量网站存在。Apache 改两行配置就能解决,却很少有人做。
  • DNS 不是简单的"域名→IP":CNAME 链、负载均衡、CDN 回源,这些架构知识对理解真实攻击面很重要。
  • HTTPS 不是可选项:HTTP 明文传输下,Cookie、Token、密码全部暴露。TLS 1.3 比 1.2 少一次 RTT,对移动端意义重大。

  • 八、总结

    本文通过 Wireshark 抓包,从数据包层面观察了:

  • DNS 解析:CNAME 链式跳转 + A 记录最终解析
  • HTTP 明文:所有内容可见,无隐私保护
  • HTTPS 加密:TLS 握手协商密钥,Application Data 不可读
  • 安全头部:GitHub 配置最完善,国内网站普遍较少,靶场故意不设防
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Wireshark 抓包实战:从 DNS 解析到 HTTPS 加密全解析
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!