深入浅出Wireshark过滤规则
嗯,用户让我帮忙总结一下这篇文章的内容,控制在100字以内,而且不需要用“文章内容总结”或者“这篇文章”这样的开头。直接写文章描述即可。 首先,我需要通读整篇文章,了解它的主要内容。文章主要讲的是Wireshark的过滤规则,分为捕获过滤和显示过滤两种类型。捕获过滤是在数据包被捕获之前应用的,使用BPF语法,主要用于减少抓包体积;而显示过滤是在数据包被捕获之后应用的,使用Wireshark自定义语法,用于从已捕获的数据包中筛选目标内容。 接下来,我需要提取关键信息:Wireshark的功能、两种过滤规则的区别、应用场景以及实战案例等。这些都是文章的核心内容。 然后,我要把这些信息浓缩到100字以内。需要注意的是,要保持语言简洁明了,同时涵盖主要点:Wireshark的作用、两种过滤规则及其核心区别、应用场景和实战案例。 最后,检查一下是否符合用户的要求:不使用特定的开头语句,控制在100字以内,并且直接描述文章内容。 </think> 文章介绍了Wireshark的捕获过滤和显示过滤规则的区别与用法。捕获过滤基于BPF语法,在抓包前筛选数据包以减少体积;显示过滤基于Wireshark自定义语法,在抓包后精细筛选目标内容。文章通过实战案例详细讲解了两种规则的语法、技巧及应用场景。 2025-12-29 05:52:40 Author: www.freebuf.com(查看原文) 阅读量:0 收藏

Wireshark是网络运维和安全分析领域最常用的开源数据包分析工具,它能实时捕获并解析网络中的数据包,帮助用户排查网络故障、分析协议交互、检测异常流量。但在实际应用中,网络中的数据包数量往往是海量的——一台普通主机在联网状态下,几分钟内就能产生数千个数据包,如果直接在原始数据包列表中查找目标信息,无异于大海捞针。

过滤规则是Wireshark的核心功能,它能帮我们精准筛选出需要分析的数据包,过滤掉无关流量。Wireshark的过滤规则分为两大类型:捕获过滤显示过滤,二者的适用场景、语法规则差异显著,也是新手最容易混淆的知识点。本文将以“通俗易懂+实战案例”的形式,详细拆解这两种过滤规则的用法、语法和技巧,总字数超3000字,确保零基础用户也能快速上手。

一、核心区分:捕获过滤与显示过滤的本质差异

在学习具体规则前,我们必须先明确捕获过滤和显示过滤的核心区别——这是掌握Wireshark过滤的关键,二者的差异可以用下表清晰概括:

对比维度

捕获过滤

显示过滤

作用时机

数据包被Wireshark捕获之前

数据包被Wireshark捕获之后

核心目的

减少抓包体积,只捕获需要的数据包

从已捕获的数据包中筛选目标内容

语法标准

遵循BPF(Berkeley Packet Filter)语法

遵循Wireshark自定义过滤语法

资源占用

占用资源少,适合高流量场景

占用资源相对高,依赖已捕获的数据包

修改难度

抓包过程中无法修改,需停止抓包后重新设置

可随时修改,实时生效

简单来说,捕获过滤是“抓包前的精准捕捞”——比如你只想抓TCP协议的数据包,就可以设置捕获过滤规则,Wireshark会直接丢弃其他协议的数据包,避免无用数据占用磁盘空间;显示过滤是“抓包后的筛选分拣”——比如你已经抓了1万个数据包,现在想只看和某台主机相关的HTTP请求,就可以用显示过滤规则快速筛选,无需重新抓包。

二、捕获过滤:基于BPF语法的“精准捕捞”

捕获过滤的语法遵循经典的BPF标准,这个语法不仅适用于Wireshark,还适用于tcpdump等其他抓包工具,通用性极强。BPF语法的核心结构是[协议] [方向] [类型] [值],支持用逻辑运算符组合多个条件。

1. 基础语法:协议过滤

协议过滤是捕获过滤最基础的用法,直接输入协议名称,即可只捕获该协议的数据包。Wireshark支持绝大多数常见网络协议,比如tcpudpicmpiparphttp等。

语法格式协议名称

