Wireshark是网络运维和安全分析领域最常用的开源数据包分析工具,它能实时捕获并解析网络中的数据包,帮助用户排查网络故障、分析协议交互、检测异常流量。但在实际应用中,网络中的数据包数量往往是海量的——一台普通主机在联网状态下,几分钟内就能产生数千个数据包,如果直接在原始数据包列表中查找目标信息,无异于大海捞针。
过滤规则是Wireshark的核心功能,它能帮我们精准筛选出需要分析的数据包,过滤掉无关流量。Wireshark的过滤规则分为两大类型:捕获过滤和显示过滤,二者的适用场景、语法规则差异显著,也是新手最容易混淆的知识点。本文将以“通俗易懂+实战案例”的形式,详细拆解这两种过滤规则的用法、语法和技巧,总字数超3000字,确保零基础用户也能快速上手。
在学习具体规则前,我们必须先明确捕获过滤和显示过滤的核心区别——这是掌握Wireshark过滤的关键,二者的差异可以用下表清晰概括:
对比维度 | 捕获过滤 | 显示过滤 |
作用时机 | 数据包被Wireshark捕获之前 | 数据包被Wireshark捕获之后 |
核心目的 | 减少抓包体积,只捕获需要的数据包 | 从已捕获的数据包中筛选目标内容 |
语法标准 | 遵循BPF(Berkeley Packet Filter)语法 | 遵循Wireshark自定义过滤语法 |
资源占用 | 占用资源少,适合高流量场景 | 占用资源相对高,依赖已捕获的数据包 |
修改难度 | 抓包过程中无法修改,需停止抓包后重新设置 | 可随时修改,实时生效 |
简单来说,捕获过滤是“抓包前的精准捕捞”——比如你只想抓TCP协议的数据包,就可以设置捕获过滤规则,Wireshark会直接丢弃其他协议的数据包,避免无用数据占用磁盘空间;显示过滤是“抓包后的筛选分拣”——比如你已经抓了1万个数据包,现在想只看和某台主机相关的HTTP请求,就可以用显示过滤规则快速筛选,无需重新抓包。
捕获过滤的语法遵循经典的BPF标准,这个语法不仅适用于Wireshark,还适用于tcpdump等其他抓包工具,通用性极强。BPF语法的核心结构是[协议] [方向] [类型] [值],支持用逻辑运算符组合多个条件。
协议过滤是捕获过滤最基础的用法,直接输入协议名称,即可只捕获该协议的数据包。Wireshark支持绝大多数常见网络协议,比如tcp、udp、icmp、ip、arp、http等。
语法格式:协议名称
实战案例+解释
案例1:tcp
解释:只捕获TCP协议的数据包,UDP、ICMP等其他协议的数据包会被直接丢弃。适用于分析TCP连接(比如三次握手、四次挥手)的场景。

案例2:icmp
解释:只捕获ICMP协议的数据包。ICMP协议是网络诊断的核心协议,ping命令就是基于ICMP实现的,因此这个规则常用于排查“ping不通”的网络故障。
案例3:arp
解释:只捕获ARP协议的数据包。ARP协议用于将IP地址解析为MAC地址,这个规则适用于排查“IP与MAC绑定异常”的问题。

注意事项:BPF语法不区分大小写,TCP和tcp效果完全一致;并非所有协议都支持直接过滤,部分小众协议需要结合其他条件使用。
地址过滤用于筛选特定主机的数据包,支持IP地址和MAC地址两种类型,核心是通过src(源地址)和dst(目的地址)限定方向。
核心关键词:ip host(源或目的地址)、ip src(仅源地址)、ip dst(仅目的地址)
语法格式
捕获源或目的IP为某地址的包:ip host IP地址
ip src IP地址捕获仅目的IP为某地址的包:ip dst IP地址
实战案例+解释
案例1:ip host 192.168.1.100
解释:捕获所有源IP或目的IP是[192.168.1.100](192.168.1.100)的数据包,不管是这台主机主动发起的请求,还是发送给这台主机的响应,都会被捕获。适用于分析单台主机的所有网络行为。

