Wireshark 是网络工程师排查网络故障时非常常用的抓包分析工具。严格来说,Wireshark 主要通过显示过滤器(Display Filter)筛选已经捕获的数据包,而命令行工具 tshark 则可以直接抓包、过滤、读取文件和导出分析结果。
如果你是做网络运维、交换机故障排查或 Linux 服务器运维,建议先掌握常用的 Wireshark 过滤表达式,再学习 tshark 命令。
下面这些表达式可以直接输入 Wireshark 窗口顶部的显示过滤器栏中。
1. 按 IP 地址过滤:
注意:ip.addr != 192.168.1.10 会筛选出该字段不匹配的报文,并不等同于简单地排除所有涉及该 IP 的通信。若要排除与该 IP 有关的全部 IPv4 报文,建议使用:
!(ip.addr == 192.168.1.10)
2. 按协议过滤:
例如,排查电脑无法访问网站的问题时,可以先输入 dns 检查域名解析,再输入 tcp 或 tls 检查后续连接过程。
部分协议的解析名称会因 Wireshark 版本和协议类型而有所不同,例如 DHCPv6 通常使用 dhcpv6。
按端口和 TCP 连接状态过滤
这部分在日常网络故障排查中尤其有用。
最后一项需要注意,SYN 过滤器只筛选 SYN 置位的报文。要分析完整的 TCP 三次握手,需要同时观察 SYN、SYN-ACK 和最终 ACK。
逻辑组合过滤器
Wireshark 还支持使用逻辑运算符组合条件。
例如,只查看某台服务器的 HTTP 或 HTTPS 流量:
ip.addr == 192.168.1.100 && (tcp.port == 80 || tcp.port == 443)
查看指定服务器的 TCP 重传:
ip.addr == 192.168.1.100 && tcp.analysis.retransmission
查看 ICMP 报文,但排除指定源地址:
icmp && !(ip.src == 192.168.1.10)
这些组合条件可以大幅减少无关数据包,让故障分析更加高效。具体过滤字段和语法可以查阅 Wireshark 官方的 显示过滤器参考手册。
Wireshark 的命令行工具 TShark
如果需要在 Linux 服务器上抓包,或者批量分析 .pcapng、.pcap 文件,可以使用 TShark。它是 Wireshark 配套的命令行网络协议分析工具。
1. 查看网卡列表
tshark -D
输出网卡编号后,可以选择对应接口进行抓包。
2. 实时抓包
sudo tshark -i eth0
指定接口 eth0,实时显示捕获的数据包。
3. 抓包并保存文件
sudo tshark -i eth0 -w capture.pcapng
按 Ctrl+C 停止抓包,数据会保存到文件中,方便后续用 Wireshark 图形界面分析。
4. 读取已有抓包文件
tshark -r capture.pcapng
只查看 DNS 报文:
tshark -r capture.pcapng -Y "dns"
只查看指定 IP 的流量:
tshark -r capture.pcapng -Y "ip.addr == 192.168.1.100"
5. 抓取指定端口的流量
sudo tshark -i eth0 -f "tcp port 443"
这里的 -f 使用的是捕获过滤器,在抓包时就筛选流量,而不是抓完后再筛选。
6. 导出指定字段
tshark -r capture.pcapng \
-T fields \
-e frame.time \
-e ip.src \
-e ip.dst \
-e tcp.dstport
这个命令会输出报文时间、源 IP、目的 IP 和 TCP 目的端口,适合进一步整理数据或编写自动化分析脚本。
一个特别容易混淆的知识点
Wireshark 有两种过滤方式,语法并不相同。
例如:
# 捕获过滤器
sudo tshark -i eth0 -f "port 53"
# 显示过滤器
tshark -r capture.pcapng -Y "dns"
两者最大的区别是:捕获过滤器决定哪些数据包被捕获,显示过滤器决定哪些已捕获的数据包显示出来。
如果平时主要排查网络连通性、DNS 故障、TCP 连接异常和服务器访问问题,可以优先记住下面这些:
ip.addr == 目标IP
筛选指定主机的流量
dns
排查域名解析
tcp.port == 443
查看 HTTPS 相关 TCP 流量
icmp
检查 Ping 请求和响应
tcp.flags.syn == 1
定位 TCP 连接建立过程
tcp.flags.reset == 1
查找连接重置报文
tcp.analysis.retransmission
检查 TCP 重传
arp
检查 IPv4 地址解析
tcp.stream eq 0
查看编号为 0 的 TCP 流
其中,tcp.stream eq 0 中的 0 只是示例编号。实际分析时,可以先选中某个 TCP 报文,再通过 Wireshark 的“Follow TCP Stream(追踪 TCP 流)”功能查看对应会话。
掌握这些过滤器后,再结合 Wireshark 的 TCP 流图、专家信息、会话统计等功能,就能处理大部分常见的网络抓包分析任务。