实战案例+解释

  • 案例1:tcp

解释:只捕获TCP协议的数据包,UDP、ICMP等其他协议的数据包会被直接丢弃。适用于分析TCP连接(比如三次握手、四次挥手)的场景。

1766986257_6952121123c3dee43ada4.png!small?1766986258626

  • 案例2:icmp

解释:只捕获ICMP协议的数据包。ICMP协议是网络诊断的核心协议,ping命令就是基于ICMP实现的,因此这个规则常用于排查“ping不通”的网络故障。

  • 1766986391_6952129775431489e0d5b.png!small?1766986393051案例3:arp

解释:只捕获ARP协议的数据包。ARP协议用于将IP地址解析为MAC地址,这个规则适用于排查“IP与MAC绑定异常”的问题。

1766986431_695212bf9ec0163777c06.png!small?1766986433341

注意事项:BPF语法不区分大小写,TCPtcp效果完全一致;并非所有协议都支持直接过滤,部分小众协议需要结合其他条件使用。

2. 进阶语法1:地址过滤

地址过滤用于筛选特定主机的数据包,支持IP地址和MAC地址两种类型,核心是通过src(源地址)和dst(目的地址)限定方向。

(1)IP地址过滤

核心关键词ip host(源或目的地址)、ip src(仅源地址)、ip dst(仅目的地址)

语法格式

  • 捕获源或目的IP为某地址的包:ip host IP地址

  • 捕获仅源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)的数据包,不管是这台主机主动发起的请求,还是发送给这台主机的响应,都会被捕获。适用于分析单台主机的所有网络行为。

1766986602_6952136a9b28206599ac1.png!small?1766986613808

  • 案例2:ip src 192.168.1.100

解释:只捕获源IP是[192.168.1.100](192.168.1.100)的数据包,也就是这台主机主动向外发送的流量。比如排查主机是否在偷偷发送异常数据,就可以用这个规则。

  • 1766986656_695213a0dabdfcdd4f0c5.png!small?1766986659533案例3:ip dst 114.114.114.114

解释:只捕获目的IP是[114.114.114.114](114.114.114.114)(国内常用DNS服务器)的数据包,适用于分析主机的DNS查询行为。

1766986714_695213dab12262caed56b.png!small?1766986716204

(2)MAC地址过滤

核心关键词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地址。

3. 进阶语法2:端口过滤

端口过滤用于筛选特定端口的数据包,主要针对TCP和UDP协议(这两种协议基于端口通信),核心关键词是portportrange(端口范围)。

核心关键词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等常用服务的端口,适用于分析主机与常见服务的交互。

4. 高阶语法:组合条件过滤

实际场景中,单一条件往往无法满足需求,此时需要用逻辑运算符组合多个条件。BPF语法支持三种核心逻辑运算符,优先级从高到低为:!(非) >&&(与) >||(或),也可以用括号()调整优先级(括号需要转义为()或在Wireshark中直接使用)。

逻辑运算符

作用

等效关键词

&&

两个条件同时满足

and

`


`

!

不满足该条件

not