案例2:ip src 192.168.1.100
解释:只捕获源IP是[192.168.1.100](192.168.1.100)的数据包,也就是这台主机主动向外发送的流量。比如排查主机是否在偷偷发送异常数据,就可以用这个规则。
案例3:ip dst 114.114.114.114
解释:只捕获目的IP是[114.114.114.114](114.114.114.114)(国内常用DNS服务器)的数据包,适用于分析主机的DNS查询行为。

核心关键词:ether host(源或目的MAC)、ether src(仅源MAC)、ether dst(仅目的MAC)
语法格式
捕获源或目的MAC为某地址的包:ether host MAC地址
捕获仅源MAC为某地址的包:ether src MAC地址
捕获仅目的MAC为某地址的包:ether dst MAC地址
实战案例+解释
案例:ether host aa:bb:cc:dd:ee:ff
解释:捕获所有源MAC或目的MAC是aa:bb:cc:dd:ee:ff的数据包。MAC地址是网卡的物理地址,这个规则适用于排查“同一局域网内主机身份伪装”的问题,比如检测是否有主机伪造了网关的MAC地址。
端口过滤用于筛选特定端口的数据包,主要针对TCP和UDP协议(这两种协议基于端口通信),核心关键词是port和portrange(端口范围)。
核心关键词:tcp port(TCP端口)、udp port(UDP端口)、portrange(端口范围)
语法格式
捕获特定端口的包:协议 port 端口号
捕获端口范围的包:协议 portrange 起始端口-结束端口
实战案例+解释
案例1:tcp port 80
解释:只捕获TCP协议中源端口或目的端口是80的数据包。80端口是HTTP协议的默认端口,这个规则适用于分析HTTP明文传输的流量。
案例2:udp port 53
解释:只捕获UDP协议中源端口或目的端口是53的数据包。53端口是DNS协议的默认端口,这个规则适用于分析DNS解析的过程。
案例3:tcp portrange 1-1024
解释:只捕获TCP协议中端口在11024之间的数据包。11024是公认端口(Well-Known Ports),包含了HTTP、HTTPS、FTP等常用服务的端口,适用于分析主机与常见服务的交互。
实际场景中,单一条件往往无法满足需求,此时需要用逻辑运算符组合多个条件。BPF语法支持三种核心逻辑运算符,优先级从高到低为:!(非) >&&(与) >||(或),也可以用括号()调整优先级(括号需要转义为()或在Wireshark中直接使用)。
逻辑运算符 | 作用 | 等效关键词 |
| 两个条件同时满足 |
|
` | ` | |
| 不满足该条件 |
|
实战案例+解释
案例1:tcp && ip src 192.168.1.100 && tcp dst port 80
等效写法:tcp and ip src 192.168.1.100 and tcp dst port 80
解释:捕获源IP是[192.168.1.100](192.168.1.100)、目的端口是80的TCP数据包。这个规则的应用场景非常明确:分析[192.168.1.100](192.168.1.100)这台主机访问网页(HTTP服务)的请求流量。
案例2:icmp || (tcp port 80 && ip dst 192.168.1.1)
解释:捕获ICMP协议的数据包,或者目的IP是[192.168.1.1](192.168.1.1)且目的端口是80的TCP数据包。适用于同时排查“ping网关”和“访问网关网页服务”的网络问题。
案例3:!arp && ip host 192.168.1.100
等效写法:not arp and ip host 192.168.1.100
解释:捕获所有和[192.168.1.100](192.168.1.100)相关的IP数据包,但排除ARP协议的包。适用于分析主机的IP层流量,避免ARP数据包干扰。
显示过滤是Wireshark最常用的过滤方式,它的语法比捕获过滤更灵活、功能更强大——支持直接引用数据包的协议字段(比如TCP的SYN标志位、HTTP的响应状态码),可以实现极其精细的筛选。显示过滤的结果实时生效,无需停止抓包,是排查网络问题的首选方式。
显示过滤的基础语法和捕获过滤类似,但有两个核心区别:一是协议字段用点号 .分隔(比如ip.src而非ip src);二是比较运算符必须用双等号 ==(捕获过滤用单等号=或省略)。
语法格式:协议名称
实战案例+解释
案例1:tcp
解释:显示所有TCP协议的数据包,和捕获过滤的tcp效果类似,但可以随时关闭过滤,恢复显示所有数据包。
案例2:http
解释:显示所有HTTP协议的数据包。需要注意的是,HTTPS协议的数据包会被标记为tls(因为HTTPS基于TLS加密),因此http过滤规则无法识别HTTPS流量。

