Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

抓包过滤器

抓包过滤器(Capture Filter)用于在开始抓包之前限制 Wireshark 实际写入抓包文件的数据包。

它适合用来减少无关流量、控制抓包文件大小,或者在高流量环境中降低后续分析压力。抓包开始后,抓包过滤器不能直接修改;如果要换条件,通常需要停止当前抓包并重新开始。

先分清:抓包过滤器不是显示过滤器

关键判断:抓包过滤器决定“抓哪些包”;显示过滤器决定“已抓到的包里显示哪些”。

两者语法不同,不能混用。

对比项抓包过滤器显示过滤器
使用阶段抓包之前抓包之后
作用决定哪些数据包会被捕获并写入文件在已抓到的数据包中筛选显示内容
典型语法tcp port 80tcp.port == 80
是否影响抓包文件大小会影响不影响
是否可随时修改抓包开始后不能直接修改可以随时修改
语法来源libpcap / BPF 语法Wireshark display filter 语法

如果你只是想在已经抓好的文件里查找某类流量,请使用显示过滤器。
如果你确定某些流量完全不需要保存,才使用抓包过滤器。

常用抓包过滤器示例

按主机筛选

只抓取发往或来自某个 IP 的流量:

text
host 172.18.5.4

只抓取某个网段内的流量:

text
net 192.168.0.0/24

等价写法:

text
net 192.168.0.0 mask 255.255.255.0

只抓取来自某个网段的流量:

text
src net 192.168.0.0/24

只抓取发往某个网段的流量:

text
dst net 192.168.0.0/24

按端口筛选

只抓取 DNS 流量:

text
port 53

抓取某个端口范围内的 TCP 流量:

text
tcp portrange 1501-1549

在旧版本 libpcap 中,也可能需要使用更底层的字节偏移写法:

text
(tcp[0:2] > 1500 and tcp[0:2] < 1550) or (tcp[2:2] > 1500 and tcp[2:2] < 1550)

排除条件

抓取某台服务器上非 HTTP、非 SMTP 的流量:

text
host www.example.com and not (port 80 or port 25)

等价写法:

text
host www.example.com and not port 80 and not port 25

抓取除 ARP 和 DNS 之外的流量:

text
port not 53 and not arp

按二层类型筛选

只抓取 EAPOL 流量:

text
ether proto 0x888e

排除发往 LLDP 组播地址的以太网帧:

text
not ether dst 01:80:c2:00:00:0e

只抓取 IPv4 流量,排除 ARP、STP 等低层协议:

text
ip

只抓取单播流量,减少广播和组播噪声:

text
not broadcast and not multicast

抓取 IPv6 all-nodes 组播流量,可用于观察路由器公告和邻居发现:

text
dst host ff02::1

进阶示例

抓取 HTTP GET 请求

下面的过滤器查找 TCP payload 开头的 GET 字节序列:

text
port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420

这类过滤器依赖 TCP 头长度计算,适合明确知道要匹配的字节位置时使用。

常见蠕虫和异常流量示例

Blaster 蠕虫示例:

text
dst port 135 and tcp port 135 and ip[2:2] == 48

Welchia 蠕虫示例:

text
icmp[icmptype] == icmp-echo and ip[2:2] == 92 and icmp[8:4] == 0xAAAAAAAA

查找从本地网段发起、目标为常见传播端口的 SYN 数据包:

text
(dst port 135 or dst port 445 or dst port 1433) and tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack = 0 and src net 192.168.0.0/24

Heartbleed exploit 相关流量示例:

text
tcp src port 443 and (tcp[((tcp[12] & 0xF0) >> 4) * 4] = 0x18) and (tcp[((tcp[12] & 0xF0) >> 4) * 4 + 1] = 0x03) and (tcp[((tcp[12] & 0xF0) >> 4) * 4 + 2] < 0x04) and ((ip[2:2] - 4 * (ip[0] & 0x0F) - 4 * ((tcp[12] & 0xF0) >> 4)) > 69)

默认抓包过滤器

当 Wireshark 判断自己正在通过 SSH、Remote Desktop 等方式远程运行时,会尝试自动设置默认抓包过滤器,以避免把远程控制会话本身抓进来。

环境变量默认过滤器含义
SSH_CONNECTION排除当前 SSH 连接两端主机和端口
SSH_CLIENT排除当前 SSH 客户端连接
REMOTEHOST排除远程主机流量
DISPLAY排除图形显示相关远程主机流量
CLIENTNAME排除 RDP 常用端口 3389

其中 addr_family 会根据地址类型替换为 ipip6

使用建议

  • 不确定条件是否正确时,先不要用抓包过滤器;先抓完整流量,再用显示过滤器验证。
  • 在高流量链路上抓包时,抓包过滤器可以减少文件大小,但也可能让你错过关键证据。
  • 抓生产故障时,优先保留足够上下文;只有明确知道目标流量范围时才提前过滤。
  • 抓包过滤器语法与 tcpdump、WinDump、Analyzer 以及其他基于 libpcap/WinPcap 的程序基本一致。

相关页面

  • DisplayFilters:抓包后筛选显示内容
  • ProtocolReference:按协议查找相关过滤字段
  • CaptureSetup:抓包前的环境和路径设置

外部参考

  • Wireshark User's Guide:抓包时过滤
  • pcap-filter(7) man page:libpcap 抓包过滤器完整语法
  • Capture and display filter cheat sheets:抓包过滤器和显示过滤器速查表

Imported from https://wiki.wireshark.org/CaptureFilters on 2020-08-11 23:12:05 UTC

原始页面图片

wireshark-main-window.png
wireshark-main-window.png

相关 Wireshark Wiki 页面

网络分析技术档案