内置函数
除了 expr 本身内置的函数以外,我们还提供了一些额外的内置函数,可以在表达式中使用:
cidr
cidr(ip: string, cidr: string) -> bool
检查一个 IP 地址是否在一个 CIDR 范围内。示例:
- name: block cidr
action: block
expr: cidr(string(ip.dst), "192.168.0.0/16")
geoip
geoip(ip: string, country: string) -> bool
检查一个 IP 地址是否来自一个国家,使用来自 https://github.com/Loyalsoldier/v2ray-rules-dat 的数据。
示例:
- name: block CN geoip
action: block
expr: geoip(string(ip.dst), "cn")
geosite
geosite(domain: string, category: string) -> bool
检查一个域名是否属于一个特定的类别,使用来自 https://github.com/Loyalsoldier/v2ray-rules-dat 的数据。
示例:
- name: block bilibili geosite
action: block
expr: geosite(string(tls?.req?.sni), "bilibili")
lookup
lookup(domain: string) -> list<string>
lookup(domain: string, server: string) -> list<string>
对指定的域名进行 DNS 查询,返回 IP 地址列表(同时包括 A 和 AAAA 记录)。如果未指定服务器地址,则使用系统默认的 DNS。此操作使用标准 DNS 协议(不是 DNS over TLS、DNS over HTTPS 等),且服务器地址必须同时包括 IP 地址和端口(如 8.8.8.8:53
)。
示例:
- name: SNI mismatch
log: true
expr: tls?.req?.sni != nil && ip.dst not in lookup(tls.req.sni)