【EVE-NG流量洞察】包过滤规则

推荐阅读:

1、EVE-NG 2TB全网最新最全镜像下载地址(保持更新)

https://www.emulatedlab.com/thread-939-1-1.html 

2、EVE-NG 2025全网最新最全资源大全(保持更新)

https://www.emulatedlab.com/thread-2262-1-1.html

3、EVE-NG 国代答疑频道(免费公开访问)

https://pd.qq.com/s/8d1hglslz

1 实时流量洞察

注意!
1、该功能目前仅支持节点对象之间互联接口
∗ ∗ 出 / O U T ∗ ∗ **出/OUT** /OUT方向的流量,并且不支持网络对象(例如cloud 0-9,nat等类型,network对象没有接口)

2、如果创建了包含错误表达式的过滤器,需要删除过滤器重新添加才行,直接修改表达式无效

1.1 介绍

该功能可以直接高亮显示出流量经过的链路路径,相对于在接口抓包而言更加直观。

  • 使用BPF PCAP捕获报文(支持捕获过滤器表达式不支持wireshark显示过滤器表达式,不支持linux shell 过滤条件);需要通过BPF PCAP filters来问AI想要捕获报文的过滤表达式
  • 支持自定义不同过滤器颜色;
  • 支持统计链路两端节点出方向的数据包数量;
