【内网运维】Wireshark 过滤语法详细解析

Wireshark 过滤语法详细解析(实战指南)

作为网络流量分析领域的核心工具,Wireshark 的过滤语法是高效定位目标流量的 "钥匙"。本文以视角,系统拆解 Wireshark 过滤语法的核心规则、分类用法、高级技巧,并结合渗透测试、运维排障、安全监测等实战场景,提供可直接复用的过滤规则,帮你从海量流量中快速精准提取关键信息。

一、语法基础:必掌握的核心规则(避坑前提)

Wireshark 过滤语法遵循 "字段 + 运算符 + 值" 的核心结构,所有高级用法均基于此扩展。先掌握以下基础规则,避免 90% 的语法错误:

1.1 核心命名规范

  • 字段命名 :采用 "协议.层级.属性" 分层结构(例:tcp.srcporthttp.request.method),全小写,大小写敏感(如HTTPhttpUriuri);
  • 字符串值 :必须用双引号 " 包裹(例:http.request.uri contains "admin"),单引号 / 无引号均报错;
  • 数值型值 :直接写(例:tcp.port == 80ip.ttl == 64),无需引号;
  • 空格规范 :运算符前后建议加空格(例:ip.src == 192.168.1.100 而非 ip.src==192.168.1.100),提升可读性;
  • 字段有效性 :字段必须与协议匹配(例:http协议有request.uri字段,tcp协议无此字段,乱写会报错)。

1.2 关键区分:显示过滤器 vs 捕获过滤器

很多工程师混淆两者,核心差异如下(实战中 90% 场景用显示过滤器):

维度 显示过滤器(Display Filter) 捕获过滤器(Capture Filter)
作用 对已捕获的数据包筛选("事后筛选") 抓包前设置规则,只捕获符合条件的包("事前过滤")
语法 Wireshark 自定义语法(本文重点) 基于 libpcap 语法(简洁,功能少)
示例 http.request.uri contains "admin" tcp port 80 and host 192.168.1.100
生效位置 顶部 "Filter" 输入框(绿色 = 语法正确,红色 = 错误) 抓包前 "Capture Options"→"Capture Filter"
适用场景 渗透测试、故障排查、流量审计(需精准筛选) 海量流量抓包(减少存储占用,提升抓包效率)

1.3 基础报错排查(快速定位问题)

  • 输入后显示红色:语法错误(检查字段拼写、引号、协议匹配);
  • 显示黄色:语法正确但无匹配结果(检查字段值是否存在,如http.response.status_code == 404但无 404 响应);
  • 无结果但确认有目标流量:大概率是大小写敏感(例:contains "Admin"匹配不到小写admin)。

二、核心过滤维度:按场景分类的语法大全

2.1 协议过滤(最基础,快速缩小范围)

直接输入协议名,筛选该协议的所有数据包,适用于快速分离目标协议流量。

语法示例 作用 实战场景
http 筛选所有 HTTP 协议包(含请求 + 响应) 分析 Web 应用流量
https 筛选所有 HTTPS 协议包(TLS 加密流量) 监测 HTTPS 连接建立过程(三次握手)
tcp 筛选所有 TCP 协议包 分析 TCP 重传、延迟问题
udp 筛选所有 UDP 协议包 分析 DNS、SNMP 等无连接协议流量
dns 筛选所有 DNS 协议包 排查 DNS 解析故障、恶意域名请求
icmp 筛选所有 ICMP 协议包(ping、 traceroute) 检测网络连通性、路由问题
arp 筛选所有 ARP 协议包 排查 ARP 欺骗、MAC 地址冲突
not http and not tcp 筛选非 HTTP、非 TCP 的数据包 寻找异常协议流量(如 UDP 后门)
实战案例:筛选所有 Web 相关流量(HTTP+HTTPS)
复制代码
http or https

2.2 IP / 端口 / 地址过滤(定位通信双方)

核心用于筛选 "谁在和谁通信",是流量分析的基础操作,结合逻辑运算符可精准定位目标。

