Wireshark 抓包 HTTP 实验¶
大二下,计网作业。
解密 HTTPS¶
现在网站基本都用 HTTPS,HTTPS 用了 TLS 做加密,需要解密后才能看到原始的 HTTP 报文。
Chrome 和 Firefox 浏览器提供了记录 TLS 密钥的功能。添加环境变量 SSLKEYLOGFILE
,值为一个文件路径。彻底重启浏览器(任务管理器里检查),TLS 密钥相关的信息就会被保存到这个文件中。
在 Wireshark 中,点击编辑 > 首选项,找到 Protocols > TLS 中的 (Pre)-Master-Secret log filename 填入之前的文件路径就能解密 HTTPS 了。
过滤¶
设置过滤表达式 http || http2 || http3 || tcp
,然后去浏览器打开 https://www.baidu.com 过一会再关闭。
回到 Wireshark,找到协议为 TLSv1.2 的 Client Hello (SNI=www.baidu.com)
,得知目标的 ip 地址为 110.242.68.3。
更新过滤表达式为 (http || http2 || http3 || tcp) && (ip.src == 110.242.68.3 || ip.dst == 110.242.68.3)
。
数据包分析¶
应用层¶
应用层使用 HTTP。
-
请求行,方法为
GET
,URL 为/
,版本为HTTP/1.1
GET / HTTP/1.1
-
请求头
Host: www.baidu.com Connection: keep-alive sec-ch-ua: "Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br, zstd Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Cookie: ...
-
空行
- 主体(这里没有)
传输层¶
传输层使用 TCP。
- 源始端口:
e9 88
(59784 端口) - 目的端口:
01 bb
(443 端口) - 序列号:
85 ad cd ce
(2242760142) - 确认号:
df cc 85 0f
(3754722575) - 偏移:
5
(头部长度为 5*4=20 字节) - 保留:
0
- 标志:
18
(ACK 和 PSH) - 窗口大小:
02 03
(515) - 校验和:
01 6d
- 紧急指针:
00 00
网络层¶
网络层使用 IP。
- 版本:
4
(表示 IPv4) - 头长:
5
(头部长度为 5*4=20 字节) - 服务类型:
00
(默认) - 包裹总长:
0000
(IP 数据包总长 0 字节,可能是 TSO 的原因) - 重组标识:
cacf
(51919,发送主机赋予的标识,以便接收方进行分片重组) - 标志(3 位)段偏移量(13 位):
4000
(标志:不分片,段偏移量:0) - 生存时间:
80
(128,每经过一个路由器,该值就减一,到零丢弃) - 协议代码:
06
(表示 TCP 协议) - 头校验和:
0000
(没开启校验) - 源始地址:
0ac643ab
(10.198.67.171) - 目的地址:
6ef24403
(110.242.68.3)
数据链路层¶
数据链路层使用 Ethernet II。
- 目的 MAC 地址:
b0 76 1b 21 30 ab
(b0:76:1b:21:30:ab) - 源始 MAC 地址:
54 6c eb b3 0b 05
(54:6c:eb:b3:0b:05) - 类型:
08 00
(表示 IPv4)
TCP 连接建立¶
- 客户端(10.198.67.171)向百度(110.242.68.3)发送第一个段,SYN 被置位,序列号为 2242758111(相对值 0)。
- 百度(110.242.68.3)向客户端(10.198.67.171)发送第二个段,SYN 和 ACK 被置位,序列号为 3754722416(相对值 0),确认号为 2242758112(相对值 1)。
- 客户端(10.198.67.171)向百度(110.242.68.3)发送第三个段,ACK 被置位,序列号为 2242758112(相对值 1),确认号为 3754722417(相对值 1)。
经过三次握手,TCP 连接建立。
TCP 连接终止¶
- 客户端(10.198.67.171)向百度(110.242.68.3)发送第一个段,FIN 和 ACK 被置位,序列号为 2242765910(相对值 7799),确认号为 3754841098(相对值 118682)。
- 百度(110.242.68.3)向客户端(10.198.67.171)发送第二个段,ACK 被置位,序列号为 3754841098(相对值 118682),确认号为 2242765911(相对值 7800)。
- 百度(110.242.68.3)向客户端(10.198.67.171)发送剩余的数据,图中为 TLS 的关闭通知。
- 百度(110.242.68.3)向客户端(10.198.67.171)发送第三个段,FIN 和 ACK 被置位,序列号为 3754841129(相对值 118713),确认号为 2242765911(相对值 7800)。
- 客户端(10.198.67.171)向百度(110.242.68.3)发送第四个段,ACK 被置位,序列号为 2242765911(相对值 7800),确认号为 3754841130(相对值 118714)。
经过四次握手,TCP 连接终止。