特性捕获过滤器 (Capture Filter)显示过滤器 (Display Filter)
工作阶段抓包时(数据进入前)分析时(数据已捕获后)
处理位置内核层/驱动层 (libpcap/BPF)应用层 (Wireshark)
语法引擎BPF (Berkeley Packet Filter) 语法Wireshark 专用语法
执行速度极快(内核过滤)较慢(应用层解析后过滤)
资源影响减少内存/CPU使用(丢弃无关数据)不影响已保存文件大小
灵活性有限(只能基于头部信息强大可解析所有字段
可用字段主要基于协议头部固定偏移所有解析出的协议字段
修改结果永久影响(未捕获的数据永远丢失)临时影响(可随时更改)

捕获/显示过滤器区别详情右键新标签页打开

过滤需求捕获过滤器 (BPF)显示过滤器 (Wireshark)
HTTP 流量tcp port 80httptcp.port == 80
来自 192.168.1.1src host 192.168.1.1ip.src == 192.168.1.1
ARP 请求arp[6:2] = 1arp.opcode == 1
TCP SYN 包tcp[13] & 2 != 0tcp.flags.syn == 1
数据包长度 > 1000greater 1000frame.len > 1000
DNS 响应(无法区分)dns.flags.response == 1
HTTP 404 错误(无法实现)http.response.code == 404

1.2 使用方法

1.2.1 进入实验后,在侧边栏点击流量过滤器

在这里插入图片描述

1.2.2 新建过滤表达式

在这里插入图片描述

1.2.3 填写表达式

在这里插入图片描述

2 逻辑运算符

  • and:所有的条件都需要满足
  • or:只要有一个条件满足就可以
  • not:取反

支持 > < = >= <= && || !

2.1 协议筛选

  • icmp:icmp
  • tcp:tcp
  • udp:udp
  • http:port 80
  • dns:port 53

3 二层协议

3.1 以太网帧格式

https://www.wolai.com/qWQNMAp3AmtuKmj2ewpKgq

3.2 802.1Q VLAN

https://www.wolai.com/wt6rEFtqwF8rg8yiopnfEN

3.3 802.1ad (Q-IN-Q)

https://www.wolai.com/cT1DrYqbMCDC2yiEyXpvrn

3.4 PVLAN

https://www.wolai.com/mLD9W1b94HtB4Nj4YkgAQh

3.5 LACP

https://www.wolai.com/w3J83APT18pX6g8LGfLYKh

3.6 PAgP

https://www.wolai.com/jpK2gZVuyVJfRzmfMcLYRi

3.7 华为Eth-Trunk

https://www.wolai.com/7qGTeq8bK6yFQZCbTY4dL6

3.8 STP

https://www.wolai.com/mVf61ZDi3mNuMziGF1SUvC

3.9 RSTP

https://www.wolai.com/6EcBrCa1k9EFejxneRBZTB

3.10 MSTP

https://www.wolai.com/bLsX23CVAHFdMJjVAKdXG

3.11 L2TP

https://www.wolai.com/ngyFSdwwyEDcb5g93MRkW

3.12 思科PVST/PVST+/Rapid-PVST+

https://www.wolai.com/vw829W6YYHgRGViqYax3Bt

3.13 PPPOE

https://www.wolai.com/i23dUQ2b8bNr5a1XyGi6sJ

3.14 DOT1X

https://www.wolai.com/bWpzB7AN6TvJW7XKF9zRcH

3.15 LLDP

https://www.wolai.com/nyovvgVoHdzRLYaGRKQpbE

3.16 CDP

https://www.wolai.com/jMq2gnLubteuFmr3fYRers

3.17 MPLS

https://www.wolai.com/sAZYt3f68dM6LjEoyayW8Y

3.18 SRV6二层应用

https://www.wolai.com/pPoU9KWNcBZLsXveDQoQyL

3.19 M-LAG

https://www.wolai.com/hNCk2S7QoZKkqPUTQkqjuG

4 三层协议

4.1 IPv4

4.2 IPV6

4.3 NAT

4.4 ARP

4.5 RARP

4.6 Proxy ARP

4.7 GARP

4.8 NDP(IPv6)

4.9 路由协议

4.10 隧道协议

4.11 QOS

4.12 ICMP/ICMPV6

4.13 VRRP/HSRP/GLBP

4.14 BFD

4.15 DHCP/DHCPv6

5 四层协议

5.1 TCP

5.2 UDP

5.3 TLS/SSL

5.4 DTLS

6 应用层协议

6.1 HTTP

表达式语法筛选内容验证
tcp port 80http协议
80 and tcp[((tcp[12]&0xf0)>>2)+8:4] = 0x20XXYYZZhttp 200响应
tcp port 80 and tcp[((tcp[12]&0xf0)>>2)+8:4] = 0x20343034http 404响应
tcp port 80 and tcp[((tcp[12]&0xf0)>>2)+8:4] = 0x20353032http 502 响应
tcp port 80 and tcp[((tcp[12]&0xf0)>>2):4] = 0x47455420http GET请求
tcp port 80 and tcp[((tcp[12]&0xf0)>>2):4] = 0x504f5354http POST请求

更多内容请参考:

https://www.wolai.com/8R78KkgziNE1nrXuevyhYr


7 ICMP

右键新标签页打开查看协议详情

  • 请求包筛选:icmp[0] == 8
  • 应答包筛选:icmp[0] == 0

8 思科私有二层协议

**右键新标签页打开查看协议详情 **

协议 (Protocol)协议全称SNAP PID捕获过滤器语法 (Capture Filter Syntax)验证
CDPCisco Discovery Protocol0x2000ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x2000
VTPVLAN Trunking Protocol0x2003ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x2003
DTPDynamic Trunking Protocol0x2004ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x2004
PAgPPort Aggregation Protocol0x0104ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x0104
UDLDUnidirectional Link Detection0x0111ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x0111
ISLInter-Switch Linkether dst 01:00:0c:00:00:00

9 HOST

表达式语法使用条件验证
dst host <主机>数据包的目的IP是 <主机>,它可以是IP地址或主机名
src host <主机>数据包的源IP是 <主机>
host <主机>数据包的源或目的IP是 <主机>

以上任何主机表达式前均可加上关键字 iparprarpip6,例如 ip host <主机>,这等同于 ether proto \ip and host <主机>。如果 <主机> 是一个对应多个 IP 地址的名称,则会检查每个地址是否匹配。

10 DHCP

类型表达式语法验证
dhcp discoverudp[247:4] = 0x63350101
dhcp offerudp[247:4] = 0x63350102
dhcp requestudp[247:4] = 0x63350103
dhcp ackudp[247:4] = 0x63350105

11 网络与掩码(Net & Mask)

语法条件验证
dst net <网络>数据包的 IPv4/v6 目的地址的网络号为 <网络>
src net <网络>数据包的 IPv4/v6 源地址的网络号为 <网络>
net <网络>数据包的 IPv4/v6 源地址或目的地址的网络号为 <网络>
net <网络>mask <掩码>IPv4 地址匹配指定 <网络><掩码>。可以用 srcdst 修饰。注意此语法对 IPv6 网络无效
net <网络>/<长度>IPv4/v6 地址匹配 <网络> 及其 <长度> 位宽的掩码。可以用 srcdst 修饰

<网络> 可以来自配置文件(如 /etc/networks 等)中的名称,也可以是一个网络号。

IPv4 网络号可以按照下表网络号写,则会自动对应指定掩码

网络号掩码
192.168.1.1255.255.255.255
192.168.1255.255.255.0
192.168255.255.0.0
192255.0.0.0

对于 IPv6 地址,网络只能通过使用网络号和掩码长度来定义。例如,过滤器net fe80:1234:5678:9abc:0000:0000:0000:0000/64将包含所有 IPv6 地址在以下范围内的流量:fe80:1234:5678:9abc:0000:0000:0000:0000 - fe80:1234:5678:9abc:ffff:ffff:ffff:ffff

12 PORT

语法条件验证
dst port <端口>数据包的目的端口值为 <端口>
src port <端口>数据包的源端口值为 <端口>
port <端口>数据包的源端口或目的端口值为 <端口>
dst portrange <端口1>-<端口2>数据包的目的端口值在 <端口1><端口2> 之间
src portrange <端口1>-<端口2>数据包的源端口值在 <端口1><端口2> 之间
portrange <端口1>-<端口2>数据包的源端口或目的端口值在 <端口1><端口2> 之间

当数据包是 IPv4/IPv6 TCP、IPv4/IPv6 UDP 或 IPv4/IPv6 SCTP(在某些系统中)且具有指定的目的端口值时,条件为真。

<端口> 可以是一个数字,也可以是 /etc/services 文件中使用的名称。

如果使用名称,则会同时检查端口号和协议,如果使用数字或含义不明确的名称,则只检查端口号(例如,dst port 513 将匹配 TCP/login 流量和 UDP/who 流量;port domain 将匹配 TCP 53和 UDP 53 流量)。

以上任何端口或端口范围表达式前均可加上关键字 tcpudp。例如,tcp src port <端口> 仅匹配源端口为 <端口> 的 TCP 数据包。

13 应用层协议

13.1 HTTP


13.2 BPF应用层协议过滤Cookbook (EVE-NG Pro 专用)

13.2.1 核心原理复习

  • 端口过滤是基础:先用端口号把范围缩小,例如 tcp port 80
  • TCP载荷定位是关键:由于TCP头长度可变,我们用 tcp[((tcp[12] & 0xf0) >> 2):4] 这段“咒语”来动态定位TCP载荷的起始位置,然后从中读取数据。
  • UDP载荷定位很简单:UDP头固定是8字节,所以载荷从第8个字节开始(udp[8])。

13.2.2 案例大全

13.2.2.1 Web & 核心服务
协议过滤目标BPF 捕获过滤器语法验证
HTTPGET 请求tcp port 80 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x47455420)
HTTPPOST 请求tcp port 80 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x504f5354)
DNSDNS 查询 (Query)udp port 53 and (udp[10] & 0x80) = 0
DNSDNS 响应 (Response)udp port 53 and (udp[10] & 0x80) != 0
13.2.2.2 邮件服务
协议过滤目标BPF 捕获过滤器语法验证
SMTPHELO/EHLO 握手tcp port 25 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x48454c4f or tcp[((tcp[12] & 0xf0) >> 2):4] = 0x45484c4f)
POP3USER 用户名命令tcp port 110 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x55534552)
IMAPLOGIN 登录命令tcp port 143 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x4c4f47494e)
13.2.2.3 文件传输与共享
协议过滤目标BPF 捕获过滤器语法验证
FTPUSER 用户名命令tcp port 21 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x55534552)
FTPPASS 密码命令tcp port 21 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x50415353)
SMB/CIFSSMB 协议头tcp port 445 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0xff534d42)
13.2.2.4 远程管理
协议过滤目标BPF 捕获过滤器语法验证
SSH初始版本协商 (SSH-)tcp port 22 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x5353482d)
Telnet包含 login: 提示tcp port 23 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x6c6f6769)
RDP初始连接请求tcp port 3389 and tcp[((tcp[12] & 0xf0) >> 2):4] = 0x03000013
13.2.2.5 目录与时间服务
协议过滤目标BPF 捕获过滤器语法验证
NTP客户端请求 (Mode 3)udp port 123 and (udp[8] & 0x07) = 3
LDAP任何LDAP消息 (ASN.1 SEQUENCE)tcp port 389 and (tcp[((tcp[12] & 0xf0) >> 2):1] = 0x30)
13.2.2.6 VoIP & 流媒体
协议过滤目标BPF 捕获过滤器语法验证
SIPINVITE 呼叫请求udp port 5060 and (udp[8:4] = 0x494e5649)
RTP识别RTP报文 (Version 2)udp and (udp[8] & 0xc0) = 0x80