核心字段:ip.addr(源或目的IP)、ip.src(仅源IP)、ip.dst(仅目的IP)、eth.addr(源或目的MAC)
语法格式
显示源或目的IP为某地址的包:ip.addr == IP地址
显示仅源IP为某地址的包:ip.src == IP地址
显示仅目的IP为某地址的包:ip.dst == IP地址
实战案例+解释
案例1:ip.addr == 192.168.1.100
解释:显示所有源IP或目的IP是[192.168.1.100](192.168.1.100)的数据包,和捕获过滤的ip host 192.168.1.100效果一致。
案例2:ip.src == 192.168.1.100 && ip.dst == 223.5.5.5
解释:显示所有从[192.168.1.100](192.168.1.100)发送到[223.5.5.5](223.5.5.5)(阿里云DNS)的数据包,适用于分析这台主机的DNS查询行为。
案例3:eth.addr == aa:bb:cc:dd:ee:ff
解释:显示所有源MAC或目的MAC是aa:bb:cc:dd:ee:ff的数据包,用于分析局域网内的物理层流量。
显示过滤的核心优势在于支持直接筛选协议字段,比如TCP的端口、标志位,HTTP的请求方法、响应状态码等。这些字段可以在Wireshark的数据包详情面板中查看(选中数据包,展开协议层级即可看到字段名称)。
核心字段:tcp.port(TCP源或目的端口)、tcp.srcport(仅TCP源端口)、tcp.dstport(仅TCP目的端口)、udp.port(UDP端口)
语法格式
显示特定端口的包:协议.port == 端口号
显示端口范围的包:协议.port >= 起始端口 && 协议.port <= 结束端口
实战案例+解释
案例1:tcp.dstport == 80
解释:显示所有TCP目的端口是80的数据包,也就是发送给HTTP服务的请求。和捕获过滤的tcp dst port 80相比,这个规则可以精准定位请求方向的流量。
案例2:udp.port == 53
解释:显示所有UDP端口是53的数据包,也就是DNS解析的流量。
案例3:tcp.port >= 1025 && tcp.port <= 2048
解释:显示所有TCP端口在10252048之间的数据包。102565535是动态端口,适用于分析主机发起的主动连接。
TCP协议通过标志位控制连接的建立和关闭,这是分析TCP连接异常的关键。Wireshark定义了多个TCP标志位字段,常用的有:
tcp.flags.syn:SYN标志位(连接建立请求),值为1表示是SYN包
tcp.flags.ack:ACK标志位(确认响应),值为1表示是ACK包
tcp.flags.fin:FIN标志位(连接关闭请求),值为1表示是FIN包
tcp.flags.reset:RST标志位(强制关闭连接),值为1表示是RST包
实战案例+解释
案例1:tcp.flags.syn == 1 && tcp.flags.ack == 0
解释:显示所有SYN标志位为1、ACK标志位为0的数据包,也就是TCP三次握手的第一个包。如果网络中存在大量这样的包但没有后续的ACK包,说明TCP连接建立失败(可能是防火墙拦截或目标服务器宕机)。
案例2:tcp.flags.reset == 1
解释:显示所有包含RST标志位的数据包。RST包表示强制关闭连接,出现大量RST包通常意味着网络中存在异常(比如服务端口未开放、连接被恶意中断)。
案例3:tcp.flags.syn == 1 && tcp.flags.ack == 1
解释:显示所有SYN+ACK包,也就是TCP三次握手的第二个包。这个规则可以验证目标服务器是否响应了连接请求。
HTTP是应用层协议,Wireshark提供了丰富的HTTP字段过滤规则,适用于排查网页访问异常、分析HTTP请求内容等场景。常用的HTTP字段有:
http.request:是否为HTTP请求,值为1表示是请求包
http.request.method:HTTP请求方法(GET、POST、PUT等)
http.response:是否为HTTP响应,值为1表示是响应包
http.response.status_code:HTTP响应状态码(200成功、404未找到、500服务器错误等)
实战案例+解释
案例1:http.request && http.request.method == "GET"
解释:显示所有HTTP GET请求包。GET请求用于获取网页内容,这个规则适用于分析主机的网页浏览行为。
案例2:http.response.status_code == 404
解释:显示所有HTTP响应状态码为404的数据包。404表示“请求的资源不存在”,如果访问某个网页时出现这个状态码,说明网页地址错误或资源已被删除。
案例3:http.request.uri contains "login"
解释:显示所有HTTP请求的URI中包含“login”的数据包。URI是请求的资源路径,这个规则适用于分析用户登录相关的HTTP请求。
除了协议和字段,显示过滤还可以根据数据包长度、时间、内容等特征筛选,适用于排查特殊的网络问题。
核心字段:frame.len(整个数据包的长度,单位字节)
语法格式:frame.len 比较运算符 数值
实战案例+解释
案例1:frame.len == 1500
解释:显示所有长度为1500字节的数据包。1500是以太网的MTU(最大传输单元)最大值,这个规则适用于排查巨型帧导致的网络丢包问题。
案例2:frame.len > 1000
解释:显示所有长度超过1000字节的数据包。大数据包通常包含文件传输、视频流等内容,适用于分析大流量数据的传输情况。
核心字段:frame.time(数据包的捕获时间)
语法格式:frame.time >= "时间1" && frame.time <= "时间2"
实战案例+解释
案例:frame.time >= "2025-12-29 10:00:00" && frame.time <= "2025-12-29 10:30:00"
解释:显示在2025年12月29日10:00到10:30之间捕获的数据包。这个规则适用于分析特定时间段内的网络异常。
显示过滤的逻辑运算符和捕获过滤一致,支持&&(与)、||(或)、!(非),优先级可以用括号()调整。和捕获过滤不同的是,显示过滤的括号不需要转义,可以直接使用。
实战案例+解释
案例1:ip.addr == 192.168.1.100 && http.response && http.response.status_code != 200
解释:显示所有和[192.168.1.100](192.168.1.100)相关的HTTP响应包,且响应状态码不是200(即访问失败的请求)。这个规则可以快速定位这台主机访问网页时的错误请求。
案例2:(tcp.flags.syn == 1 || tcp.flags.fin == 1) && ip.dst == 192.168.1.1
解释:显示所有发送到[192.168.1.1](192.168.1.1)的SYN包或FIN包。SYN包是连接请求,FIN包是连接关闭请求,这个规则适用于分析主机与网关的TCP连接建立和关闭情况。
对于经常使用的过滤规则,可以点击过滤栏右侧的 +号,输入规则名称和内容,保存为自定义过滤规则。下次使用时,直接从过滤栏的下拉列表中选择即可,无需重复输入。
Wireshark的显示过滤栏支持自动补全:输入字段的前几个字符,按下Tab键,Wireshark会自动提示可用的字段名称。比如输入ip.s后按Tab,会自动补全为ip.src,极大提升输入效率。
Wireshark支持为特定过滤规则设置颜色,比如将SYN包标为红色、将404响应包标为黄色,方便快速识别异常流量。设置方法:点击菜单栏View→Coloring Rules→Add,输入过滤规则和颜色即可。
语法混淆:捕获过滤用ip src,显示过滤用ip.src;显示过滤的等于必须用==,捕获过滤用=或省略。
协议识别错误:HTTPS流量的协议字段是tls,而非https;FTP流量包含控制连接(21端口)和数据连接(20端口),需要同时过滤。
逻辑运算符优先级:当多个运算符同时存在时,用括号调整优先级,避免因优先级问题导致过滤结果错误。
应用场景 | 推荐过滤规则 | 规则类型 |
排查ping不通问题 | `icmp.type == 8 | |
分析HTTP请求 |
| 显示过滤 |
排查TCP连接失败 |
| 显示过滤 |
捕获高流量主机的数据包 |
| 捕获过滤 |
分析特定时间段的流量 |
| 显示过滤 |
Wireshark的过滤规则是网络分析的“利器”,掌握捕获过滤和显示过滤的差异与用法,能让我们从海量数据包中快速定位目标信息。捕获过滤的核心是“减少抓包体积”,遵循BPF语法,适合高流量场景;显示过滤的核心是“精细筛选”,支持协议字段过滤,是日常排查的首选。