2.2.1 IP 地址过滤
语法示例 作用 说明
ip.src == 192.168.1.100 筛选源 IP 为 192.168.1.100 的数据包 定位某主机发起的所有请求
ip.dst == 202.108.22.5 筛选目的 IP 为 202.108.22.5(百度 IP)的包 定位访问特定服务器的流量
ip.addr == 192.168.1.100 筛选源 IP 或目的 IP 为 192.168.1.100 的包 定位某主机的所有通信流量(常用)
ip.src in {192.168.1.100, 192.168.1.101} 筛选源 IP 为多个值的包 批量定位多主机流量
ip.src ~= 192.168.1.0/24 筛选源 IP 属于 192.168.1.0/24 网段的包 定位某网段的所有出站流量
not ip.addr == 10.0.0.0/8 排除 10.0.0.0/8 内网网段的包 只保留外网通信流量
2.2.2 端口过滤
语法示例 作用 实战场景
tcp.port == 80 筛选 TCP 端口为 80 的包(源或目的) 分析 HTTP 明文流量
tcp.srcport == 443 筛选 TCP 源端口为 443 的包 定位服务器端 HTTPS 响应流量
tcp.dstport == 22 筛选 TCP 目的端口为 22(SSH)的包 监测 SSH 登录尝试
udp.port == 53 筛选 UDP 端口为 53(DNS)的包 分析 DNS 查询流量
tcp.port in {80, 443, 8080} 筛选 TCP 端口为 80/443/8080 的包 批量分析 Web 服务流量
not tcp.port == 135 and not tcp.port == 445 排除 135/445 端口(SMB 协议)的包 减少 Windows 默认服务流量干扰
实战案例:定位 192.168.1.100 访问外网 Web 服务(80/443 端口)的流量
复制代码
ip.src == 192.168.1.100 and (tcp.port == 80 or tcp.port == 443) and not ip.dst ~= 192.168.0.0/16

2.3 TCP/UDP 协议专项过滤(分析连接状态)

针对 TCP/UDP 的核心属性(连接状态、标志位、窗口大小等)过滤,适用于排查连接异常、重传、攻击行为。

2.3.1 TCP 关键过滤语法
语法示例 作用 实战场景
tcp.flags.syn == 1 筛选 SYN 包(TCP 连接建立第一步) 检测端口扫描(大量 SYN 包无后续 ACK)
tcp.flags.fin == 1 筛选 FIN 包(TCP 连接关闭第一步) 分析连接异常关闭
tcp.flags.rst == 1 筛选 RST 包(强制关闭连接) 排查服务不可用、端口未开放
tcp.analysis.retransmission 筛选 TCP 重传包 定位网络丢包、延迟问题
tcp.analysis.duplicate_ack 筛选 TCP 重复 ACK 包 分析网络拥堵、数据包丢失
tcp.window_size == 0 筛选 TCP 窗口为 0 的包(接收方暂不可收) 排查服务端处理瓶颈
tcp.seq == 1 筛选 TCP 序列号为 1 的包(连接初始包) 定位新建立的 TCP 连接
2.3.2 UDP 关键过滤语法
语法示例 作用 实战场景
udp.length > 1000 筛选 UDP 包长度大于 1000 字节的包 检测 UDP 洪水攻击、异常大数据包
udp.srcport == 53 and udp.dstport != 53 筛选源端口 53(DNS 服务器)的 UDP 包 监测 DNS 服务器对外响应流量
实战案例:检测针对 192.168.1.200 的 TCP 端口扫描(大量 SYN 包无 ACK)
复制代码
ip.dst == 192.168.1.200 and tcp.flags.syn == 1 and tcp.flags.ack == 0

2.4 HTTP 协议专项过滤(Web 流量核心)

HTTP 是实战中最常分析的协议,Wireshark 提供了丰富的字段,覆盖请求方法、URI、状态码、头部等核心属性。

2.4.1 核心 HTTP 过滤语法
语法示例 作用 实战场景
http.request 筛选所有 HTTP 请求包(不含响应) 分析客户端发起的 Web 请求
http.response 筛选所有 HTTP 响应包(不含请求) 分析服务器返回的响应内容
http.request.method == "GET" 筛选 HTTP GET 请求 分析查询类请求(如页面访问)
http.request.method == "POST" 筛选 HTTP POST 请求 分析提交类请求(如登录、文件上传)
http.request.uri contains "admin" 筛选 URI 包含 "admin" 的 HTTP 请求 挖掘后台管理路径(渗透测试常用)
http.request.uri starts with "/api" 筛选 URI 以 "/api" 开头的 HTTP 请求 分析 API 接口流量
http.request.uri ends with ".php" 筛选 URI 以 ".php" 结尾的 HTTP 请求 定位 PHP 动态页面请求
http.response.status_code == 200 筛选 HTTP 200 OK 响应 分析成功响应的请求
http.response.status_code == 403 筛选 HTTP 403 Forbidden 响应 检测权限控制、访问拒绝行为
http.response.status_code == 404 筛选 HTTP 404 Not Found 响应 挖掘不存在的路径(排除无效请求)
http.response.status_code >= 500 筛选 HTTP 5xx 服务器错误响应 排查 Web 服务故障
http.host == "www.baidu.com" 筛选主机为www.baidu.com的 HTTP 请求 定位访问特定网站的流量
http.user_agent contains "Chrome" 筛选 User-Agent 包含 Chrome 的 HTTP 请求 分析浏览器类型分布
http.cookie contains "SESSIONID" 筛选 Cookie 包含 SESSIONID 的 HTTP 请求 分析会话相关流量
http.content_length > 10000 筛选内容长度大于 10KB 的 HTTP 包 定位大文件传输、文件上传流量
2.4.2 HTTPS 过滤(TLS 协议)