协议 (Protocol)过滤目标 (Filtering Goal)BPF 捕获过滤器语法 (Capture Filter Syntax)验证
HTTP过滤所有 GET 请求tcp port 80 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x47455420)
HTTP过滤所有 POST 请求tcp port 80 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x504f5354)
DNS只过滤 查询 报文 (Query)udp port 53 and (udp[10] & 0x80) = 0
DNS只过滤 响应 报文 (Response)udp port 53 and (udp[10] & 0x80) != 0
NTP只过滤客户端 请求udp port 123 and (udp[8] & 0x07) = 3
NTP只过滤服务器 响应udp port 123 and (udp[8] & 0x07) = 4
SSH过滤初始 协议版本协商 报文tcp port 22 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x5353482d)
FTP过滤 USER 用户名命令tcp port 21 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x55534552)
FTP过滤 PASS 密码命令tcp port 21 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x50415353)
DHCP过滤 DHCPDISCOVER 报文udp port 67 and udp[240:3] = 0x350101
DHCP过滤 DHCPOFFER 报文udp port 68 and udp[240:3] = 0x350102
DHCP过滤 DHCPREQUEST 报文udp port 67 and udp[240:3] = 0x350103
DHCP过滤 DHCPACK 报文udp port 68 and udp[240:3] = 0x350105

