首页/网络/网络排障速查/捕获过滤器与显示过滤器区别

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

两套过滤器别混用:捕获过滤器(BPF,与 tcpdump 同语法)在抓取时生效、决定抓什么;显示过滤器在已抓数据上生效、随时可改,但救不回没抓到的包。

网络排障速查网络更新于 2026-10-13

两套过滤器分别管什么

Wireshark/tshark 有两套互不兼容的过滤器:捕获过滤器用 BPF 语法(与 tcpdump 完全一致),在抓包那一刻生效,直接决定内核丢弃哪些包;显示过滤器用字段式语法,作用在已经抓到的数据上,随时可改。关键差别在于可逆性——显示过滤器写错了改一下就行,捕获过滤器写窄了,没抓到的包再也救不回来。

基本信息

捕获过滤器语法tcp port 443 and host 10.0.0.5(BPF,pcap-filter 语法)
显示过滤器语法tcp.port == 443 && ip.addr == 10.0.0.5
生效时机捕获过滤器在抓取时;显示过滤器在加载后
对性能的影响捕获过滤器收窄后能显著降低内核拷贝与丢包率
tshark 参数-f 指定捕获过滤器,-Y 指定显示过滤器,两者可同时用

典型使用场景

  • 生产环境长时间抓包:必须用捕获过滤器把量压到可承受范围,否则丢包严重
  • 分析别人给的 pcap:不能改捕获条件,只能靠显示过滤器逐层精筛
  • 复现偶发故障:先用较宽的捕获条件捞全,再用显示过滤器反复切角度分析
  • 大流量排查只要握手包:捕获写 tcp port X,显示再叠 tcp.flags.syn == 1
  • 区分两层责任:确认包里到底有没有某字段(捕获决定),还是只是没显示(显示决定)

对应写法与组合

对应写法与组合
# 捕获过滤器(BPF,与 tcpdump 语法一致):
tcp port 443 and host 10.0.0.5
# 显示过滤器(Wireshark 字段语法):
tcp.port == 443 && ip.addr == 10.0.0.5
# 只显示 TCP 握手包
tcp.flags.syn == 1 && tcp.flags.ack == 0
# tshark 同时使用两者:-f 捕获,-Y 显示
tshark -i eth0 -f 'tcp port 443' -Y 'tls.handshake.type == 1' -c 50
# 从已有文件里读并精筛
tshark -r capture.pcap -Y 'http.response.code >= 500' -T fields -e frame.time -e ip.src -e http.response.code

两套过滤器对照

方面捕获过滤器显示过滤器
语法风格BPF:逻辑词 and/or/not字段式:==、&&、||,支持 in 与正则
生效时机抓包时,由内核执行加载后,由 Wireshark 执行
能否事后修改不能,未捕获的包永久丢失随时可改,不影响已抓数据
主要用途控制抓取范围、降低丢包分析定位、逐层收窄
常见错误填了字段式语法导致报错或抓不到把捕获语法填进显示栏直接标红
分析时发现「需要的包不在文件里」,先怀疑捕获过滤器写窄了或抓错点位,而不是急着怀疑对端没发包。

易错点

  • 把显示过滤器语法填进捕获过滤器输入框:Wireshark 直接报语法错误或抓到一堆无关包,白抓一轮
  • 生产抓取时把捕获条件设得过窄:事后发现要看别的流量,只能重抓,偶发故障机会已经错过
  • 只在抓取时过滤却忘了显示过滤:文件巨大导致加载缓慢甚至内存耗尽,分析效率反而更低
  • 误以为显示过滤器能提升抓包性能:它工作在内核之后,降丢包只能靠捕获过滤器

数据来源与参考

  • Wireshark User's Guide:Capture Filters vs Display Filters
  • pcap-filter(7):BPF 语法

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