Clash Premium は Python3 ベースのスクリプト機能を実装しており、パケットに適用するポリシーを動的かつ柔軟に選択できます。
単一の Python スクリプトでルール照合エンジン全体を制御することも、Shortcuts を定義して通常のルールと併用することもできます。このページでは後者を説明します。前者については スクリプトの説明 を参照してください。
この機能により、rules モードでスクリプトを使用できます。既定では、SCRIPT ルールで DNS 解決が行われます。解決を抑止するには、ルールの末尾に no-resolve を追加します(例:SCRIPT,quic,DIRECT,no-resolve)。
yaml
mode: Rule
script:
engine: expr # or starlark (10x to 20x slower)
shortcuts:
quic: network == 'udp' and dst_port == 443
curl: resolve_process_name() == 'curl'
# curl: resolve_process_path() == '/usr/bin/curl'
rules:
- SCRIPT,quic,REJECT評価エンジン
Expr は Script Shortcuts の既定エンジンで、Starlark と比べて 10 倍から 20 倍の性能向上を実現します。
Starlark は Python に似た設定言語で、Script Shortcuts にも使用できます。
変数一覧
- network: string
- type: string
- src_ip: string
- dst_ip: string
- src_port: uint16
- dst_port: uint16
- inbound_port: uint16
- host: string
- process_path: string
警告
Starlark には現在、process_path 変数がありません。
関数一覧
ts
type resolve_ip = (host: string) => string // ip string
type in_cidr = (ip: string, cidr: string) => boolean // ip in cidr
type in_ipset = (name: string, ip: string) => boolean // ip in ipset
type geoip = (ip: string) => string // country code
type match_provider = (name: string) => boolean // in rule provider
type resolve_process_name = () => string // find process name (curl .e.g)
type resolve_process_path = () => string // find process path (/usr/bin/curl .e.g)