fix(proxy-client): поддержка новых VLESS-ссылок Hiddify
Новые ссылки Hiddify пишут «/» перед параметрами, используют VLESS-шифрование mlkem768x25519plus и flow=xtls-rprx-vision поверх XHTTP. Разбор принимает эти ссылки; прежние форматы работают как раньше. Vision поверх XHTTP разрешён только вместе с шифрованием. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
a074568cd9
commit
b492f8f4eb
3 files changed
+88
-4
No files matched your search
@@ -442,11 +442,12 @@ def parse_vless(url):
|
||||
parsed = urlsplit(url)
|
||||
except ValueError:
|
||||
raise ProxyError("неверная VLESS-ссылка")
|
||||
# Новые ссылки Hiddify пишут «/» перед «?»: ...@SERVER:PORT/?type=...
|
||||
if (
|
||||
parsed.scheme != "vless"
|
||||
or not parsed.netloc
|
||||
or parsed.password is not None
|
||||
or parsed.path
|
||||
or parsed.path not in ("", "/")
|
||||
):
|
||||
raise ProxyError("ожидалась одна ссылка vless://UUID@SERVER:PORT")
|
||||
try:
|
||||
@@ -464,8 +465,11 @@ def parse_vless(url):
|
||||
validate_address(server)
|
||||
query = parse_query(parsed.query)
|
||||
required(query, "type", "security", "encryption", "sni", "fp")
|
||||
if query["encryption"] != "none":
|
||||
raise ProxyError("поддерживается только encryption=none")
|
||||
# Кроме none, Xray принимает VLESS-шифрование вида
|
||||
# mlkem768x25519plus.РЕЖИМ.RTT.КЛЮЧ...; подробности проверит xray run -test.
|
||||
encrypted = query["encryption"] != "none"
|
||||
if encrypted and not query["encryption"].startswith("mlkem768x25519plus."):
|
||||
raise ProxyError("поддерживается только encryption=none или mlkem768x25519plus")
|
||||
if query.get("flow") not in (None, "xtls-rprx-vision"):
|
||||
raise ProxyError("поддерживается только flow=xtls-rprx-vision")
|
||||
if query.get("headerType", "none") != "none":
|
||||
@@ -485,7 +489,8 @@ def parse_vless(url):
|
||||
raise ProxyError("параметры профиля несовместимы с TCP/REALITY")
|
||||
elif query["type"] == "xhttp" and query["security"] == "tls":
|
||||
required(query, "host", "path")
|
||||
if "flow" in query or "pbk" in query or "sid" in query:
|
||||
# Vision поверх XHTTP работает только внутри VLESS-шифрования.
|
||||
if ("flow" in query and not encrypted) or "pbk" in query or "sid" in query:
|
||||
raise ProxyError("параметры профиля несовместимы с XHTTP/TLS")
|
||||
if "pcs" in query:
|
||||
hashes = list_value(query["pcs"])
|
||||
@@ -1188,6 +1193,8 @@ def safe_summary(profile, local_port):
|
||||
),
|
||||
flush=True,
|
||||
)
|
||||
if profile.query["encryption"] != "none":
|
||||
print("VLESS-шифрование: mlkem768x25519plus", flush=True)
|
||||
print("UUID и ключи: скрыты", flush=True)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user