13.2.3 重要说明与注意事项

  1. 十六进制转换:上面用到的 0x... 值都是目标字符串的ASCII十六进制表示。比如 GET (注意后面有个空格) 对应的就是 47 45 54 20
  2. 加密流量无效:对于像HTTPS, SSH(协商后)这类加密的协议,你用这种方法是看不到任何明文内容的,顶多能抓个协议握手。
  3. 脆弱性:这种基于固定偏移量和内容的过滤方法非常脆弱。只要协议有一点点变化,或者报文里多了个选项,就可能导致过滤失效。
  4. DHCP偏移量:上面DHCP的例子 udp[240:3] 是基于标准DHCP报文结构计算的(UDP载荷的第240字节开始是DHCP选项)。如果你遇到的环境有特殊封装,这个偏移量可能需要调整(就像我们之前讨论的那样)。

14 路由协议

14.1 OSPF

14.1.1 OSPFv2 报文类型过滤 (IPv4)

标题 (Title)颜色 (Color)过滤表达式 (Filter Expression)验证
OSPFv2 - ALL(自定义)ip proto 89
OSPFv2 - Hello(自定义)ip proto 89 and ip[21] == 1
OSPFv2 - DBD(自定义)ip proto 89 and ip[21] == 2
OSPFv2 - LSR(自定义)ip proto 89 and ip[21] == 3
OSPFv2 - LSU(自定义)ip proto 89 and ip[21] == 4
OSPFv2 - LSAck(自定义)ip proto 89 and ip[21] == 5
OSPFv2 - Multicast(自定义)ip host 224.0.0.5 or ip host 224.0.0.6

