Wireshark 过滤器使用指南
Wireshark 过滤器使用指南
Wireshark 提供两种主要过滤器:捕获过滤器和显示过滤器,帮助您精准定位网络数据。
一、捕获过滤器 (Capture Filters)
在开始捕获前设置,决定哪些流量被捕获到文件中
基本语法
bash
复制
[协议] [方向] [主机] [值] [逻辑运算]
常用过滤示例
-
按IP过滤
bash复制host 192.168.1.100 # 捕获与特定IP相关的所有流量 src host 192.168.1.5 # 捕获来自指定源IP的流量 dst host 8.8.8.8 # 捕获发往目标IP的流量
-
按网络段过滤
bash复制net 192.168.1.0/24 # 捕获整个子网的流量
-
按端口过滤
bash复制port 80 # 捕获HTTP流量 port 443 # 捕获HTTPS流量 src port 22 # 捕获SSH源流量 dst port 53 # 捕获DNS查询流量
-
协议过滤
bash复制tcp # 仅捕获TCP流量 udp # 仅捕获UDP流量 icmp # 仅捕获ICMP(ping)流量 arp # 仅捕获ARP流量
-
组合条件
bash复制tcp port 80 and host 192.168.1.100 # 捕获特定主机的HTTP流量 not arp # 排除所有ARP流量 src net 192.168.1.0/24 and not dst net 192.168.1.0/24 # 捕获来自本地子网但发往外部的流量
二、显示过滤器 (Display Filters)
在已捕获的数据中筛选显示结果
基本语法
bash
复制
协议.字段 运算符 值
常用运算符
运算符 | 说明 | 示例 |
---|---|---|
== |
等于 | ip.src == 192.168.1.1 |
!= |
不等于 | tcp.port != 443 |
> |
大于 | frame.len > 100 |
< |
小于 | http.content_length < 500 |
>= |
大于等于 | tcp.window_size >= 8192 |
<= |
小于等于 | udp.length <= 128 |
contains |
包含 | http.host contains "google" |
matches |
正则匹配 | http.request.uri matches "login.*" |
and |
逻辑与 | ip.src==192.168.1.1 and tcp.flags.syn==1 |
or |
逻辑或 | dns or dhcp |
not |
逻辑非 | !arp |
常用过滤示例
-
HTTP流量分析
bash复制http # 显示所有HTTP流量 http.request.method == "GET" # 显示GET请求 http.response.code == 404 # 显示404响应 http.host contains "facebook" # 显示访问Facebook的流量
-
TCP问题诊断
bash复制tcp.analysis.retransmission # 显示重传包 tcp.analysis.zero_window # 显示零窗口通告 tcp.flags.reset == 1 # 显示RST包 tcp.analysis.duplicate_ack # 显示重复ACK
-
DNS查询分析
bash复制dns.qry.type == 1 # A记录查询 dns.qry.name == "example.com" # 特定域名查询 dns.flags.response == 0 # 仅显示DNS查询
-
协议组合过滤
bash复制(http or ssl) and ip.addr == 192.168.1.100 # 显示特定主机的HTTP/HTTPS流量 icmp && icmp.type == 8 # 仅显示ICMP请求(ping) tcp.port == 3389 and rdp # 显示RDP流量
三、实用技巧
-
保存常用过滤器
- 在过滤器输入框输入条件后,点击右侧书签图标保存
- 通过
Analyze > Display Filters
管理已保存的过滤器
-
右键快速过滤
- 在数据包详情中选择字段 > 右键 > Apply as Filter
- 示例:快速过滤特定TCP会话
bash复制
tcp.stream eq 12 # 显示整个TCP流
-
过滤表达式自动补全
- 输入时按
Ctrl+Space
触发自动补全建议 - 输入协议名后按
.
查看可用字段
- 输入时按
-
语法着色
- 绿色:有效表达式
- 红色:语法错误
- 黄色:类型不匹配
四、高级过滤
-
按字节偏移过滤
bash复制frame[0:3] == 00:0c:29 # 匹配前3字节为特定MAC地址 tcp[20:2] == 80:00 # 匹配TCP头部特定偏移量
-
位掩码过滤
bash复制tcp.flags & 0x02 != 0 # 匹配SYN标志位 icmp.type == 3 and icmp.code & 0x02 == 0x02 # 匹配特定ICMP代码
-
时间范围过滤
bash复制frame.time >= "2023-01-01 09:00:00" frame.time <= "2023-01-01 17:00:00"
五、故障排除
-
常见错误
bash复制ip.src = 192.168.1.1 # 错误:应使用 == 而不是 = tcp.port = 80 # 错误:同上 http.host == "example # 错误:缺少闭合引号
-
验证过滤器
- 无效表达式显示为红色背景
- 使用
Analyze > Display Filter Expression
对话框构建验证
-
性能优化
- 避免复杂正则表达式:
matches ".*login.*"
- 优先使用协议字段而非原始字节偏移
- 捕获时使用捕获过滤器减少数据量
- 避免复杂正则表达式:
提示:Wireshark内置3000+过滤字段,可通过
Edit > Preferences > Protocols
查看各协议可用字段