Premium 版 · Clash ドキュメント

機能:Script Shortcuts

Clash Premium の Rule モードで Script Shortcuts を定義する方法を示し、Expr と Starlark の違い、代表的な変数・関数、no-resolve の使い方をまとめます。

  • Script Shortcuts
  • Expr
  • Starlark
  • no-resolve
  • SCRIPT
Premium 版

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)