3. 捕获过滤器语法与典型场景

捕获过滤器语法与典型场景 学习卡片

捕获过滤器在抓包链路中的位置

捕获过滤器(Capture Filter,BPF 语法)工作在抓包引擎之前:网卡驱动把帧交给 libpcap/Wireshark 的 BPF 虚拟机,只有匹配表达式的帧才会被写入内存缓冲区并最终落盘。因此它决定的是"哪些包根本不会进入抓包文件",而不是"哪些包显示在列表里"。这一点直接决定了它对本例目标——缩小 pcap 体积——的有效性。

抓包链路:捕获过滤器作用点 网卡 / 驱动 全部帧 BPF 捕获过滤器 host / port / net ether host 内核缓冲区 仅匹配帧 Wireshark 解析 / 显示 pcap 文件 落盘 未匹配帧 直接丢弃,不落盘 同一网卡、同一时段:过滤前后对比 无捕获过滤器 表达式:空(抓取全部帧) 内容:ARP、DNS、HTTP、SSH、广播… 文件:体积大,噪声多,定位慢 有捕获过滤器 表达式:host 192.168.1.20 and tcp port 443 内容:仅该主机与 443 端口的 TCP 会话 文件:体积小,噪声低,目标会话完整

四类核心原语与写法

捕获过滤器只认 BPF 原语,不认 Wireshark 显示过滤器的字段名(如 ip.addr、tcp.port 在捕获过滤器中无效)。常用四类原语如下:

原语匹配层次典型写法说明
hostIP 层host 192.168.1.20源或目的 IP 任一为该地址即匹配
netIP 层net 192.168.1.0/24按网段匹配,CIDR 或掩码写法均可
port传输层port 53、tcp port 443可加 tcp/udp 限定协议
ether host数据链路层ether host 00:1a:2b:3c:4d:5e按 MAC 匹配,用于二层定位

方向限定符 src / dst 可加在 host、net、port 前,例如 src host 192.168.1.20 只匹配源地址为该 IP 的帧。逻辑组合用 and、or、not,优先级为 not > and > or,需要改变结合顺序时用括号。

捕获过滤器一旦写错,可能把目标流量整体排除,且无法在事后恢复——被丢弃的帧不会进入 pcap。因此建议先用宽松表达式抓一小段,确认目标流量确实存在,再收紧表达式正式抓包。

实操:用 host 与 port 限定范围并对比文件

下面以一台本机(示例 IP 192.168.1.20)访问 HTTPS 服务为例,演示过滤前后差异。示例参数均为教学假设值,实际 IP、端口请按你的环境替换。

  1. 确认目标主机与端口:ipconfig(Windows)或 ip addr(Linux)查看本机 IP,浏览器访问一个 HTTPS 站点,确认目标端口为 443。
  2. 第一次抓包:选择正确网卡,捕获过滤器留空,抓 30 秒后停止,保存为 no_filter.pcapng。
  3. 第二次抓包:同一网卡,捕获过滤器填入 host 192.168.1.20 and tcp port 443,同样抓 30 秒,保存为 host_port.pcapng。
  4. 对比两个文件:在文件管理器中查看大小,或在 Wireshark 中打开后看状态栏的包数量。
# Linux 下用 capinfos 快速对比两个抓包文件
capinfos -c -s no_filter.pcapng
capinfos -c -s host_port.pcapng

# 输出示例(教学假设值):
# no_filter.pcapng    : 包数 18432, 文件大小 12.4 MB
# host_port.pcapng    : 包数  1265, 文件大小  0.9 MB

预期现象:host_port.pcapng 的包数与体积应显著小于 no_filter.pcapng,且其中只包含 192.168.1.20 与 443 端口之间的 TCP 会话(含握手、TLS 记录、FIN/RST)。若过滤后包数为 0,说明表达式与真实流量不匹配,需检查 IP 是否写错、端口是否被 NAT 改写、或目标流量走的是 IPv6。

典型场景表达式速查

场景捕获过滤器要点
只看某台主机全部流量host 192.168.1.20双向匹配,最常用
只看某主机发出的流量src host 192.168.1.20排除回程噪声
只看某网段net 192.168.1.0/24适合排查整个子网
只看 DNS 查询udp port 53DNS 走 UDP,TCP 53 用于区域传送
只看某主机 HTTPShost 192.168.1.20 and tcp port 443and 组合缩小范围
排除某主机not host 192.168.1.20用于屏蔽已知干扰源
按 MAC 定位二层设备ether host 00:1a:2b:3c:4d:5eIP 未配置或 ARP 场景
排除广播与组播not broadcast and not multicast减少 ARP、mDNS 噪声
捕获过滤器与显示过滤器是两道独立的闸门:捕获过滤器决定"抓什么",显示过滤器决定"看什么"。先用捕获过滤器把范围压到目标主机/端口,再用显示过滤器在已抓到的数据里做精细筛选,是体积与灵活性兼顾的常规做法。

常见错误与排查

  • 把显示过滤器语法写进捕获过滤器:ip.addr == 192.168.1.20 在捕获过滤器中会报语法错误,应改为 host 192.168.1.20。
  • 端口被 NAT 改写:内网访问外网时,抓包点若在 NAT 之后,看到的端口可能已不是原始端口,需按实际抓包位置调整表达式。
  • IPv6 流量被漏掉:host 192.168.1.20 只匹配 IPv4,若目标走 IPv6,需改用 ip6 host 或对应地址。
  • 过滤器过严导致零包:先用 host <目标IP> 单独验证,再逐步叠加 and tcp port 443,定位是哪一段条件把流量排除了。