Wireshark 过滤器使用指南

0 阅读5分钟

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地址
ip.src == 192.168.1.1
ip.src eq 192.168.1.1

# 目标IP地址
ip.dst == 192.168.1.1
ip.dst eq 192.168.1.1

# 特定IP地址(源或目标)
ip.addr == 192.168.1.1
ip.addr eq 192.168.1.1

# IP地址范围
ip.addr >= 192.168.1.1 and ip.addr <= 192.168.1.100

# 排除特定IP
!(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端口
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 地址过滤

# 源MAC地址
eth.src == A0:00:00:04:C5:84
eth.src eq A0:00:00:04:C5:84

# 目标MAC地址
eth.dst == A0:00:00:04:C5:84
eth.dst eq A0:00:00:04:C5:84

# 特定MAC地址(源或目标)
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请求方法
http.request.method == "GET"
http.request.method == "POST"
http.request.method == "PUT"
http.request.method == "DELETE"

# HTTP状态码
http.response.code == 200
http.response.code == 404
http.response.code == 500

# HTTP主机名
http.host == "www.baidu.com"
http.host contains "baidu"

# HTTP URI
http.request.uri contains "login"
http.request.uri matches "user"

# HTTP内容类型
http.content_type == "text/html"
http.content_type contains "json"

# HTTP Cookie
http.cookie contains "sessionid"
http.cookie contains "userid"

# HTTP用户代理
http.user_agent contains "Chrome"
http.user_agent contains "Firefox"

TCP 相关过滤

# 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分析
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查询
dns.flags.response == 0
dns.flags.response == 1

# ICMP类型
icmp.type == 8  # ping请求
icmp.type == 0  # ping响应

# ARP操作
arp.opcode == 1  # ARP请求
arp.opcode == 2  # ARP响应

复杂组合过滤

# 网络扫描检测
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包
tcp.analysis.retransmission

# 查看TCP连接问题
tcp.analysis.flags

# 查看乱序包
tcp.analysis.out_of_order

# 查看重复ACK
tcp.analysis.duplicate_ack

安全分析

# 查看异常流量
tcp.flags.syn == 1 and tcp.flags.ack == 0

# 查看大文件传输
frame.len > 1500

# 查看特定端口的流量
tcp.port == 22   # SSH
tcp.port == 23   # Telnet
tcp.port == 3389 # RDP
tcp.port == 5900 # VNC

应用层分析

# 查看所有HTTP流量
http

# 查看HTTPS握手
ssl.handshake.type == 1

# 查看FTP命令
ftp.request.command

# 查看DNS查询
dns.flags.response == 0

# 查看DNS响应
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

捕获过滤器示例

# 捕获特定主机的HTTP流量
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"

注意事项

  1. 大小写敏感:协议名称必须小写(如 http,不是 HTTP
  2. 字符串匹配contains 区分大小写,matches 不区分大小写
  3. 性能考虑:捕获过滤器性能更好,显示过滤器功能更强
  4. 语法检查:输入时注意语法检查提示
  5. 组合使用:复杂过滤可以分步测试

参考资源: