网络工程师排查网络故障,Wireshark常用命令少不了
原创
圈圈
圈圈
网络技术干货圈
2026年10月30日 08:55
江苏
去阅读
Wireshark 是网络工程师排查网络故障时非常常用的抓包分析工具。严格来说,Wireshark 主要通过显示过滤器(Display Filter)筛选已经捕获的数据包,而命令行工具 tshark 则可以直接抓包、过滤、读取文件和导出分析结果。
如果你是做网络运维、交换机故障排查或 Linux 服务器运维,建议先掌握常用的 Wireshark 过滤表达式,再学习 tshark 命令。
下面这些表达式可以直接输入 Wireshark 窗口顶部的显示过滤器栏中。
1. 按 IP 地址过滤:
| 目的 | 过滤表达式 |
|---|---|
| 查看指定源 IP | ip.src == 192.168.1.10 |
| 查看指定目的 IP | ip.dst == 192.168.1.20 |
| 查看与指定 IP 有关的流量 | ip.addr == 192.168.1.10 |
| 查看两个 IP 之间的通信 | ip.addr == 192.168.1.10 && ip.addr == 192.168.1.20 |
| 排除指定 IP | ip.addr != 192.168.1.10 |
注意:ip.addr != 192.168.1.10 会筛选出该字段不匹配的报文,并不等同于简单地排除所有涉及该 IP 的通信。若要排除与该 IP 有关的全部 IPv4 报文,建议使用:
!(ip.addr == 192.168.1.10)
2. 按协议过滤:
| 协议 | 过滤表达式 |
|---|---|
| TCP | tcp |
| UDP | udp |
| DNS | dns |
| HTTP | http |
| HTTPS / TLS | tls |
| ARP | arp |
| ICMP / Ping | icmp |
| DHCP | dhcp |
| IPv6 | ipv6 |
| OSPF | ospf |
| STP | stp |
| VLAN 标签 | vlan |
例如,排查电脑无法访问网站的问题时,可以先输入 dns 检查域名解析,再输入 tcp 或 tls 检查后续连接过程。
部分协议的解析名称会因 Wireshark 版本和协议类型而有所不同,例如 DHCPv6 通常使用 dhcpv6。
按端口和 TCP 连接状态过滤
这部分在日常网络故障排查中尤其有用。
| 排查目标 | 显示过滤器 |
|---|---|
| 查看 TCP 80 端口 | tcp.port == 80 |
| 查看 TCP 443 端口 | tcp.port == 443 |
| 查看 UDP 53 端口 | udp.port == 53 |
| 查看源端口 12345 | tcp.srcport == 12345 |
| 查看目的端口 22 | tcp.dstport == 22 |
| 查看 TCP SYN 报文 | tcp.flags.syn == 1 |
| 查看 TCP RST 报文 | tcp.flags.reset == 1 |
| 查看 TCP 重传报文 | tcp.analysis.retransmission |
| 查看重复 ACK | tcp.analysis.duplicate_ack |
| 查看 TCP 三次握手相关报文 | tcp.flags.syn == 1 |
最后一项需要注意,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 有两种过滤方式,语法并不相同。
| 对比项 | 捕获过滤器 | 显示过滤器 |
|---|---|---|
| 使用时机 | 抓包之前或抓包过程中 | 抓包之后查看数据时 |
| 常见位置 | Capture Options 中的过滤设置 | 主窗口顶部的过滤器栏 |
| 常用参数 | TShark 的 -f |
TShark 的 -Y |
| 示例 | host 192.168.1.10 |
ip.addr == 192.168.1.10 |
| 主要作用 | 减少实际捕获的数据 | 筛选已经捕获的数据 |
例如:
# 捕获过滤器
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 流图、专家信息、会话统计等功能,就能处理大部分常见的网络抓包分析任务。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论