14.1.2 OSPFv3 报文类型过滤 (IPv6)

OSPFv3是跑在IPv6上的,IPv6头部是固定的40字节,所以偏移量也很好算。

标题 (Title)颜色 (Color)过滤表达式 (Filter Expression)验证
OSPFv3 - ALL(自定义)ip6 proto 89
OSPFv3 - Hello(自定义)ip6 proto 89 and ip6[41] == 1
OSPFv3 - DBD(自定义)ip6 proto 89 and ip6[41] == 2
OSPFv3 - LSR(自定义)ip6 proto 89 and ip6[41] == 3
OSPFv3 - LSU(自定义)ip6 proto 89 and ip6[41] == 4
OSPFv3 - LSAck(自定义)ip6 proto 89 and ip6[41] == 5
OSPFv3 - Multicast(自定义)ip6 host ff02::5 or ip6 host ff02::6

14.1.3 进阶:OSPF LSA 类型过滤

如果你想看得更细,比如只想看特定类型的LSA(LSA是装在LSU报文里的),也可以做到。这对于分析复杂的路由问题特别有用。

(LSA Type的偏移量计算:IP头20字节 + OSPF头24字节 + LSU头4字节 + LSA头内部偏移3字节 = 51)

标题 (Title)颜色 (Color)过滤表达式 (Filter Expression)验证
LSA - Type 1 (Router)(自定义)ip proto 89 and ip[21] == 4 and ip[51] == 1
LSA - Type 2 (Network)(自定义)ip proto 89 and ip[21] == 4 and ip[51] == 2
LSA - Type 3 (Summary)(自定义)ip proto 89 and ip[21] == 4 and ip[51] == 3
LSA - Type 5 (External)(自定义)ip proto 89 and ip[21] == 4 and ip[51] == 5
LSA - Type 7 (NSSA)(自定义)ip proto 89 and ip[21] == 4 and ip[51] == 7


15 举例

15.1 筛选访问指定1.1.1.1 8080端口的流量

这里不指定源或目的ip而是直接使用host关键字,这样才能抓取完整会话流量。

tcp port 8080 and host 1.1.1.1

15.1.1 过滤访问223.5.5.5 DNS的流量

host 223.5.5.5 and port 53

16 BPF过滤能力清单


16.1 BPF 直接过滤能力清单 (分层详解)

16.1.1 第二层:数据链路层 (Layer 2)

这是BPF的起点,它对以太网帧头了如指掌。

协议/字段BPF 捕获过滤器原语/语法举例验证
以太网 MAC 地址ether src, ether dst, ether hostether host 00:11:22:33:44:55
以太网 协议类型ether proto <protocol>ether proto arp (或 arp)
VLAN (802.1Q)vlan [vlan_id]vlan 100 (匹配单层VLAN 100)
QinQ (802.1ad)vlan [outer_id] and vlan [inner_id]vlan 100 and vlan 20 (匹配外100内20)
ARP/RARParp, rarparp and host 192.168.1.1

16.1.1.1 第三层:网络层 (Layer 3)

这是BPF最强大的主场,几乎IP头里的所有东西都能被直接或间接地过滤。

协议/字段BPF 捕获过滤器原语/语法举例验证
IP 地址src, dst, host, nethost 8.8.8.8net 192.168.0.0/16
IP 协议号proto <protocol>ip proto <protocol>ip proto 89 (OSPF), ip proto 88 (EIGRP)
ICMPicmp, icmp6icmp (匹配所有ICMPv4)
IGMPigmpigmp (匹配所有IGMP)
IP 广播/组播broadcast, multicastip broadcast (匹配所有IP广播)
IP头长度/TTL等ip[offset] (字节偏移量)ip[8] < 10 (过滤TTL小于10的包)

16.1.1.2 第四层:传输层 (Layer 4)

BPF对TCP和UDP的头部也非常熟悉。

