使用 Wireshark 调试 HTTP/2 流量


抓包过滤器语法:
  • host 192.168.1.104
  • 协议过滤 tcp
  • 逻辑运算符&& 与、|| 或、!非
显示过滤器语法:
  • 抓 ping 包:ip.addr == 119.75.217.26 and icmp
  • http.request.method=="GET"
  • 逻辑运算符 and/or/not
  • 比较操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于

HTTP/2 Over TLS, 数据被加密无法直接查看。

Wireshark 的抓包原理是直接读取并分析网卡数据,要想让它解密 HTTPS 流量,有两个办法:
  • 如果你拥有 HTTPS 网站的加密私钥,可以用来解密这个网站的加密流量;
  • 某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中NSS Key Log Format,可供 Wireshark 加密使用。

设置环境变量(到处 ssl key):
$ export SSLKEYLOGFILE=~/tls/sslkeylog.log

通过终端启动 Firefox 或 Chrome(确保能读取到环境变量)
// nodejs --tls-keylog=file
// 如果一直都抓不到包,也可以试试用命令行打开 Wireshark, 还没有再试试不用命令行打开。


Wireshark 显示 http2 帧的列表,不同于 http1 的请求/响应列表