在Linux环境下查看WebSocket相关状态、连接或流量,通常需要结合系统工具、网络监控工具和特定协议分析手段,WebSocket作为一种基于TCP的全双工通信协议,其排查涉及进程状态、端口监听、网络连接、数据流量等多个维度,以下是具体方法和工具的使用详解。

查看WebSocket服务进程与端口监听状态
WebSocket服务通常以进程形式运行,需先确认服务是否正常启动及端口监听情况。
查找WebSocket相关进程
使用ps或pgrep命令筛选进程,例如通过进程名(如node、nginx)或启动脚本关键词定位:
# 查找包含"websocket"关键词的进程 ps aux | grep -i websocket # 查找Node.js启动的WebSocket服务(假设进程名为node) ps aux | grep node # 通过进程ID反向查找(已知PID时) ps -ef | grep <PID>
若服务由systemd管理,可通过systemctl检查状态:
systemctl status websocket.service # 替换为实际服务名
检查端口监听与连接状态
WebSocket默认使用80(ws://)或443(wss://)端口,也可能自定义端口(如8080),使用netstat或ss查看端口监听情况:
# 查看所有监听端口(netstat) netstat -tuln | grep -E ":(80|443|8080)" # 更高效查看网络连接状态(ss,推荐) ss -tlnp | grep -E ":(80|443|8080)" # 查看指定端口的TCP连接状态(如8080) ss -t -a state established sport = :8080
参数说明:-t(TCP协议)、-l(仅显示监听端口)、-n(以数字形式显示地址和端口)、-p(显示进程ID和名称)。
抓取与分析WebSocket网络流量
WebSocket通信基于TCP,需通过抓包工具捕获数据包,并解析其握手过程及后续帧数据。
使用tcpdump抓包
tcpdump是Linux下常用的命令行抓包工具,可过滤WebSocket端口并保存数据包:

# 抓取8080端口的WebSocket流量(保存为.pcap格式) sudo tcpdump -i any -s 0 -w websocket.pcap port 8080 # 实时抓取并显示WebSocket握手请求(过滤HTTP头) sudo tcpdump -i any -A -s 0 'port 8080 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
参数说明:-i any(监听所有网卡)、-s 0(抓取完整数据包)、-A(以ASCII显示数据)。
使用Wireshark或tshark分析数据包
抓取的.pcap文件可通过Wireshark图形化工具打开,过滤websocket协议即可查看握手帧(Upgrade: websocket、Connection: Upgrade)及后续数据帧(opcode为0x1文本帧、0x2二进制帧等)。
命令行工具tshark可直接提取WebSocket相关信息:
# 提取WebSocket通信的源/目标IP及opcode tshark -r websocket.pcap -T fields -e ip.src -e ip.dst -e websocket.opcode -e websocket.payload # 过滤握手成功的HTTP响应(状态码101) tshark -r websocket.pcap "http.response.code == 101"
查看WebSocket服务日志
WebSocket服务的日志通常记录连接建立、错误信息及通信数据,可通过日志文件或实时监控排查问题。
Nginx作为反向代理时的日志
若Nginx配置了WebSocket代理(如proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade;),可通过access.log和error.log分析:
# 过滤WebSocket握手请求(包含"Upgrade: websocket"头) grep -i "upgrade: websocket" /var/log/nginx/access.log # 实时查看Nginx错误日志 tail -f /var/log/nginx/error.log
应用服务日志(如Node.js、Java)
- Node.js(ws库):日志可能输出到控制台或文件,通过
pm2管理时可用:pm2 logs websocket-app # 查看pm2管理的应用日志 tail -f /path/to/app.log | grep "WebSocket" # 实时过滤WebSocket相关日志
- Java(Spring WebSocket):日志通常在应用日志中,包含
WebSocketSession生命周期事件:grep -i "websocketsession" /var/log/tomcat/catalina.out
使用WebSocket调试工具测试连接
通过客户端工具模拟WebSocket连接,可快速验证服务是否可达及通信是否正常。
wscat(命令行WebSocket客户端)
安装后测试连接:

# 安装(需Node.js环境) npm install -g wscat # 连接WebSocket服务(ws://localhost:8080) wscat -c ws://localhost:8080 # 连接成功后发送测试消息 > hello server
浏览器开发者工具(需图形界面)
在Chrome/Firefox中按F12打开开发者工具,切换至“Network”标签,筛选“WS”(WebSocket)类型请求,可查看握手详情、发送/接收的消息帧及连接状态。
工具对比与适用场景
以下工具的功能对比及典型使用场景:
| 工具名称 | 主要用途 | 常用命令示例 |
|---|---|---|
ps/systemctl |
查看WebSocket服务进程状态 | ps aux | grep websocket;systemctl status websocket.service |
ss/netstat |
检查端口监听与TCP连接状态 | ss -tlnp | grep :8080;netstat -an | grep ESTABLISHED | grep :8080 |
tcpdump |
抓取WebSocket原始网络数据包 | sudo tcpdump -i any -w websocket.pcap port 8080 |
tshark |
命令行分析WebSocket协议帧 | tshark -r websocket.pcap -T fields -e websocket.opcode |
wscat |
测试WebSocket连接与通信 | wscat -c ws://localhost:8080 |
grep |
过滤日志中的WebSocket相关信息 | grep -i "upgrade: websocket" /var/log/nginx/access.log |
相关问答FAQs
Q1:如何确认WebSocket握手是否成功?
A:可通过三种方式确认:
- 抓包分析:使用
tcpdump或tshark捕获数据包,查看HTTP请求头是否包含Upgrade: websocket和Connection: Upgrade,以及服务端是否返回101 Switching Protocols状态码。 - 工具测试:使用
wscat连接服务,若显示“connected to …”则握手成功;若报错(如“ECONNREFUSED”),则服务未启动或端口不可达。 - 日志检查:服务端日志中应有类似“WebSocket connection established”的记录,Nginx日志中应有“Upgrade: websocket”的请求条目。
Q2:WebSocket连接频繁断开如何排查?
A:可按以下步骤定位问题:
- 检查服务端资源:使用
top或htop查看CPU、内存是否占用过高,导致进程崩溃;检查ulimit -n确认文件描述符是否耗尽。 - 分析网络状态:通过
ss -s查看TCP连接数是否超过最大限制;使用ping或traceroute测试客户端与服务端的网络连通性,检查防火墙(iptables/firewalld)是否中断连接。 - 抓包排查异常:用
tcpdump抓包分析是否有大量重传包([TCP Retransmission])或异常断开包(如RST标志位),判断是否网络丢包或中间设备干扰。 - 检查服务端配置:确认WebSocket服务是否配置了心跳机制(如
ping/pong帧),以及超时时间是否合理;检查应用日志是否有异常堆栈或错误信息。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38556.html