Linux网络抓包分析核心是tcpdump捕获+Wireshark解析:tcpdump在无图形界面服务器上过滤保存pcap(如port 80、-w -C -W),scp传输后Wireshark图形化分析(显示过滤、Follow TCP Stream),用于定位连接超时、响应慢、HTTPS证书等问题,需注意性能与安全风险。

Linux下用tcpdump和Wireshark做网络抓包分析,核心就两点:先用tcpdump在服务器上高效捕获数据,再导出到本地用Wireshark图形化深度解析。不装图形界面的生产服务器没法直接跑Wireshark,所以分工明确——tcpdump负责“录”,Wireshark负责“看”。
tcpdump基础抓包:过滤准、保存稳
抓包不是全量收,得靠表达式过滤出真正关心的流量。常用组合有:
-
按端口:
tcpdump -i eth0 port 80(抓HTTP)或port 22(SSH) -
按协议+方向:
tcpdump -i eth0 tcp and src host 192.168.1.100(只抓来自某IP的TCP包) -
保存为pcap文件:
tcpdump -i eth0 -w /tmp/nginx_access.pcap port 80 -C 100 -W 5(单文件100MB,轮转5个,防磁盘打满)
注意加-n跳过DNS解析提速,加-q减少输出冗余;生产环境慎用-s 0(全包长),默认截断可能漏关键载荷,但全抓会显著增加I/O和存储压力。
tcpdump与Wireshark协同:从命令行到图形界面
tcpdump生成的.pcap文件可直接用Wireshark打开。常见操作链路:
- 服务器上运行:
tcpdump -i any -w /tmp/app_debug.pcap host 10.0.3.5 and port 3306 - 用
scp把文件拉到本地:scp user@server:/tmp/app_debug.pcap ./ - Wireshark中打开 → 用显示过滤器进一步缩小范围,比如
mysql.query contains "SELECT"或http.request.method == "POST"
Wireshark里右键数据包选“Follow → TCP Stream”,能直接看到完整会话内容(如HTTP请求/响应体、Redis命令),比翻原始十六进制直观得多。
定位典型问题的抓包思路
不同故障对应不同抓包侧重点:
-
连接超时/拒绝:抓三次握手,看SYN发出去有没有SYN-ACK回来。Wireshark里过滤
tcp.flags.syn == 1,结合时间列判断丢包或防火墙拦截 - 接口返回慢:抓应用端口(如8080)+后端服务端口(如5432),对比请求发出到响应返回的时间差,再看后端响应是否也慢,快速区分是网络延迟还是服务瓶颈
-
HTTPS证书报错:抓443端口,过滤
tls.handshake.type == 1(Client Hello),检查SNI域名是否正确,再看Server Hello里返回的证书是否匹配
安全与性能提醒
抓包本身有风险,需提前评估:
- 避免在高流量网卡(如万兆)上无过滤全抓,可能瞬间打满磁盘或拖慢系统
- 敏感业务(如支付回调)抓包前确认合规性,pcap文件含明文字段(URL、Header、Cookie),传输和存储需加密
- 容器环境抓宿主机网卡可能看不到内部veth流量,应进入容器用
nsenter或在dockerd启用host.docker.internal桥接后抓
不复杂但容易忽略。










