本文最后更新于 2025-03-07T12:25:01+00:00
Script 脚本
Clash Premium 实现了基于 Python3 的脚本功能, 使用户能够以动态灵活的方式为数据包选择策略.
您可以使用单个 Python 脚本控制整个规则匹配引擎, 也可以定义一些快捷方式, 并与常规规则一起使用. 本页介绍了第一种功能, 有关后者, 请参见Script Shortcuts 脚本捷径.
控制整个规则匹配引擎
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| mode: Script
script: code: | def main(ctx, metadata): ip = metadata["dst_ip"] = ctx.resolve_ip(metadata["host"]) if ip == "": return "DIRECT"
code = ctx.geoip(ip) if code == "LAN" or code == "CN": return "DIRECT"
return "Proxy"
|
如果您想使用 IP 规则 (即: IP-CIDR、GEOIP 等) , 您首先需要手动解析 IP 地址并将其分配给 metadata:
1 2 3 4 5 6 7 8 9 10 11
| def main(ctx, metadata):
ip = ctx.resolve_ip(metadata["host"]) if ip == "": return "DIRECT" metadata["dst_ip"] = ip
return "Proxy"
|
Metadata 和 Context 的接口定义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| interface Metadata { type: string network: string host: string src_ip: string src_port: string dst_ip: string dst_port: string inbound_port: number }
interface Context { resolve_ip: (host: string) => string resolve_process_name: (metadata: Metadata) => string resolve_process_path: (metadata: Metadata) => string geoip: (ip: string) => string log: (log: string) => void proxy_providers: Record<string, Array<{ name: string, alive: boolean, delay: number }>> rule_providers: Record<string, { match: (metadata: Metadata) => boolean }> }
|