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)