Wireshark 过滤器使用指南
目录
过滤器类型
Wireshark 提供了两种过滤器:
1. 捕获过滤器 (Capture Filters)
- 用途:在开始捕获数据包之前设置,决定哪些数据包被捕获
- 特点:使用 WinPcap 语法,性能更好,减少处理器资源消耗
- 位置:工具栏 → 捕获 → 捕获过滤器
2. 显示过滤器 (Display Filters)
- 用途:在已捕获的数据包集合中设置过滤条件,隐藏不想显示的数据包
- 特点:使用 Wireshark 专用语法,功能更强大
- 位置:主界面顶部的过滤器输入框
显示过滤器语法
基本比较操作符
| 操作符 | 含义 | 示例 |
|---|
== 或 eq | 等于 | ip.src == 192.168.1.1 |
!= 或 ne | 不等于 | ip.src != 192.168.1.1 |
> 或 gt | 大于 | frame.len > 1000 |
< 或 lt | 小于 | frame.len < 100 |
>= 或 ge | 大于等于 | tcp.port >= 80 |
<= 或 le | 小于等于 | tcp.port <= 8080 |
contains | 包含(区分大小写) | http.host contains "baidu" |
matches | 正则匹配(不区分大小写) | http.request.uri matches "user" |
逻辑操作符
| 操作符 | 含义 | 示例 |
|---|
and 或 && | 逻辑与 | ip.addr == 192.168.1.1 and tcp.port == 80 |
or 或 || | 逻辑或 | tcp.port == 80 or tcp.port == 443 |
not 或 ! | 逻辑非 | not arp |
常用过滤操作
IP 地址过滤
ip.src == 192.168.1.1
ip.src eq 192.168.1.1
ip.dst == 192.168.1.1
ip.dst eq 192.168.1.1
ip.addr == 192.168.1.1
ip.addr eq 192.168.1.1
ip.addr >= 192.168.1.1 and ip.addr <= 192.168.1.100
!(ip.addr == 192.168.1.1)
not ip.addr == 192.168.1.1
端口过滤
tcp.srcport == 80
tcp.srcport eq 80
tcp.dstport == 80
tcp.dstport eq 80
tcp.port == 80
tcp.port eq 80
tcp.port >= 80 and tcp.port <= 8080
udp.port == 53
udp.port eq 53
tcp.port == 80 or tcp.port == 443
协议过滤
tcp
udp
http
https
dns
icmp
arp
ftp
smtp
pop3
imap
ssh
telnet
ssl
tls
http or https
tcp or udp
not arp
!tcp
MAC 地址过滤
eth.src == A0:00:00:04:C5:84
eth.src eq A0:00:00:04:C5:84
eth.dst == A0:00:00:04:C5:84
eth.dst eq A0:00:00:04:C5:84
eth.addr == A0:00:00:04:C5:84
eth.addr eq A0:00:00:04:C5:84
数据包长度过滤
frame.len > 1000
frame.len < 100
frame.len >= 64 and frame.len <= 1500
tcp.len > 100
udp.length < 20
http.content_length <= 30
HTTP 相关过滤
http.request.method == "GET"
http.request.method == "POST"
http.request.method == "PUT"
http.request.method == "DELETE"
http.response.code == 200
http.response.code == 404
http.response.code == 500
http.host == "www.baidu.com"
http.host contains "baidu"
http.request.uri contains "login"
http.request.uri matches "user"
http.content_type == "text/html"
http.content_type contains "json"
http.cookie contains "sessionid"
http.cookie contains "userid"
http.user_agent contains "Chrome"
http.user_agent contains "Firefox"
TCP 相关过滤
tcp.flags.syn == 1
tcp.flags.ack == 1
tcp.flags.fin == 1
tcp.flags.rst == 1
tcp.flags.urg == 1
tcp.flags.psh == 1
tcp.analysis.retransmission
tcp.analysis.out_of_order
tcp.analysis.duplicate_ack
tcp.analysis.keep_alive
tcp.analysis.keep_alive_ack
tcp.analysis.zero_window
tcp.analysis.zero_window_probe
内容过滤
frame contains "password"
tcp contains "is_online"
http contains "login"
frame contains 00:01:02:03
高级过滤技巧
时间过滤
frame.time >= "2024-01-01 10:00:00"
frame.time <= "2024-01-01 18:00:00"
协议字段过滤
dns.flags.response == 0
dns.flags.response == 1
icmp.type == 8
icmp.type == 0
arp.opcode == 1
arp.opcode == 2
复杂组合过滤
tcp.flags.syn == 1 and tcp.flags.ack == 0
frame.len > 1500 and tcp.port == 80
tcp.analysis.retransmission or tcp.analysis.out_of_order
(ip.addr == 192.168.1.1 or ip.addr == 192.168.1.2) and tcp.port == 80
实用过滤组合
网络故障排查
host 192.168.1.100
ip.addr == 192.168.1.1 and ip.addr == 192.168.1.2
tcp.analysis.retransmission
tcp.analysis.flags
tcp.analysis.out_of_order
tcp.analysis.duplicate_ack
安全分析
tcp.flags.syn == 1 and tcp.flags.ack == 0
frame.len > 1500
tcp.port == 22
tcp.port == 23
tcp.port == 3389
tcp.port == 5900
应用层分析
http
ssl.handshake.type == 1
ftp.request.command
dns.flags.response == 0
dns.flags.response == 1
捕获过滤器语法
基本语法
tcp
udp
icmp
arp
host 192.168.1.1
src host 192.168.1.1
dst host 192.168.1.1
port 80
src port 80
dst port 80
portrange 6000-8000
net 192.168.1.0/24
src net 192.168.1.0/24
dst net 192.168.1.0/24
捕获过滤器示例
host 192.168.1.1 and port 80
net 192.168.1.0/24
portrange 6000-8000
tcp or udp
not arp
调试技巧
1. 语法检查
- 输入框变红:语法错误
- 输入框变绿:语法正确
- 输入框变黄:语法可能有问题
2. 自动完成
- 按
Ctrl+Space 查看可用字段
- 输入时会有字段提示
3. 过滤器保存
- 点击过滤器输入框右侧的"+"按钮保存常用过滤器
- 可以创建多个预设过滤器组合
4. 测试建议
- 从简单过滤器开始测试
- 逐步增加复杂度
- 使用括号明确优先级
常用过滤表达式速查
| 用途 | 过滤器表达式 |
|---|
| 查看特定IP的所有流量 | ip.addr == 192.168.1.1 |
| 查看HTTP流量 | http |
| 查看HTTPS流量 | ssl or tls |
| 查看DNS查询 | dns.flags.response == 0 |
| 查看TCP重传 | tcp.analysis.retransmission |
| 查看大包 | frame.len > 1500 |
| 查看特定端口 | tcp.port == 80 |
| 查看POST请求 | http.request.method == "POST" |
| 查看404错误 | http.response.code == 404 |
| 查看包含特定内容 | tcp contains "is_online" |
注意事项
- 大小写敏感:协议名称必须小写(如
http,不是 HTTP)
- 字符串匹配:
contains 区分大小写,matches 不区分大小写
- 性能考虑:捕获过滤器性能更好,显示过滤器功能更强
- 语法检查:输入时注意语法检查提示
- 组合使用:复杂过滤可以分步测试
参考资源: