简介:本资源是一份面向计算机网络初学者与实践者的Wireshark应用层协议分析报告,聚焦HTTP/HTTPS、SMTP/POP3/IMAP、FTP及DNS等核心协议的抓包解析,助力理解协议交互逻辑与网络安全差异。文档为单文件Word格式(.docx),共1个文件,大小891KB,内容结构清晰,涵盖引言、四大协议模块分析(含报文结构、命令响应示例、空闲/繁忙网络对比)、DNS递归解析图解及总结反思,附有实验截图位置标注与实操提示。已有247人学习下载,适合课程实验复盘、课设报告参考或自学巩固——读者可直接获取完整分析框架、典型报文解读要点、协议对比维度(如安全性、时序特征、客户端/网页版差异)及可延伸完善的实践路径,无需从零整理笔记。
1. Wireshark 应用层抓包分析报告:一份能直接复现的协议解剖手册,专治 HTTP/HTTPS/DNS/SMTP/FTP 理解模糊症
你有没有试过:打开 Wireshark,抓了一堆包,点开一个 HTTP 流,看到几十行GET /api/v1/user?token=xxx,却说不清Host字段在哪一层生效、Connection: keep-alive怎么影响 TCP 连接复用、为什么 HTTPS 的Client Hello里没有 URL?——这不是你基础差,是缺一份带真实报文截图位置、字段逐字标注、错误操作反例、且所有步骤在 Win10/Win11/Linux 下可 100% 复现的落地文档。这份.docx报告不是教学 PPT,它是一线网络工程师拆解应用层协议时的真实工作笔记:从抓包前必须关闭的 Windows Defender 防御项,到 DNS 解析失败时如何用tshark -Y "dns && !tcp.analysis.retransmission"过滤重传干扰;从 SMTP 认证失败时AUTH LOGIN基础64解码的血泪经验,到 FTP 主动模式下PORT命令里 IP 地址字节序翻车现场。它不讲 OSI 七层理论,只告诉你——当浏览器地址栏敲下https://example.com后,Wireshark 里第 3 个 TLS 握手包的Cipher Suite字段值,为什么必须是TLS_AES_128_GCM_SHA256而不是TLS_RSA_WITH_AES_128_CBC_SHA(否则 Chrome 会直接断连)。适合刚学完《计算机网络》但面对真实流量仍两眼一抹黑的 CS 专业学生、转岗做网络运维的开发、以及需要给客户出具协议分析报告的售前工程师。
提示:本报告所有分析均基于 Wireshark 4.2.x(2023 年主流稳定版),不兼容 2.x 旧版本;
.docx文件内嵌 12 张实测截图(图1–图12),每张图均标注了关键字段坐标(如“图7:DNS 响应报文第2行,Flags=0x8180”),非示意草图。
2. HTTP 与 HTTPS 抓包实战:从明文请求到 TLS 握手,看清每一字节的来龙去脉
2.1 抓包前的三步强制准备:绕过现代浏览器的 TLS 干扰
现代浏览器(Chrome/Firefox/Edge)默认启用 HTTP/2 和 QUIC,且对 HTTPS 流量做证书预加载和连接复用,直接抓包会看到大量HTTP/2 HEADERS帧或QUIC协议,根本看不到传统 HTTP 文本结构。必须先做三件事:
禁用 HTTP/2 和 QUIC(以 Chrome 为例):
在 Chrome 启动快捷方式目标末尾添加参数:--disable-http2 --disable-quic --unsafely-treat-insecure-origin-as-secure="http://127.0.0.1:8080" --user-data-dir=C:\temp\chrome-profile说明:
--disable-http2强制降级为 HTTP/1.1;--disable-quic关闭 UDP 传输;--unsafely-treat...允许本地 HTTP 站点绕过混合内容拦截;--user-data-dir隔离配置避免影响日常浏览。关闭 Windows Defender 实时防护(关键!):
Wireshark 在 Win10/11 上抓 HTTPS 流量时,Defender 会拦截SSLKEYLOGFILE导出的密钥日志,导致 TLS 解密失败。临时关闭命令:Set-MpPreference -DisableRealtimeMonitoring $true注意:仅在抓包期间关闭,结束后立即恢复
Set-MpPreference -DisableRealtimeMonitoring $false配置 TLS 密钥日志文件路径:
在 Chrome 启动参数中加入:--ssl-key-log-file=C:\wireshark\sslkey.log然后在 Wireshark 中设置:
Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log filename指向该路径。参数说明:
sslkey.log是 Chrome 将 TLS 会话密钥以 NSS 格式写入的文件,Wireshark 读取后才能解密 HTTPS 流量。若路径错误或权限不足,Wireshark 会显示Encrypted Application Data而非明文 HTTP。
2.2 HTTP 报文结构精解:用 Wireshark 定位请求/响应的 4 个核心区域
抓取http://httpbin.org/get?foo=bar后,在 Wireshark 中右键某 HTTP 流 →Follow → HTTP Stream,得到纯文本视图。此时需手动对照 RFC 7230 定位四部分:
| 区域 | 位置示例(Wireshark 显示) | 字段说明 |
|---|---|---|
| 请求行 | GET /get?foo=bar HTTP/1.1\r\n | 方法(GET)、路径+查询参数(/get?foo=bar)、协议版本(HTTP/1.1) |
| 请求头 | Host: httpbin.org\r\nUser-Agent: curl/7.81.0\r\n | Host必须存在(HTTP/1.1 强制),User-Agent标识客户端,Accept告知服务端可接受格式 |
| 空行 | \r\n | 分隔头部与主体的唯一标志,Wireshark 会高亮显示 |
| 请求体(可选) | (空) | GET 无请求体;POST 有,如{"name":"test"},Wireshark 会显示Line-based text data |
逻辑说明:Wireshark 默认将 HTTP 解析为
Hypertext Transfer Protocol协议树,展开后可逐层查看Request URI、Request Method、Response Status Code等字段。但注意:Follow HTTP Stream视图是重组后的文本,而协议树视图才是原始字节流——调试编码问题(如中文乱码)必须看协议树中的Line-based text data十六进制值。
2.3 HTTPS TLS 握手四步拆解:从 Client Hello 到 Application Data
启用sslkey.log后,HTTPS 流量可解密。抓取https://httpbin.org/get,过滤tls,观察握手过程:
Client Hello(Wireshark 过滤:
tls.handshake.type == 1):Handshake Protocol: Client Hello Handshake Type: Client Hello (1) Length: 219 Version: TLS 1.2 (0x0303) Random: 3e7a... (32 bytes) Session ID: 00... (32 bytes) Cipher Suites: 16 suites (e.g., TLS_AES_128_GCM_SHA256) Compression Methods: 1 method (null) Extensions: 11 extensions (e.g., server_name, supported_groups)关键点:
Version字段决定后续协商能力;Cipher Suites列表是客户端支持的加密套件,服务端从中选择一个;server_name扩展(SNI)告诉服务端要访问的域名,这是虚拟主机托管的基础。Server Hello + Certificate + Server Key Exchange + Server Hello Done:
服务端返回选定的Cipher Suite、随机数、证书链(含根证书路径)、密钥交换参数。Wireshark 中展开Certificate可见Issuer(颁发者)、Subject(域名)、Validity(有效期)。Client Key Exchange + Change Cipher Spec + Encrypted Handshake Message:
客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送;双方切换至加密通信。Application Data:
此后所有 HTTP 报文被 AES-GCM 加密,Wireshark 解密后显示为明文GET /get HTTP/1.1。
参数说明:若握手失败(如
Alert: Handshake Failure),重点检查Cipher Suites是否匹配(服务端不支持客户端提出的套件)、证书是否过期(Validity字段)、SNI 域名是否正确(server_name扩展值)。
3. 邮件协议抓包对比:SMTP 发送 vs POP3/IMAP 收取,看清命令级差异
3.1 SMTP 发送全流程:从 HELO 到 QUIT 的 7 步交互
使用 Thunderbird 或 Outlook 配置 SMTP 服务器(如smtp.gmail.com:587),发送一封测试邮件。Wireshark 过滤tcp.port == 587 and smtp,得到明文交互(STARTTLS 后为加密流,需配置密钥日志):
C: EHLO [your-domain] # 客户端标识自身 S: 250-smtp.gmail.com # 服务端响应支持的扩展 C: AUTH LOGIN # 请求认证 S: 334 VXNlcm5hbWU6 # Base64 编码提示:Username: C: dXNlcjEyc3Q= # Base64 用户名(解码:user123) S: 334 UGFzc3dvcmQ6 # Base64 编码提示:Password: C: cGFzc3dvcmQxMjM= # Base64 密码(解码:password123) C: MAIL FROM:<user@domain.com> # 指定发件人 C: RCPT TO:<to@domain.com> # 指定收件人 C: DATA # 开始发送邮件内容 S: 354 Go ahead # 服务端准备接收 C: From: user@domain.com # 邮件头(RFC 5322 格式) C: To: to@domain.com C: Subject: Test C: C: Hello World! # 邮件正文,空行分隔头与体 C: . # 单独一行句号结束 DATA S: 250 OK # 发送成功 C: QUIT # 断开连接逻辑说明:SMTP 是命令驱动协议,每条命令必须等待服务端
2xx/3xx/4xx/5xx响应后才能发下一条。EHLO后的250-行表示支持的扩展(如AUTH LOGIN、STARTTLS);DATA后的.是 SMTP 协议规定的结束符,不是句号本身——若正文含单独一行.,需转义为..。
3.2 POP3 与 IMAP 协议结构对比:下载 vs 同步的本质区别
抓取同一邮箱在 Thunderbird(POP3)和 Apple Mail(IMAP)下的登录行为,对比协议树:
| 特性 | POP3(端口 110) | IMAP(端口 143) |
|---|---|---|
| 核心目标 | 将邮件下载到本地并删除服务器副本 | 在服务器上管理邮件状态(已读/未读/标记/移动) |
| 典型命令序列 | USER→PASS→LIST→RETR 1→DELE 1→QUIT | LOGIN→SELECT INBOX→FETCH 1 BODY[HEADER]→STORE 1 +FLAGS \Seen→LOGOUT |
| 状态同步 | 无状态:每次连接独立,服务器不保存客户端操作记录 | 有状态:UIDVALIDITY和UID保证邮件唯一标识,FLAGS同步已读状态 |
| 多设备支持 | 差:邮件下载后即从服务器删除,其他设备无法获取 | 强:所有操作实时反映在服务器,多终端一致 |
参数说明:POP3 的
RETR 1获取第 1 封邮件全文,DELE 1标记删除(实际删除在QUIT后);IMAP 的FETCH 1 BODY[HEADER]仅获取邮件头,BODY[TEXT]获取正文,BODY.PEEK[HEADER]不改变\Seen标志——这是 IMAP 节省带宽的关键设计。
3.3 避坑:邮件协议抓包常见问题排查
现象:SMTP 抓包看不到 AUTH 命令,全是EHLO→MAIL FROM直接跳过认证
原因:客户端启用了 OAuth2 或应用专用密码(App Password),而非传统AUTH LOGIN。Gmail 等现代邮箱已弃用明文密码认证。
解决:改用支持 OAuth2 的客户端(如 Thunderbird 配置 Gmail 时选择OAuth2认证),或启用应用专用密码(Google Account → Security → App passwords)。
现象:POP3 抓包显示+OK但LIST命令后无响应,Wireshark 显示TCP Retransmission
原因:服务器要求 STARTTLS 加密,但客户端未发送STLS命令就直接发USER。POP3 明文传输已被主流服务商禁用。
解决:在USER前插入STLS命令(Wireshark 过滤pop && tcp.port == 110,确认STLS响应为+OK Begin TLS negotiation)。
现象:IMAPSELECT INBOX返回NO [NONEXISTENT] Mailbox does not exist
原因:邮箱服务商使用非标准文件夹名(如 Gmail 的[Gmail]/All Mail),而非INBOX。
解决:先发LIST "" "*"获取服务器支持的文件夹列表,再SELECT对应名称。
现象:抓包看到AUTH PLAIN但 Base64 解码后是乱码(如AHVzZXJAZG9tYWluLmNvbQBwYXNzd29yZDEyMw==)
原因:AUTH PLAIN格式为\0username\0password,Base64 解码后需按\0分割。上述字符串解码为user@domain.com\0password123。
解决:用 Python 快速解析:
import base64 s = "AHVzZXJAZG9tYWluLmNvbQBwYXNzd29yZDEyMw==" decoded = base64.b64decode(s) parts = decoded.split(b'\x00') print(f"Username: {parts[1].decode()}, Password: {parts[2].decode()}")现象:Wireshark 显示 SMTP 流为TCP segment of a reassembled PDU,无法看到完整命令
原因:TCP 分段(MSS 限制)导致单条命令被拆成多个 TCP 包,Wireshark 默认不重组。
解决:Edit → Preferences → Protocols → TCP → Allow subdissector to reassemble TCP streams勾选,重启 Wireshark。
4. FTP 协议双通道抓包:控制连接与数据连接的协同机制
4.1 FTP 主动模式(PORT)与被动模式(PASV)的报文特征
FTP 使用两个 TCP 连接:控制连接(21端口)传输命令,数据连接(动态端口)传输文件。Wireshark 过滤ftp || ftp-data可同时看到两者。
主动模式(PORT)流程:
- 客户端连接服务器 21 端口(控制连接)
- 客户端发
PORT 192,168,1,100,4,10(表示192.168.1.100:1034,因4*256+10=1034) - 服务器主动连接客户端指定的
192.168.1.100:1034(数据连接) - 传输
LIST或RETR file.txt数据
关键点:
PORT命令中 IP 地址字节序为点分十进制,端口号为高位字节+低位字节(h*256+l)。Wireshark 解析FTP Request: PORT时会自动计算端口值。
被动模式(PASV)流程:
- 客户端连接服务器 21 端口(控制连接)
- 客户端发
PASV - 服务器响应
227 Entering Passive Mode (192,168,1,100,4,10)(同PORT格式) - 客户端连接服务器
192.168.1.100:1034(数据连接)
逻辑说明:被动模式解决 NAT/防火墙问题——服务器不再主动连客户端,而是让客户端连自己。Wireshark 中
PASV响应的(a,b,c,d,e,f)解析同PORT,e*256+f为端口号。
4.2 FTP 命令与响应的字段映射:从 USER 到 STOR 的状态机
FTP 是状态协议,每个命令改变会话状态。抓包后按ftp.request.command过滤,观察状态流转:
| 命令 | 典型响应 | 状态变化 | Wireshark 字段示例 |
|---|---|---|---|
USER | 331 | 进入认证态(等待 PASS) | FTP Request: USER anonymous |
PASS | 230 | 登录成功,进入工作态 | FTP Response: 230 Login successful |
PWD | 257 | 返回当前目录 | FTP Response: 257 "/home/user" is current directory |
LIST | 150→226 | 数据连接建立 → 目录列表传输完成 | FTP Request: LIST+FTP Data: ... |
RETR file | 150→226 | 数据连接建立 → 文件传输完成 | FTP Request: RETR test.txt |
STOR file | 150→226 | 数据连接建立 → 文件上传完成 | FTP Request: STOR new.txt |
参数说明:
150表示“文件状态 OK,开始数据连接”,226表示“数据连接关闭,传输完成”。Wireshark 将150和226响应与对应的数据流关联,点击226可直接Follow FTP Data Stream查看传输内容。
4.3 避坑:FTP 抓包疑难杂症定位
现象:LIST命令后 Wireshark 显示FTP Data流,但内容为空或乱码
原因:数据连接使用二进制模式(TYPE I),但 Wireshark 默认按 ASCII 解析。
解决:右键FTP Data包 →Decode As → Raw,或过滤ftp-data && frame.len > 100排除控制字符。
现象:PASV响应中(a,b,c,d,e,f)的 IP 地址是0,0,0,0
原因:服务器配置错误,或客户端防火墙拦截了PASV响应。
解决:检查服务器vsftpd.conf中pasv_address是否设为公网 IP;用telnet server-ip 21手动发PASV看响应。
现象:Wireshark 抓到PORT命令,但无后续数据连接(tcp.port == 1034流)
原因:客户端防火墙阻止服务器反向连接,或服务器路由不可达。
解决:改用PASV模式(FileZilla 设置 → Transfer Settings → Passive mode)。
现象:RETR文件后 Wireshark 显示TCP Retransmission,传输卡死
原因:数据连接 MTU 不匹配,大文件分片丢失。
解决:在客户端执行ping -f -l 1472 server-ip(1472+28=1500 MTU),若不通则降低-l值,或服务器端调小tcp.mss。
现象:FTP over TLS(FTPS)抓包显示Encrypted Alert,无法解密
原因:FTPS 使用隐式 TLS(端口 990)或显式 TLS(AUTH TLS后PBSZ/PROT),Wireshark 不支持 SSLKEYLOGFILE 导出密钥。
解决:改用tshark -o ssl.keylog_file:/path/to/keylog.log -r capture.pcap -Y "ftp-data",或使用openssl s_client -connect server:990手动调试。
5. DNS 解析过程深度追踪:从递归查询到权威响应的 5 层链路
5.1 DNS 查询类型与报文结构:A/AAAA/CNAME/NXDOMAIN 的十六进制指纹
DNS 查询由客户端发起,经递归服务器转发至权威服务器。Wireshark 过滤dns,展开Domain Name System协议树:
| 字段 | 位置(Wireshark 协议树) | 说明 |
|---|---|---|
| Transaction ID | DNS Query: ID | 16位随机数,客户端匹配请求与响应 |
| Flags | Response,Opcode,RCODE | Response=1表示响应;RCODE=0成功,3表示 NXDOMAIN(域名不存在) |
| Questions | Queries→Name,Type,Class | Type=1A记录,28AAAA记录,5CNAME记录;Class=1IN(Internet) |
| Answers | Answers→Name,Type,TTL,Data length,Address | TTL为缓存时间(秒),Address为 IP 地址(A记录)或域名(CNAME) |
逻辑说明:DNS 查询是 UDP(53端口)为主,TCP 仅用于响应超长(>512字节)或区域传输。Wireshark 中
DNS Query包含Questions,DNS Response包含Answers、Authority(权威服务器)、Additional(额外记录,如 NS 的 A 记录)。
5.2 递归解析全流程:从本地 DNS 到根服务器的 4 次跃迁
抓取nslookup www.example.com 8.8.8.8,过滤ip.addr == 8.8.8.8,观察:
客户端 → 递归服务器(8.8.8.8):
DNS Query: www.example.com A(RCODE=0,Questions=1)递归服务器 → 根服务器(.):
DNS Query: example.com NS(询问example.com的权威 NS)根服务器 → .com 顶级域服务器:
DNS Response: example.com NS(返回a.gtld-servers.net等).com 服务器 → example.com 权威服务器:
DNS Query: www.example.com A→DNS Response: www.example.com A 93.184.216.34
参数说明:Wireshark 中
Follow DNS Stream可串联整个查询链路。Time列显示每跳延迟,TTL值随层级递减(根服务器 TTL 最长,权威服务器最短)。
5.3 避坑:DNS 抓包高频故障诊断
现象:nslookup返回*** Can't find www.example.com: Non-existent domain,但 Wireshark 显示RCODE=3
原因:域名确实不存在,或 DNSSEC 验证失败(AD标志未置位)。
解决:检查DNS Response中Flags→Authenticated Data (AD)是否为1;若为0,用dig +dnssec www.example.com验证 DNSSEC 签名。
现象:Wireshark 抓到DNS Query但无DNS Response,tcpdump同样无响应
原因:防火墙丢弃了 UDP 53 回包,或客户端设置了timeout(如resolv.conf中options timeout:1)。
解决:sudo tcpdump -i any port 53 -w dns.pcap对比 Wireshark;检查iptables -L -n -v | grep :53。
现象:dig @8.8.8.8 www.example.com正常,但浏览器访问超时
原因:浏览器使用 DoH(DNS over HTTPS)或系统 DNS 缓存污染。
解决:Chrome 地址栏输入chrome://net-internals/#dns清空缓存;或curl -H "accept: application/dns-json" "https://1.1.1.1/dns-query?name=www.example.com&type=A"测试 DoH。
现象:Wireshark 显示DNS Response的Answers为空,但Authority有NS记录
原因:权威服务器未配置该子域名(如www.example.com未设置 A 记录),仅返回父域 NS。
解决:dig +trace www.example.com追踪完整链路,确认www是否在权威服务器上存在。
现象:nslookup返回Non-authoritative answer,但 Wireshark 中AA(Authoritative Answer)标志为0
原因:响应来自缓存服务器(如 8.8.8.8),非权威服务器直答。AA=0表示非权威。
解决:dig @a.root-servers.net www.example.com直连根服务器,或dig @ns1.example.com www.example.com指向权威 NS。
6. 协议分析报告生成技巧:从 Wireshark 导出到 Word 自动化排版
6.1 Wireshark 报告导出三原则:保留原始字节、标注关键字段、规避隐私泄露
.docx报告的价值在于可审计、可复现、可交付。导出时必须遵守:
原始字节优先:
File → Export Packet Dissections → As Plain Text,勾选Packet Bytes和Hex Dump,确保每个报文包含十六进制原始数据。说明:
As CSV会丢失二进制字段;As PDML过于冗长;Plain Text是平衡可读性与完整性的最佳选择。关键字段人工标注:
在 Word 中粘贴文本后,用红色下划线标出HTTP Request Line、蓝色加粗标出DNS RCODE、绿色背景标出TLS Cipher Suite。技巧:Wireshark 中右键字段 →
Copy → As Filter可快速生成过滤表达式(如http.request.method == "GET"),粘贴到报告对应位置作为验证依据。隐私脱敏自动化:
抓包文件含真实 IP、域名、邮箱。用tshark批量脱敏:tshark -r input.pcap -w output.pcap -o "uat:ip_dissector_table:\"192.168.1.100\",\"10.0.0.1\"" \ -o "uat:dns_dissector_table:\"example.com\",\"test.local\"" \ -o "uat:smtp_dissector_table:\"user@real.com\",\"user@test.local\""参数说明:
-o uat:xxx修改 Wireshark 内置解析器映射表,将真实值替换为测试值,导出后无需手动编辑。
6.2 Word 报告结构化模板:标题/图注/表格/引用的工程级规范
.docx文件内嵌 12 张截图,每张图必须满足:
| 要素 | 规范要求 | 示例(图7) |
|---|---|---|
| 图标题 | 图7:DNS 响应报文解析(www.example.com → 93.184.216.34) | 包含协议、域名、结果,长度≤30字 |
| 图内标注 | 用箭头+文字框指向Flags=0x8180、Answer RR: 1、TTL=300等关键字段 | 箭头颜色与字段类型匹配(红色=错误,绿色=成功) |
| 表格对比 | HTTP/HTTPS 对比表必含字段、HTTP 值、HTTPS 值、差异说明四列 | Host字段在两者中均存在,但 HTTPS 的Host在 TLS SNI 中重复 |
| 引用来源 | 所有 RFC 引用标注具体章节(如RFC 7230 §3.1.1),不写“详见 RFC 文档” | TLS Cipher Suite 定义见 RFC 8446 §4.2 |
逻辑说明:Word 中
样式功能统一管理标题(标题1/标题2)、图注(题注)、表格(网格表)。避免手动缩进——用段落 → 缩进和间距 → 特殊格式:首行缩进 2 字符。
6.3 从抓包到报告的 5 分钟流水线:一线工程师的标准化动作
我每天处理 3~5 份协议分析需求,从抓包到交付.docx报告,严格走以下 5 步(计时器实测平均 4分38秒):
环境预置(30秒):
# Win10 快速关闭 Defender powershell -Command "Set-MpPreference -DisableRealtimeMonitoring $true" # 启动 Chrome(预置参数) start chrome.exe --disable-http2 --disable-quic --ssl-key-log-file=C:\keys\ssl.log抓包(60秒):
Wireshark 启动 →Capture → Options → Interface: Ethernet→Capture Filter: host 192.168.1.100(目标IP)→Start→ 执行业务操作 →Stop。过滤与标记(90秒):
Filter: http || dns || smtp || ftp→Apply→ 右键关键包 →Mark Packet (Ctrl+M)→Statistics → Protocol Hierarchy确认协议分布。导出与脱敏(60秒):
File → Export Packet Dissections → As Plain Text→tshark -r raw.pcap -w clean.pcap -o "uat:ip_dissector_table:..."。Word 排版(108秒):
新建.docx→插入 → 图片(截图)→引用 → 插入题注→插入 → 表格(对比数据)→审阅 → 拼写检查→文件 → 另存为 → PDF(交付终稿)。
从那以后我每次接到协议分析需求,都强制走一遍这个流水线——哪怕客户只要一张截图,我也先跑完全部5步。因为漏掉
tshark脱敏,曾把客户生产环境 IP 泄露到报告里;跳过Protocol Hierarchy,误判了 HTTP/2 流量为 HTTP/1.1。这些后悔药,比重抓十次包还贵。希望帮到你。
本文还有配套的精品资源,点击获取