Wireshark 使用方式与典型场景
四、使用方式与典型场景
下面两个例子都可直接复制,抓包前请确认自己对所抓链路有授权。
# 示例 1:定位 HTTP 502 的上游
# 步骤 1:抓取网关与上游之间的流量
sudo dumpcap -i eth0 -b filesize:102400 -b files:10 \
-f "tcp port 8080 or tcp port 80" -w /var/tmp/upstream.pcapng
# 步骤 2:用 tshark 快速筛出 5xx 响应与对应的请求
tshark -r /var/tmp/upstream.pcapng -Y 'http.response.code >= 500' \
-T fields -e frame.time -e ip.src -e ip.dst -e http.response.code
# 步骤 3:取出某个会话的完整 TCP 流,看上游到底回了什么
tshark -r /var/tmp/upstream.pcapng -z follow,tcp,ascii,0
# 步骤 4:命令行统计:每个上游 IP 的错误响应数
tshark -r /var/tmp/upstream.pcapng -Y 'http.response.code >= 500' \
-T fields -e ip.dst | sort | uniq -c | sort -rn
思路是先用捕获过滤器把范围压到网关到上游这一段,避免抓到无关流量;再用显示过滤器定位 5xx;最后用流追踪确认错误是上游直接返回的,还是网关自己生成的。如果 5xx 出现在网关侧而上游无对应请求,问题就在网关,反之在上游。
# 示例 2:分析 TCP 重传与零窗口
# 统计重传、乱序、零窗口等异常数量
tshark -r /var/tmp/slow.pcapng -q -z io,stat,0,"COUNT(tcp.analysis.retransmission)tcp.analysis.retransmission","COUNT(tcp.analysis.zero_window)tcp.analysis.zero_window"
# 列出所有重传包的关键字段
tshark -r /var/tmp/slow.pcapng -Y 'tcp.analysis.retransmission' \
-T fields -e frame.time_relative -e ip.src -e ip.dst -e tcp.seq -e tcp.len
# 只看某条流,输出时序细节
tshark -r /var/tmp/slow.pcapng -Y 'tcp.stream == 3' \
-T fields -e tcp.time_delta -e tcp.flags.str -e tcp.len -e tcp.window_size
判断逻辑:如果重传集中在发送方一侧且伴随零窗口,说明接收方处理不过来,瓶颈在应用侧;如果重传分散且没有零窗口,更可能是链路丢包。这两类问题的修法完全不同,一个要查应用线程池与慢查询,一个要查网络设备与带宽。
适合的场景:接口偶发超时的根因定位、丢包与重传分析、协议交互学习、TLS 握手失败排查、自有环境的明文流量安全检查。不适合的场景:违背授权的旁路监听、在核心生产链路长时间全量抓包(磁盘与 CPU 都扛不住)、用抓包替代日志与指标监控。判断标准是:这次抓包是否必要、范围是否最小、数据是否会泄露他人隐私。

