tcpdump本身不解析WebSocket协议,但能完整捕获其HTTP升级握手及后续TCP帧数据;关键需加-i、-nn、-s0三参数,先用-A确认101响应完成握手,再用-X分析帧内容,或保存为pcap供Wireshark解码。

tcpdump 本身不解析 WebSocket 协议,但它能完整捕获 WebSocket 握手和后续 TCP 流量——分析关键在于分两步:先确认 HTTP 升级成功,再追踪长连接中的原始帧数据。
抓包前必须加的三个基础参数
不加这些,你很可能看不到有效内容:
-
-i eth0(或用tcpdump -D查准接口名,如ens33) -
-nn:禁用域名和端口解析,避免 DNS 拖慢、掩盖真实端口(比如 8080 不会变成 http-alt) -
-s 0:捕获完整包,否则 WebSocket 的 Upgrade 请求头、后续二进制帧都会被截断,日志里出现[|tcp]就是丢了数据
第一步:确认 WebSocket 握手是否完成
WebSocket 建立始于一个标准 HTTP GET 请求,带特定头部:
tcpdump -i ens33 -nn -s 0 'port 8080 and host 192.168.1.100' -A
在输出中找这三样:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
GET /ws HTTP/1.1(路径可自定义,但方法一定是 GET) -
Connection: Upgrade -
Upgrade: websocket -
Sec-WebSocket-Key:(非空值)
如果这四行都出现,且服务端返回了HTTP/1.1 101 Switching Protocols,说明握手成功;若只看到 GET 没有 101 响应,问题出在服务端或代理(如 Nginx 配置漏了proxy_http_version 1.1和proxy_set_header Upgrade $http_upgrade)。
第二步:观察长连接中的实际通信
握手完成后,TCP 连接保持打开,后续所有数据都是 WebSocket 帧(无 HTTP 头)。此时:
- 用
-X查看十六进制+ASCII混合输出,识别文本类消息(如 JSON):tcpdump -i ens33 -nn -s 0 'tcp port 8080 and host 192.168.1.100' -X
- 关注 TCP 标志位:正常通信中应持续看到
[.](ACK)、[P.](PSH+ACK),极少出现[S]或[F.](除非主动关闭) - 若频繁出现
[R.](RST),说明某一方异常终止连接,可能是心跳超时、服务崩溃或防火墙中断空闲连接
过滤 WebSocket 流量的实用技巧
- 只抓客户端发来的帧(排除服务端响应干扰):
src host 192.168.1.100 and tcp port 8080 - 排除 HTTP 轮询等无关流量(假设 WebSocket 固定走 8080):
tcp port 8080 and not port 80 and not port 443 - 抓包保存供 Wireshark 深度分析(推荐):
tcpdump -i ens33 -nn -s 0 'port 8080' -w ws.pcap
然后用 Wireshark 打开 → 右键任意 TCP 包 → Decode As → WebSocket,即可自动解析帧结构(opcode、mask、payload length 等)
不复杂但容易忽略

















