이 과거 문서의 적용 범위
이 문서는 이전 설정을 확인할 수 있도록 원본 Clash / Clash Premium의 과거 사용법을 보존한 자료입니다. “Premium 전용”, “미지원” 또는 플랫폼 제한은 현재 Mihomo의 기능을 뜻하지 않습니다. 이 내용을 그대로 적용해 현재 클라이언트 설정을 덮어쓰거나 권한 관련 명령을 실행하지 마세요.
Mihomo를 사용한다면 현재 Mihomo 설정 문서를 확인하세요. 화면 조작, 설치 및 권한 설정은 사용 중인 클라이언트의 프로젝트 문서를 따르세요.
Clash Premium은 Python3 기반 스크립트 기능을 구현해 사용자가 동적이고 유연한 방식으로 패킷의 정책을 선택할 수 있게 합니다.
하나의 Python 스크립트로 전체 규칙 매칭 엔진을 제어하거나, 바로가기를 정의해 일반 규칙과 함께 사용할 수 있습니다. 이 페이지는 전자를 설명합니다. 후자는 Script Shortcuts 스크립트 바로가기 문서를 참고하세요.
전체 규칙 매칭 엔진 제어
yaml
mode: Script
# https://lancellc.gitbook.io/clash/clash-config-file/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" # default policy for requests which are not matched by any other scriptIP 규칙(예: IP-CIDR, GEOIP 등)을 사용하려면 먼저 IP 주소를 직접 확인해 metadata에 할당해야 합니다:
python
def main(ctx, metadata):
# ctx.rule_providers["geoip"].match(metadata) return false
ip = ctx.resolve_ip(metadata["host"])
if ip == "":
return "DIRECT"
metadata["dst_ip"] = ip
# ctx.rule_providers["iprule"].match(metadata) return true
return "Proxy"Metadata 및 Context 인터페이스 정의:
ts
interface Metadata {
type: string // socks5、http
network: string // tcp
host: string
src_ip: string
src_port: string
dst_ip: string
dst_port: string
inbound_port: number
}
interface Context {
resolve_ip: (host: string) => string // ip string
resolve_process_name: (metadata: Metadata) => string
resolve_process_path: (metadata: Metadata) => string
geoip: (ip: string) => string // country code
log: (log: string) => void
proxy_providers: Record<string, Array<{ name: string, alive: boolean, delay: number }>>
rule_providers: Record<string, { match: (metadata: Metadata) => boolean }>
}