以下是一些实用的Wireshark数据包过滤规则,按协议和场景分类,适用于分析网络流量。
1. TLS/SSL协议过滤
-
所有TLS流量:
tls
-
所有TLS握手数据包:
tls.handshake
-
Client Hello (类型1) :
ini
tls.handshake.type == 1
- Server Hello (类型2) :
ini
tls.handshake.type == 2
- 特定SNI匹配:
ini
tls.handshake.extensions_server_name == "example.com"
tls.handshake.extensions_server_name contains "google"
- TLS版本过滤:
ini
tls.record.version == 0x0303 # TLS 1.2
tls.record.version == 0x0304 # TLS 1.3
-
加密套件:
tls.handshake.ciphersuite
2. HTTP/HTTPS过滤
-
所有HTTP流量:
http
-
HTTP请求:
vbscript
http.request
- HTTP响应:
vbscript
http.response
- 特定HTTP方法:
ini
http.request.method == "GET"
http.request.method == "POST"
- 特定URI路径:
sql
http.request.uri contains "/api"
http contains "login"
- HTTP状态码:
ini
http.response.code == 200
http.response.code == 404
- User-Agent过滤:
sql
http.user_agent contains "Chrome"
http contains "Mozilla"
- HTTPS流量(需解密或查看Client Hello) :
sql
ssl.handshake.extensions_server_name contains "api.example.com"
3. DNS协议过滤
-
所有DNS查询:
dns
-
DNS查询包:
ini
dns.flags.response == 0
- DNS响应包:
ini
dns.flags.response == 1
- 特定域名查询:
ini
dns.qry.name contains "google.com"
dns.qry.name == "www.example.com"
- DNS类型过滤:
ini
dns.qry.type == 1 # A记录
dns.qry.type == 28 # AAAA记录
4. IP和网络层过滤
- 特定IP地址:
ini
ip.src == 192.168.1.100
ip.dst == 8.8.8.8
- IP地址范围:
ini
ip.addr == 192.168.1.0/24
ip.src >= 192.168.1.1 && ip.src <= 192.168.1.255
- 特定端口:
ini
tcp.port == 80 || tcp.port == 443
udp.port == 53 # DNS
- 特定协议:
ini
ip.proto == 6 # TCP
ip.proto == 17 # UDP
ip.proto == 1 # ICMP
- MAC地址:
ini
eth.src == aa:bb:cc:dd:ee:ff
5. TCP协议过滤
-
TCP流量:
tcp
-
TCP SYN包(连接建立) :
ini
tcp.flags.syn == 1 && tcp.flags.ack == 0
- TCP SYN-ACK包:
ini
tcp.flags.syn == 1 && tcp.flags.ack == 1
- TCP FIN包(连接关闭) :
ini
tcp.flags.fin == 1
-
TCP重传包:
tcp.analysis.retransmission
-
TCP窗口大小:
tcp.window_size > 65535
-
TCP序列号过滤:
ini
tcp.seq == 123456
- TCP会话跟踪:
ini
tcp.stream == 0 # 特定TCP流
6. 应用层协议过滤
-
SMTP邮件:
smtp
-
FTP:
kotlin
ftp
ftp-data
-
SSH:
ssh
-
RDP(远程桌面) :
rdp
-
SMB(文件共享) :
smb || smb2
-
NTP时间同步:
ntp
-
SNMP:
snmp
7. 高级过滤和组合
- 组合条件:
ini
ip.src == 192.168.1.100 && tcp.dstport == 80
- 排除条件:
ini
!(ip.src == 192.168.1.1)
- 逻辑运算:
ini
(ip.dst == 8.8.8.8 || ip.dst == 1.1.1.1) && udp.dstport == 53
- 字符串匹配:
sql
frame contains "password"
http contains "secret"
- 数据包大小:
go
frame.len > 1500
8. 性能和异常检测
- 大数据包:
go
frame.len > 1400
- 异常端口:
yaml
tcp.port > 1024 && tcp.port < 65535
- 广播/多播:
ini
eth.dst[0] & 1 # 以1结尾的MAC地址
-
ARP流量:
arp
-
ICMP(ping等) :
icmp
-
丢包检测:
tcp.analysis.lost_segment
tcp.analysis.duplicate_ack
9. 流和会话过滤
- 特定TCP/UDP流:
ini
tcp.stream == 1
udp.stream == 0
- 跟随特定流:
-
- 右键数据包 > Follow > TCP/UDP/TLS Stream
- 统计特定流的数据量:
bash
statistics.io.graph # 图形化流量分析
10. 捕获过滤器(Capture Filter)
这些在抓包前使用,减少无关数据:
-
仅捕获特定主机:
host 192.168.1.100
-
特定端口:
port 80 or port 443
-
特定协议:
tcp port 80
udp port 53 -
网络:
net 192.168.1.0/24
-
排除本地流量:
not host 192.168.0.0/16
11. 使用建议
- 显示过滤器:用于分析已捕获数据包,语法灵活。
- 捕获过滤器:用于实时抓包,减少数据量。
- 验证过滤器:过滤栏背景绿色表示语法正确,红色表示错误。
- 保存过滤器:右键过滤栏 > "Manage Filter Expressions"。
- 组合使用 :用括号和逻辑运算符(如
&&
、||
、!
)组合条件。