HTTPS 流量加密,无法直接解析内容,但可筛选 TLS 握手、会话相关流量:

语法示例 作用 实战场景
tls 筛选所有 TLS 协议包(HTTPS 基础) 分析 HTTPS 连接建立过程
tls.handshake 筛选 TLS 握手包 检测 HTTPS 握手失败、证书问题
tls.handshake.type == 1 筛选 TLS Client Hello 包(握手第一步) 检测 HTTPS 连接发起行为
tls.handshake.type == 2 筛选 TLS Server Hello 包(握手第二步) 分析服务器 TLS 版本、加密套件
tls.alert 筛选 TLS 告警包 定位 HTTPS 连接异常(如证书无效)
实战案例 1:渗透测试中挖掘后台管理路径(含大小写不敏感)
复制代码
lower(http.request.uri) contains "admin" or lower(http.request.uri) contains "manage"

lower()函数将 URI 转为小写,同时匹配admin/Admin/ADMIN

实战案例 2:筛选文件上传相关的 HTTP POST 请求(含常见后缀)
复制代码
http.request.method == "POST" and (http.request.uri contains "upload" or http.request.uri contains "file") and (http.content_type contains "multipart/form-data" or http.content_type contains "application/octet-stream")

2.5 其他协议专项过滤(按需使用)

2.5.1 DNS 协议
语法示例 作用 实战场景
dns.qry.name contains "malicious.com" 筛选查询恶意域名的 DNS 请求 检测恶意软件 C2 通信
dns.qry.type == 1 筛选 A 记录查询(IPv4 地址) 分析常规 DNS 查询
dns.resp.code == 0 筛选 DNS 查询成功的响应(返回码 0) 排除无效 DNS 查询
dns.resp.code == 3 筛选 DNS 查询失败(域名不存在,返回码 3) 检测无效域名请求、拼写错误
2.5.2 ICMP 协议
语法示例 作用 实战场景
icmp.type == 8 筛选 ICMP Echo Request(ping 请求) 检测 ping 扫描、网络连通性测试
icmp.type == 0 筛选 ICMP Echo Reply(ping 响应) 验证 ping 响应是否正常
icmp.type == 3 筛选 ICMP Destination Unreachable(目标不可达) 排查网络不通、端口未开放

三、运算符与逻辑组合:提升筛选精准度

掌握基础字段后,通过运算符和逻辑组合,实现 "多条件筛选",满足复杂分析需求。

3.1 比较运算符(核心)

运算符 作用 适用场景 示例
== 等于(完全匹配) 精准定位特定值 tcp.port == 80http.request.method == "GET"
!= 不等于 排除特定值 ip.src != 192.168.1.1
> 大于 数值型字段筛选(长度、端口) tcp.port > 1024http.content_length > 5000
< 小于 同上 ip.ttl < 32(检测跨网段流量)
>= 大于等于 同上 http.response.status_code >= 400(筛选错误响应)
<= 小于等于 同上 tcp.window_size <= 1000(筛选小窗口流量)
contains 包含(子串匹配) 字符串字段模糊匹配 http.request.uri contains "login"
starts with 以... 开头 字符串字段前缀匹配 http.request.uri starts with "/admin"
ends with 以... 结尾 字符串字段后缀匹配 http.request.uri ends with ".jsp"
in 属于多个值中的一个 批量匹配 ip.src in {192.168.1.100, 192.168.1.101}
~= 网段匹配(CIDR) IP 网段筛选 ip.dst ~= 10.0.0.0/8

3.2 逻辑运算符(组合多条件)