协议/字段BPF 捕获过滤器原语/语法举例验证
TCP/UDP 端口src port, dst port, port, portrangetcp port 80udp portrange 1000-2000
TCP 标志位tcp[tcpflags] (位掩码)tcp[tcpflags] & tcp-syn != 0 (过滤SYN包)
TCP 标志位组合tcp[tcpflags] (位掩码)`tcp[tcpflags] & (tcp-syntcp-ack) = (tcp-syn

16.1.2 核心原理:为什么二三四层这么容易?

答案很简单:因为这些层的协议头部格式是固定的、标准化的。

  • BPF引擎就像一个流水线上的质检员,它手里有一张“图纸”(协议规范),清楚地知道一个以太网帧的第0-5字节是目的MAC,第6-11字节是源MAC,第12-13字节是协议类型…
  • 对于IP头、TCP头、UDP头也是同理。每个字段(如IP地址、端口号、协议号)在头部里的位置(偏移量)都是固定的
  • 所以,BPF可以以极高的效率,直接去“摸”特定位置的字节,然后跟你给的条件进行比较。这就是它为什么快,为什么天生就适合干这个。

而我们之前讨论的应用层协议(HTTP、DNS等),它们的内容位于TCP/UDP的**载荷(Payload)**里,这个载荷的结构是多变的、长度不定的,所以BPF这个“质检员”就很难直接找到它想要的东西,必须用各种“黑魔法”去猜位置。


总结一下:

基本上,只要一个协议的信息是明确地、固定地写在二、三、四层头部里的,BPF就能用它内置的“原语”(比如host, port, vlan)或者简单的字节偏移量直接过滤。这覆盖了绝大多数网络基础协议。

17 BPF Pcap 过滤常见报文

17.1 一、二层(数据链路层)过滤条件

过滤场景BPF过滤条件验证
所有ARP包arp
仅ARP请求arp and arp[6:2] == 1
仅ARP响应arp and arp[6:2] == 2
源MAC为指定值ether src 00:11:22:33:44:55
目的MAC为指定值ether dst 00:11:22:33:44:55
以太网广播包ether dst ff:ff:ff:ff:ff:ff
所有以太网多播包ether[0] & 1 = 1
VLAN ID为100的包vlan 100
双层VLAN(外层100、内层200)vlan 100 and vlan 200

17.2 二、三层(网络层)过滤条件

过滤场景BPF过滤条件验证
所有IPv4包ip
所有IPv6包ip6
源IP为指定地址src host 192.168.1.1
目的IP为指定地址dst host 192.168.1.1
源/目的IP为指定地址host 192.168.1.1
源IP属于指定网段src net 192.168.1.0/24
源/目的IP属于指定网段net 192.168.1.0/24
所有ICMP包(IPv4)icmp
仅ICMP ping请求icmp and icmp[0] == 8
仅ICMP ping响应icmp and icmp[0] == 0
所有ICMPv6包icmp6
所有IP协议中的TCP包ip proto 6(等价于tcp
所有IP协议中的UDP包ip proto 17(等价于udp

17.3 三、四层(传输层)过滤条件

过滤场景BPF过滤条件验证
所有TCP包tcp
源TCP端口为80tcp src port 80
目的TCP端口为80tcp dst port 80
源/目的TCP端口为80tcp port 80
TCP端口范围1-1024tcp portrange 1-1024
仅TCP SYN包tcp[tcpflags] & tcp-syn != 0
仅TCP SYN+ACK包tcp[tcpflags] & (tcp-syntcp-ack) == (tcp-syntcp-ack)
仅TCP FIN包tcp[tcpflags] & tcp-fin != 0
仅TCP RST包tcp[tcpflags] & tcp-rst != 0
所有UDP包udp
源UDP端口为53udp src port 53
目的UDP端口为53udp dst port 53
源/目的UDP端口为53udp port 53
UDP数据长度>100字节udp and udp[4:2] > 100
所有SCTP包sctp
SCTP端口为3868sctp port 3868

17.4 四、多层组合过滤条件(实战常用)

过滤场景BPF过滤条件验证
192.168.1.0/24网段的HTTP流量ip net 192.168.1.0/24 and tcp port 80
非回环的ICMP ping请求icmp and icmp[0] == 8 and not host 127.0.0.1
VLAN 100中目的IP为10.0.0.1的DNS包vlan 100 and ip dst 10.0.0.1 and udp port 53
排除SSH(22端口)的TCP流量tcp and not tcp port 22
源IP为10.0.0.5且目的TCP端口为443src host 10.0.0.5 and tcp dst port 443


17.4.1 到底用哪种表达式合适?

17.4.1.1 第一优先级:使用高级原语 (The High-Level Way)

这是最简单、最可读、也最高效的选择。只要你想过滤的东西,BPF有现成的关键字,就无脑用它。

  • 适用场景: 过滤绝大多数二、三、四层协议。
  • 举例:
    • host 192.168.1.1
    • net 192.168.0.0/16
    • tcp port 80
    • udp port 53
    • arp
    • vlan 100
    • ip proto 89 (OSPF)
17.4.1.2 第二优先级:使用字节偏移量“黑魔法” (The Low-Level Way)

只有当高级原语不好用不存在时,才退而求其次,使用这种“手术刀”式的玩法。

  • 适用场景:
    1. 过滤那些因为封装特殊导致高级原语失效的协议(典型案例:CDP, VTP, DTP等思科私有协议)。
    2. 过滤应用层协议的特定内容(比如HTTP方法、DNS查询类型等)。
  • 举例:
    • 过滤CDP: ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x2000
    • 过滤HTTP POST: tcp port 80 and (tcp[((tcp[12] & 0xf0) >> 2):4] = 0x504f5354)

17.4.2 你的Cookbook终极版

协议/流量类型推荐的EVE-NG Pro过滤表达式理由
IP/TCP/UDPhost, net, port, proto使用最高效、最可读的标准原语。
ARP/VLANarp, vlan使用标准原语。
OSPF/EIGRPip proto 89, ip proto 88使用协议号原语,一网打尽。
CDP/VTP/DTP等ether host ... and ether[offset:len] == ...标准原语cdp不可靠,必须用MAC+字节偏移的组合拳。
HTTP/DNS等应用层tcp/udp port ... and (tcp/udp[offset:len] == ...)没有应用层原语,只能靠字节偏移的“黑魔法”去猜。


17.4.3 BPF/PCAP 常用原语大全 (The Greatest Hits)

类别 (Category)原语/关键字 (Primitive/Keyword)功能说明 (Function)详细举例 (Examples)
主机/网络 (Host/Network)host, net, src, dst用于过滤IPv4或IPv6地址和网络。host 8.8.8.8 (源或目是8.8.8.8) net 192.168.1.0/24 (在192.168.1.0/24网段内) src host 10.0.0.1 (源是10.0.0.1) dst net 172.16.0.0 mask 255.240.0.0 (目标是172.16.0.0/12)
端口 (Port)port, portrange, src port, dst port用于过滤TCP或UDP端口。port 80 (源或目端口是80) src port 1025 (源端口是1025) dst portrange 20-21 (目的端口在20到21之间)
协议 (Protocol)proto, ip, ip6, arp, rarp, tcp, udp, icmp, icmp6用于按协议类型过滤。ip proto 89 (OSPFv2) tcp (等同于 ip proto 6) udp (等同于 ip proto 17) arp (过滤所有ARP报文)
数据链路层 (Data Link)ether host, ether src, ether dst, vlan用于过滤MAC地址和VLAN标签。ether host 00:11:22:aa:bb:cc (源或目MAC是…) ether dst ff:ff:ff:ff:ff:ff (以太网广播) vlan 100 (匹配VLAN 100)
广播/组播 (Broadcast/Multicast)broadcast, multicast用于过滤广播或组播地址。ip broadcast (IP广播, x.x.x.255) ip multicast (IP组播, 224.0.0.0/4) ether broadcast (以太网广播, ff:ff:ff:ff:ff:ff)

18 适用场景分析


18.1 适用场景 (Where it Shines ✨)

这个功能的核心价值在于实时、直观地可视化数据包的路径和类型。所以,它最擅长处理那些能被BPF语法清晰、无歧义地定义的流量。

18.1.1 1. 路由与路径验证 (它的核心价值)

  • 场景举例: 你配置了复杂的策略路由(PBR)或负载均衡,想知道从PC1到服务器的流量到底走了ISP A还是ISP B。
  • 怎么用: 创建一个过滤器 host <PC1_IP> and host <Server_IP>。然后从PC1去ping服务器,看彩色的线条出现在哪条物理链路上。这比在每个路由器上敲traceroute要直观一万倍。
18.1.1.1 2. 协议学习与教学
  • 场景举例: 一个新手想搞明白OSPF邻居关系是怎么建立的。
  • 怎么用: 分别创建Hello, DBD, LSR, LSU, LSAck的过滤器,并设置成不同颜色。然后启动两台路由器,你就能在拓扑图上亲眼看到五颜六色的报文按照“Down -> Init -> 2-Way -> ExStart -> Exchange -> Loading -> Full”的顺序依次亮起,瞬间就懂了。
    • Hello包过滤器: ip proto 89 and ip[21] == 1
    • DBD包过滤器: ip proto 89 and ip[21] == 2
18.1.1.2 3. ACL与防火墙策略验证
  • 场景举例: 你刚在防火墙上写了一条规则,禁止内网192.168.1.0/24网段访问外部的Telnet服务。
  • 怎么用: 创建一个过滤器 net 192.168.1.0/24 and tcp port 23。然后从内网PC尝试telnet外部服务器。如果彩色线条在防火墙那里就“断头”了,说明策略生效;如果线条穿过了防火墙,说明你的规则写错了。
18.1.1.3 4. 二层协议分析
  • 场景举例: 你想知道网络里哪台交换机在发送VTP更新,或者哪些端口在跑CDP/LLDP。

  • 怎么用: 直接用我们今天推导出的精确过滤器。

    • VTP过滤器: ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x2003
    • CDP过滤器: ether host 01:00:0c:cc:cc:cc and ether[20:2] == 0x2000

    你就能看到VTP报文是从哪个交换机发出来的,CDP邻居关系是在哪些链路上传递的。


18.1.2 不适用场景 (Where it’s Blind 💀)

这个功能的“阿喀琉斯之踵”就是BPF语法的“天花板”。所有BPF搞不定的事,它都搞不定。

18.1.2.1 1. 基于应用层内容的精细过滤
  • 场景举例: 你想过滤出所有访问www.google.com的HTTP流量,而不是所有80端口的流量。
  • 为什么不行: 我们已经讨论过了,BPF无法可靠地解析HTTP头里的Host字段,因为它位置不固定。它只能做到 tcp port 80,但分不清里面跑的是哪个网站。
  • 正确工具: Wireshark显示过滤器 (http.host == "www.google.com") 或应用层防火墙。
18.1.2.2 2. 分析加密流量的内容
  • 场景举例: 你想过滤出所有访问特定HTTPS网站或特定API接口的流量。
  • 为什么不行: 流量是加密的。BPF只能看到这是一个TLS/SSL报文(比如tcp port 443),但它看不懂里面加密的“天书”到底是什么。它无法根据加密后的URL或API路径进行过滤。
  • 正确工具: 需要解密的代理服务器(如Fiddler, Charles)或企业级的流量解密设备。
18.1.2.3 3. 状态化的TCP连接分析
  • 场景举例: 你想只看TCP的重传报文,或者乱序报文。
  • 为什么不行: BPF是无状态的,它对每个包都是独立判断。它不知道一个TCP会话的上下文,不知道上一个包的序列号是多少,所以它无法判断当前这个包是不是重传。
  • 正确工具: Wireshark。它会重组整个TCP流,并用tcp.analysis.retransmission这样的显示过滤器帮你轻松找到所有问题包。

18.1.3 最终总结

说白了,EVE-NG Pro这个新功能,是一个极其强大的、用于三四层流量路径和协议交互的可视化工具。你可以把它当成一个**超级图形化的****traceroute和基础的tcpdump**的结合体

  • 用它来:看流量走向、学协议交互、验证ACL和路由策略。
  • 别指望它:替代Wireshark做深度的应用层协议分析和TCP状态分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值