首页/网络/抓包与流量分析速查/捕获过滤器与显示过滤器区别
Wireshark 技巧75 条

捕获过滤器与显示过滤器区别

捕获过滤器在抓取阶段用 BPF 语法丢弃报文(不可挽回);显示过滤器在展示阶段筛选(数据都在)。两者语法与时机都不同。

两类过滤器的区别

Wireshark 里有两个位置可以写过滤条件,作用完全不同。捕获过滤器在抓取阶段生效,用 BPF 语法(如 port 443),不匹配的报文会被直接丢弃且无法找回;显示过滤器在展示阶段生效,用字段表达式(如 tcp.port == 443),数据仍在文件里,随时改条件都能重新筛。两者的语法不通用,把字段名填进捕获过滤器会报语法错,把 BPF 原语填进显示过滤器同样如此。

基本信息

捕获过滤器位置捕获选项对话框里的输入框,命令行对应 dumpcap 的 -f
显示过滤器位置主窗口顶部过滤栏,命令行对应 tshark 的 -Y
捕获过滤器语法BPF,如 port 443、host 10.0.0.9
显示过滤器语法字段表达式,如 tcp.port == 443
可逆性捕获过滤器丢弃后不可恢复,显示过滤器随时切换

两类过滤器对比

维度捕获过滤器显示过滤器
生效时机报文进入抓包缓冲区之前报文已经落盘或进入内存之后
语法体系BPF 原语,不认识字段名协议字段表达式,可使用协议名限定
不可逆性丢弃的报文不会出现在文件里任何时候都能改条件重新筛
典型用途高流量口限流、远程抓包省带宽分析阶段反复切片与统计
组合限制只能表达地址、端口、协议等有限条件可表达字段比较、正则、集合等复杂条件

典型使用场景

  • 高流量接口上先限定主机或端口,避免把磁盘写满,此时用捕获过滤器
  • 不确定问题在哪台主机时,先全量抓一小段,再在本地用显示过滤器反复切片
  • 远程抓包受带宽限制时用捕获过滤器,本地分析不受限时用显示过滤器
  • 需要留证归档的场景尽量不加捕获过滤器,避免事后缺少上下文
  • 长期巡检固定几个业务端口时,捕获过滤器可以显著降低存储压力

两种写法的等价示例

两种写法的等价示例
捕获过滤器:port 443                    显示过滤器:tcp.port == 443
捕获过滤器:host 10.0.0.9               显示过滤器:ip.addr == 10.0.0.9
捕获过滤器:tcp port 80 or tcp port 443 显示过滤器:tcp.port in {80, 443}
捕获过滤器:not arp                     显示过滤器:!arp
捕获过滤器:ip proto 47                 显示过滤器:ip.proto == 47
判断条件该写在哪边,看两件事:这条条件是否需要丢弃报文来降低开销,以及这个条件事后会不会想改。需要省开销写在捕获侧,需要灵活性写在显示侧。
捕获过滤器丢掉的报文不会留在文件里。事后复盘时如果发现当时过滤得太狠,唯一的补救办法是重抓一次,关键故障场景建议保守过滤或不过滤。

命令行对应

命令行对应
dumpcap -i eth0 -f 'tcp port 443' -w a.pcapng      # 捕获过滤器:-f
tshark -r a.pcapng -Y 'tcp.port == 443' | head     # 显示过滤器:-Y
tcpdump -i eth0 -nn port 443 -w a.pcap             # tcpdump 的表达式也是捕获侧

选择建议

  • 高流量口先加捕获条件限流,宁可少抓一点也要保证抓包进程跟得上
  • 问题范围不明时全量抓短时段,比长时间带过滤抓更容易抓住真相
  • 长期抓包用环形缓冲加少量捕获条件,兼顾磁盘与信息量
  • 交接文件时附上当时使用的捕获过滤器,别人才能判断是否存在信息缺失

易错点

  • 把字段表达式填进捕获过滤器会直接报语法错误,两套语法不能互相套用
  • 捕获过滤器丢掉的报文无法找回,事后缺少上下文会让复盘结论不成立
  • 显示过滤器只改显示不改内容,误以为改条件就能补回已丢弃的报文是常见误解
  • 长时间抓包全部放行会写满磁盘,抓包进程写不进去时报文会静默丢失
  • 远程抓包忘设捕获条件会占用大量带宽,影响业务链路本身

数据来源与参考

  • Wireshark User's Guide(Capture/Display Filters)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