使用 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, 还没有再试试不用命令行打开。
调试 gRPC: https://grpc.io/blog/wireshark/
Wireshark 显示 http2 帧的列表,不同于 http1 的请求/响应列表