运算符 作用 优先级 示例(筛选 192.168.1.100 的 HTTP GET 请求)
&& 逻辑与(同时满足) ip.src == 192.168.1.100 && http.request.method == "GET"
` 逻辑或(满足其一) http.request.method == "GET",http.request.method == "POST"
! 逻辑非(不满足) 最高 !http.request.uri contains "admin"(排除含 admin 的请求)
优先级注意:

逻辑运算符优先级:! > && > ||,复杂组合需用括号 () 强制改变优先级,例:

复制代码
# 正确:筛选(192.168.1.100的流量)且(HTTP GET或POST请求)
ip.src == 192.168.1.100 && (http.request.method == "GET" || http.request.method == "POST")

# 错误:会筛选(192.168.1.100的GET请求)或(所有POST请求)
ip.src == 192.168.1.100 && http.request.method == "GET" || http.request.method == "POST"

3.3 位运算符(高级,少用)

适用于分析协议标志位(如 TCP flags),了解即可:

运算符 作用 示例(筛选 SYN+ACK 包)
& 按位与 tcp.flags & 0x12 == 0x12(0x12=SYN+ACK)
` ` 按位或 `tcp.flags 0x02 == 0x02`(包含 SYN 位)

四、高级函数:提升分析效率的 "黑科技"

Wireshark 提供多个内置函数,可实现大小写转换、长度计算、字节提取等高级功能,大幅提升筛选灵活性。

4.1 字符串处理函数

函数 作用 示例(大小写不敏感匹配 admin)
lower(field) 将字段值转为小写 lower(http.request.uri) contains "admin"
upper(field) 将字段值转为大写 upper(http.request.uri) contains "ADMIN"

4.2 长度计算函数

函数 作用 示例(筛选长 URI 请求)
len(field) 计算字段值的长度 len(http.request.uri) > 100(URI 长度 > 100 字节)

4.3 字节提取函数(高级)

函数 作用 示例(提取 HTTP 请求体前 4 字节)
bytes(field, offset, length) 从字段中提取字节(offset = 偏移量,length = 长度) bytes(http.request.body, 0, 4) == 0x504B0304(匹配 ZIP 文件头)

4.4 时间函数(筛选特定时间段)

函数 作用 示例(筛选 2024-01-01 10:00-11:00 的流量)
frame.time 数据包捕获时间 frame.time >= "2024-01-01 10:00:00" && frame.time <= "2024-01-01 11:00:00"
frame.time_delta 与前一个数据包的时间差 frame.time_delta > 1.0(时间差 > 1 秒,检测延迟)
实战案例:筛选 ZIP 格式文件上传的 HTTP 请求(通过文件头匹配)
复制代码
http.request.method == "POST" and bytes(http.request.body, 0, 4) == 0x504B0304

(0x504B0304 是 ZIP 文件的固定文件头)

五、实战场景大全:可直接复用的过滤规则

结合渗透测试、运维排障、安全监测三大核心场景,提供现成的过滤规则,直接复制到 Wireshark 即可生效。

5.1 渗透测试场景

场景 1:挖掘后台管理路径(含常见关键词)
复制代码
lower(http.request.uri) contains "admin" or lower(http.request.uri) contains "manage" or lower(http.request.uri) contains "control" or lower(http.request.uri) contains "backend" or lower(http.request.uri) contains "system"
场景 2:筛选登录相关请求(含常见登录路径)
复制代码
(http.request.uri contains "login" or http.request.uri contains "signin" or http.request.uri contains "auth") and (http.request.method == "POST" or http.request.method == "GET")
场景 3:捕获 SQL 注入尝试流量(含常见注入关键词)
复制代码
http.request.uri contains "union" or http.request.uri contains "select" or http.request.uri contains "and 1=1" or http.request.uri contains "or 1=1" or http.request.uri contains "sleep("
场景 4:筛选文件上传请求(含常见后缀)
复制代码
http.request.method == "POST" and (http.request.uri contains "upload" or http.request.uri contains "file" or http.request.uri contains "attach") and (http.content_type contains "multipart/form-data" or http.content_type contains "application/octet-stream")

5.2 运维排障场景

场景 1:排查 Web 服务响应慢(筛选响应时间 > 1 秒的 HTTP 请求)
复制代码
http.request and http.response and frame.time_delta > 1.0
场景 2:排查 DNS 解析故障(筛选 DNS 查询失败的流量)
复制代码
dns and dns.resp.code != 0
场景 3:排查 TCP 重传导致的卡顿(筛选 TCP 重传包)
复制代码
tcp.analysis.retransmission or tcp.analysis.duplicate_ack or tcp.analysis.out_of_order
场景 4:定位特定用户的 HTTP 5xx 错误(服务端故障)
复制代码
ip.src == 192.168.1.100 and http.response.status_code >= 500

5.3 安全监测场景

场景 1:检测端口扫描(大量 SYN 包无 ACK)
复制代码
tcp.flags.syn == 1 and tcp.flags.ack == 0 and frame.number % 10 == 0  # 每10个包采样,避免流量过多
场景 2:检测恶意域名请求(以常见恶意后缀为例)
复制代码
dns.qry.name contains ".malicious" or dns.qry.name contains ".cc" or dns.qry.name contains ".top" or dns.qry.name contains ".xyz"
场景 3:检测 HTTPS 握手失败(TLS 告警包)
复制代码
tls.alert and tls.alert.level == 2  # level=2为严重告警(如证书无效、协议不支持)
场景 4:检测异常大流量 UDP 包(可能是 DDoS 攻击)
复制代码
udp.length > 1500  # UDP包长度超过MTU,可能是洪水攻击

六、高级技巧与避坑指南

6.1 高级使用技巧

技巧 1:保存常用过滤规则

Wireshark 顶部过滤器输入框右侧,点击 "Save" 可保存常用规则,下次直接选择,无需重复输入。

技巧 2:结合着色规则

过滤出目标流量后,右键 "Colorize Conversation"→选择颜色,将目标流量着色,快速区分重点。

技巧 3:批量过滤多个值

in和大括号{}批量匹配,例:

复制代码
ip.src in {192.168.1.100, 192.168.1.101, 192.168.1.102}  # 批量匹配多个IP
tcp.port in {80, 443, 8080, 8443}  # 批量匹配多个端口
技巧 4:使用 "Follow" 功能深化分析

过滤出目标 HTTP/TCP 流后,右键 "Follow"→"HTTP Stream"/"TCP Stream",可查看完整的会话内容(如完整的请求 / 响应数据)。

6.2 常见避坑指南

坑 1:字段与协议不匹配
  • 错误:tcp.request.uri contains "admin"(TCP 协议无request.uri字段);
  • 正确:http.request.uri contains "admin"(HTTP 协议的字段)。
坑 2:大小写敏感导致无结果
  • 错误:http.request.uri contains "Admin"(实际流量中是小写admin);
  • 正确:lower(http.request.uri) contains "admin"
坑 3:混淆显示过滤器和捕获过滤器
  • 错误:在捕获过滤器中输入http.request.uri contains "admin"(捕获过滤器不支持该语法);
  • 正确:捕获过滤器用tcp port 80 and host 192.168.1.100,显示过滤器用http.request.uri contains "admin"
坑 4:字符串未加双引号
  • 错误:http.request.method == GET(GET 是字符串,需加引号);
  • 正确:http.request.method == "GET"

七、总结:核心语法框架(快速记忆)

Wireshark 过滤语法的核心可总结为:

复制代码
[协议.层级.属性] [运算符] [值] [逻辑运算符] [协议.层级.属性] [运算符] [值]...
  • 基础筛选:用协议、IP、端口快速缩小范围(例:http and ip.src == 192.168.1.100);
  • 精准筛选:用 HTTP/TCP 专项字段定位核心流量(例:http.request.method == "POST" and http.response.status_code == 200);
  • 高级筛选:用函数、字节提取实现复杂需求(例:lower(...)bytes(...))。

掌握本文的语法规则和实战案例,可覆盖 95% 的流量分析场景。建议将常用规则保存到 Wireshark,形成自己的 "过滤规则库",提升分析效率。在实际使用中,多结合 "Follow Stream""着色规则" 等功能,深化对流量的理解,从 "筛选流量" 升级为 "分析流量背后的业务逻辑和异常行为"。

相关推荐
星环处相逢9 小时前
K8s 网络插件选型:Flannel vs Calico 深度对比
网络·容器·kubernetes
信安大佬9 小时前
2025鹏城杯-whiteout
网络安全
bl4ckpe4ch9 小时前
用可复现实验直观理解 CORS 与 CSRF 的区别与联系
前端·web安全·网络安全·csrf·cors
HIT_Weston9 小时前
89、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(三)
linux·运维·ubuntu
苦藤新鸡9 小时前
6.三数之和
c语言·c++·算法·力扣
2501_941822759 小时前
在开罗智能公共交通场景中构建实时调度与高并发乘客数据处理平台的工程设计实践经验分享
网络·安全
Zsr10239 小时前
K8s网络方案深度解析:Flannel vs Calico 怎么选?
网络·容器·kubernetes·flannel·calico
独自破碎E10 小时前
在Linux系统中怎么排查文件占用问题?
linux·运维·服务器
Frank_refuel10 小时前
C++之内存管理
java·数据结构·c++
tiechui199410 小时前
最小化安装 ubuntu
linux·运维·ubuntu