实战案例+解释

  • 案例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)目的端口是80TCP数据包。这个规则的应用场景非常明确:分析[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语法的“精准分拣”

显示过滤是Wireshark最常用的过滤方式,它的语法比捕获过滤更灵活、功能更强大——支持直接引用数据包的协议字段(比如TCP的SYN标志位、HTTP的响应状态码),可以实现极其精细的筛选。显示过滤的结果实时生效,无需停止抓包,是排查网络问题的首选方式。

1. 基础语法:协议与地址过滤

显示过滤的基础语法和捕获过滤类似,但有两个核心区别:一是协议字段用点号 .分隔(比如ip.src而非ip src);二是比较运算符必须用双等号 ==(捕获过滤用单等号=或省略)。

(1)协议过滤

语法格式协议名称

实战案例+解释

  • 案例1:tcp

解释:显示所有TCP协议的数据包,和捕获过滤的tcp效果类似,但可以随时关闭过滤,恢复显示所有数据包。1766987314_69521632a616e159829e6.png!small?1766987316126

  • 案例2:http

解释:显示所有HTTP协议的数据包。需要注意的是,HTTPS协议的数据包会被标记为tls(因为HTTPS基于TLS加密),因此http过滤规则无法识别HTTPS流量。

1766987439_695216af14104128dca49.png!small

(2)地址过滤

核心字段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的数据包,用于分析局域网内的物理层流量。

2. 进阶语法1:端口与协议字段过滤

显示过滤的核心优势在于支持直接筛选协议字段,比如TCP的端口、标志位,HTTP的请求方法、响应状态码等。这些字段可以在Wireshark的数据包详情面板中查看(选中数据包,展开协议层级即可看到字段名称)。

(1)端口过滤

核心字段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是动态端口,适用于分析主机发起的主动连接。

(2)TCP标志位过滤

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三次握手的第二个包。这个规则可以验证目标服务器是否响应了连接请求。

(3)HTTP字段过滤

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请求。

3. 进阶语法2:流量特征过滤

除了协议和字段,显示过滤还可以根据数据包长度、时间、内容等特征筛选,适用于排查特殊的网络问题。

(1)数据包长度过滤

核心字段frame.len(整个数据包的长度,单位字节)

语法格式frame.len 比较运算符 数值

实战案例+解释

  • 案例1:frame.len == 1500

解释:显示所有长度为1500字节的数据包。1500是以太网的MTU(最大传输单元)最大值,这个规则适用于排查巨型帧导致的网络丢包问题。

  • 案例2:frame.len > 1000

解释:显示所有长度超过1000字节的数据包。大数据包通常包含文件传输、视频流等内容,适用于分析大流量数据的传输情况。

(2)时间过滤

核心字段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之间捕获的数据包。这个规则适用于分析特定时间段内的网络异常。

4. 高阶语法:组合条件与优先级

显示过滤的逻辑运算符和捕获过滤一致,支持&&(与)、||(或)、!(非),优先级可以用括号()调整。和捕获过滤不同的是,显示过滤的括号不需要转义,可以直接使用。

实战案例+解释

  • 案例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过滤规则进阶技巧

1. 过滤规则的保存与复用

对于经常使用的过滤规则,可以点击过滤栏右侧的 +号,输入规则名称和内容,保存为自定义过滤规则。下次使用时,直接从过滤栏的下拉列表中选择即可,无需重复输入。

2. 自动补全功能

Wireshark的显示过滤栏支持自动补全:输入字段的前几个字符,按下Tab键,Wireshark会自动提示可用的字段名称。比如输入ip.s后按Tab,会自动补全为ip.src,极大提升输入效率。

3. 颜色规则结合过滤

Wireshark支持为特定过滤规则设置颜色,比如将SYN包标为红色、将404响应包标为黄色,方便快速识别异常流量。设置方法:点击菜单栏ViewColoring RulesAdd,输入过滤规则和颜色即可。

4. 常见误区避坑

  • 语法混淆:捕获过滤用ip src,显示过滤用ip.src;显示过滤的等于必须用==,捕获过滤用=或省略。

  • 协议识别错误:HTTPS流量的协议字段是tls,而非https;FTP流量包含控制连接(21端口)和数据连接(20端口),需要同时过滤。

  • 逻辑运算符优先级:当多个运算符同时存在时,用括号调整优先级,避免因优先级问题导致过滤结果错误。

五、实战总结:过滤规则的应用场景

应用场景

推荐过滤规则

规则类型

排查ping不通问题

`icmp.type == 8


分析HTTP请求

http.request && tcp.port == 80

显示过滤

排查TCP连接失败

tcp.flags.syn == 1 && !tcp.flags.ack == 1

显示过滤

捕获高流量主机的数据包

ip host 192.168.1.100

捕获过滤

分析特定时间段的流量

frame.time >= "时间1" && frame.time <= "时间2"

显示过滤

六、总结

Wireshark的过滤规则是网络分析的“利器”,掌握捕获过滤和显示过滤的差异与用法,能让我们从海量数据包中快速定位目标信息。捕获过滤的核心是“减少抓包体积”,遵循BPF语法,适合高流量场景;显示过滤的核心是“精细筛选”,支持协议字段过滤,是日常排查的首选。


文章来源: https://www.freebuf.com/articles/others-articles/464200.html
如有侵权请联系:admin#unsafe.sh