ykxmz 1.5.0锛氫慨澶嶆墜琛ㄧ TLS 璇佷功鏍¢獙 + MTU 淇缃戠粶绋冲畾鎬?

琚帶绔?- 淇 MTU 闂锛氬す MSS + 璺緞 MTU 鎺㈡祴锛堝叕缃戝彲鐢ㄧ巼 48% -> 100%锛?- 澶嶇敤 HTTP 杩炴帴锛堝厤鎺夋瘡娆℃柊寤?TLS 鐨?30% 鎻℃墜澶辫触锛?- 姣忓垎閽熷洖澶存壘灞€鍩熺綉锛岃嚜鍔ㄥ垏鍥炲揩 400 鍊嶇殑璺緞
- 鐢婚潰蹇冭烦甯э細闈欐鏃剁渷娴侀噺锛屽鎴风浠嶇煡閬撴祦鏄椿鐨?- 閿佸睆鏃剁粰鍑哄彲鎿嶄綔鐨勬彁绀?
鎵嬭〃绔?- 鍐呯疆 GTS Root R4 / GlobalSign Root CA锛屼慨 SSLHandshakeException
- 杩炴帴閿欒缈昏瘧鎴愪汉璇濓紙璇佷功/鏃堕棿/瑙f瀽/瓒呮椂鍒嗗埆鎻愮ず锛?- 缁忎腑杞繛涓婂悗鐢ㄦ湇鍔″櫒鎶ョ殑鍦板潃鍒锋柊宸查厤瀵硅褰?- 鏂板灞€鍩熺綉杩炴帴椤甸潰銆佹湇鍔″櫒寤惰繜妫€娴?
鏈嶅姟鍣ㄧ
- 鏀寔 chunked 璇锋眰浣擄紙淇瘡 16 绉掍竴娆$殑杩炴帴閿欎贡涓庡ぇ闈㈢Н 502锛?- 缃戠粶璋冧紭鑴氭湰 net-tune.sh锛堝紑鏈鸿嚜鍔ㄥ簲鐢級
- 绠$悊椤碉細鎵归噺鍒犻櫎銆佺綉缁滀綋妫€銆佷笅杞藉尯
- 闅ч亾鏀?HTTP/2 + 鍙岃繛鎺?
鏂囨。
- 璁稿彲鍗忚 / 瀹夎鍓嶅繀璇?/ 瀹夎鍚庨』鐭ワ紙浣滆€咃細灏忛害瀛愶級
This commit is contained in:
xmz7891
2026-10-06 19:01:05 +08:00
commit b705216e4a
3195 changed files with 203292 additions and 0 deletions
+220
View File
@@ -0,0 +1,220 @@
# -*- coding: utf-8 -*-
"""验证「配对码被占用」的处理。
用户的要求:
一个设备设了 789113,另一台也想设 789113 -> 不行,
要弹通知说「该配对码已被使用,请换一个配对码」。
分两层验证:
1. 中转服务器层:第二台设备报同一个码 -> 必须被拒,且带 codeTaken
2. 被控端层:RelayLink 必须抛 RelayCodeTaken,并且**调用 on_alert 弹通知**
而且不能反复重试刷屏(换了码才继续)
"""
from __future__ import annotations
import json
import os
import shutil
import subprocess
import sys
import tempfile
import time
import urllib.error
import urllib.request
from pathlib import Path
_UA = {"User-Agent": "LanRemote/1.4.0"}
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT / "windows"))
RELAY_PORT = 8093
RELAY_URL = f"http://127.0.0.1:{RELAY_PORT}"
CODE = "789113"
OTHER_CODE = "654321"
passed = 0
failed = 0
def check(name, ok, detail=""):
global passed, failed
if ok:
passed += 1
print(" [PASS] " + name)
else:
failed += 1
print(" [FAIL] " + name + " " + str(detail))
def post(path, payload):
body = json.dumps(payload, ensure_ascii=False).encode("utf-8")
req = urllib.request.Request(RELAY_URL + path, data=body,
method="POST", headers=_UA)
try:
with urllib.request.urlopen(req, timeout=15) as resp:
return resp.status, json.loads(resp.read().decode("utf-8"))
except urllib.error.HTTPError as exc:
return exc.code, json.loads(exc.read().decode("utf-8", "replace"))
def main() -> int:
work = Path(tempfile.mkdtemp(prefix="code_conflict_"))
relay = None
try:
# ---------- 起本地中转 ----------
relay_data = work / "relaydata"
relay_data.mkdir(parents=True, exist_ok=True)
env = dict(os.environ)
env.update({
"RELAY_PORT": str(RELAY_PORT), "RELAY_BIND": "127.0.0.1",
"RELAY_DATA": str(relay_data), "RELAY_POLL": "6",
"PYTHONIOENCODING": "utf-8", "PYTHONUNBUFFERED": "1",
})
relay = subprocess.Popen(
[sys.executable, "-u", str(ROOT / "relay" / "relay.py")], env=env,
stdout=open(work / "relay.log", "wb"),
stderr=subprocess.STDOUT)
up = False
for _ in range(40):
time.sleep(0.5)
try:
with urllib.request.urlopen(
urllib.request.Request(RELAY_URL + "/v1/health",
headers=_UA),
timeout=2) as resp:
if resp.status == 200:
up = True
break
except Exception: # noqa: BLE001
continue
check("本地中转起来了", up)
if not up:
print((work / "relay.log").read_text(encoding="utf-8",
errors="replace")[-600:])
return 1
print()
print("一、中转服务器层")
status, first = post("/v1/agent/register", {
"deviceId": "pc-A", "code": CODE, "name": "电脑A",
"version": "1.4.0"})
check("第一台设备登记成功", first.get("ok") is True, first)
check("第一台拿到了令牌", bool(first.get("token")))
check("第一台的码就是它设的", first.get("code") == CODE,
first.get("code"))
status, second = post("/v1/agent/register", {
"deviceId": "pc-B", "code": CODE, "name": "电脑B",
"version": "1.4.0"})
check("第二台用同一个码被拒", second.get("ok") is False, second)
check("返回了 codeTaken 标记", second.get("codeTaken") is True, second)
check("错误说明了要换码",
"已被使用" in str(second.get("error"))
and "换一个" in str(second.get("error")),
second.get("error"))
check("第二台没拿到令牌", not second.get("token"), second)
status, third = post("/v1/agent/register", {
"deviceId": "pc-B", "code": OTHER_CODE, "name": "电脑B",
"version": "1.4.0"})
check("第二台换个码就能登记", third.get("ok") is True, third)
check("它拿到的是新码", third.get("code") == OTHER_CODE,
third.get("code"))
# 单设备单码仍然有效:A 报新码应被改回
status, again = post("/v1/agent/register", {
"deviceId": "pc-A", "code": "111222", "name": "电脑A",
"version": "1.4.0"})
check("A 报新码被改回原来的(单设备单码)",
again.get("code") == CODE, again.get("code"))
print()
print("二、被控端层(RelayLink 要弹通知)")
from lanremote.config import Store
from lanremote.relay import RelayCodeTaken, RelayLink
alerts = []
def on_alert(title, text):
alerts.append((title, text))
# A 的 store
store_a = Store(work / "store_a")
store_a.set_pairing_code(CODE)
store_a.set("server_name", "电脑A")
store_a.set("relay_device_id", "pc-A")
link_a = RelayLink(store_a, log=lambda _m: None, on_alert=on_alert)
link_a.start(RELAY_URL)
time.sleep(4)
check("A 连上并登记", link_a.status().get("online") is True
or link_a.token != "", link_a.status())
check("A 没有冲突", not link_a.status().get("codeConflict"),
link_a.status().get("codeConflict"))
# B 故意用同一个码
store_b = Store(work / "store_b")
store_b.set_pairing_code(CODE)
store_b.set("server_name", "电脑B")
store_b.set("relay_device_id", "pc-B")
alerts.clear()
link_b = RelayLink(store_b, log=lambda _m: None, on_alert=on_alert)
link_b.start(RELAY_URL)
time.sleep(6)
check("B 弹了通知", len(alerts) >= 1, f"{len(alerts)} 次: {alerts[:2]}")
if alerts:
title, text = alerts[0]
check("通知标题说了配对码", "配对码" in title, title)
check("通知正文说要换码",
"已被使用" in text and "换" in text, text)
check("B 停在冲突状态(没有反复重试刷屏)",
bool(link_b.status().get("codeConflict")),
link_b.status().get("codeConflict"))
check("B 的冲突信息里带着要换码的提示",
"已被使用" in str(link_b.status().get("codeConflict")),
link_b.status().get("codeConflict"))
count_before = len(alerts)
time.sleep(6)
check("同一个码不会反复弹通知",
len(alerts) == count_before,
f"又弹了 {len(alerts) - count_before} 次")
print()
print("三、用户换码之后要能自己恢复")
store_b.set_pairing_code(OTHER_CODE)
time.sleep(8)
check("换了码之后 B 连上了",
link_b.status().get("online") is True or link_b.token != "",
link_b.status())
check("冲突标记被清掉",
not link_b.status().get("codeConflict"),
link_b.status().get("codeConflict"))
for link in (link_a, link_b):
try:
link.stop()
except Exception: # noqa: BLE001
pass
print()
print("=" * 62)
print(f"通过 {passed} 项,失败 {failed} 项")
return 0 if failed == 0 else 1
finally:
if relay is not None:
try:
relay.terminate()
relay.wait(timeout=8)
except Exception: # noqa: BLE001
try:
relay.kill()
except Exception: # noqa: BLE001
pass
time.sleep(0.5)
shutil.rmtree(work, ignore_errors=True)
if __name__ == "__main__":
raise SystemExit(main())