ykxmz 1.5.0:修复手表端 TLS 证书校验 + MTU 修复网络稳定性

被控端
- 修复 MTU 问题:夹 MSS + 路径 MTU 探测(公网可用率 48% -> 100%)
- 复用 HTTP 连接(免掉每次新建 TLS 的 30% 握手失败)
- 每分钟回头找局域网,自动切回快 400 倍的路径
- 画面心跳帧:静止时省流量,客户端仍知道流是活的
- 锁屏时给出可操作的提示

手表端
- 内置 GTS Root R4 / GlobalSign Root CA,修 SSLHandshakeException
- 连接错误翻译成人话(证书/时间/解析/超时分别提示)
- 经中转连上后用服务器报的地址刷新已配对记录
- 新增局域网连接页面、服务器延迟检测

服务器端
- 支持 chunked 请求体(修每 16 秒一次的连接错乱与大面积 502)
- 网络调优脚本 net-tune.sh(开机自动应用)
- 管理页:批量删除、网络体检、下载区
- 隧道改 HTTP/2 + 双连接

文档
- 许可协议 / 安装前必读 / 安装后须知(作者:小麦子)
This commit is contained in:
xmz7891
2026-10-06 19:01:05 +08:00
commit b62ac865ea
3195 changed files with 203292 additions and 0 deletions
+127
View File
@@ -0,0 +1,127 @@
# -*- coding: utf-8 -*-
"""整理交付目录里的工具脚本(按用户要求)。
放行防火墙_以管理员运行.bat -> fxfhq.bat
工具箱.bat -> 删掉
网络自检.bat -> wlzj.bat
一键修复防火墙.bat -> xffhq.bat
关键改动:**不再依赖系统装的 Python**。
wlzj.bat 调 ykxmz.exe --netcheck(自检逻辑已经打进 EXE)
xffhq.bat 纯 netsh,本来就不需要 Python
fxfhq.bat 纯 netsh,本来就不需要 Python
网络自检.py 删掉(逻辑已移植到 lanremote/netcheck.py,随 EXE 打包)
"""
from __future__ import annotations
import shutil
import sys
from pathlib import Path
ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote")
TOOLS = ROOT / "tools"
# ---- wlzj.bat:网络自检,调 EXE,不需要 Python ----
WLZJ = r"""@echo off
chcp 936 >nul
title LAN Remote - Network Self Check
cd /d "%~dp0"
rem 找被控端 exe(脚本可能在 exe 同目录,也可能在子目录)
set "EXE=%~dp0ykxmz.exe"
if not exist "%EXE%" set "EXE=%~dp0..\ykxmz.exe"
if not exist "%EXE%" set "EXE=%~dp0ykxmz\ykxmz.exe"
if not exist "%EXE%" (
echo.
echo 找不到 ykxmz.exe
echo 请把这个脚本放在被控端目录里运行。
echo.
pause
exit /b 1
)
rem 自检逻辑已经打进 EXE,不需要系统装 Python。
rem --netcheck 会自己开一个控制台窗口并监听 90 秒。
start "" "%EXE%" --netcheck 90
exit /b 0
"""
# ---- fxfhq.bat:运行时也会由 firewall.py 重新生成一份,这里放一份备用 ----
FXFHQ = r"""@echo off
chcp 936 >nul
title LAN Remote - Allow Through Firewall
echo.
echo 这个文件由 ykxmz.exe 自动生成/覆盖。
echo 直接双击它以管理员身份运行即可放行防火墙。
echo.
echo 如果内容为空,请先运行一次 ykxmz.exe。
echo.
pause
"""
NEW_FILES = {
"wlzj.bat": WLZJ,
"fxfhq.bat": FXFHQ,
}
# 要删掉的
OLD_FILES = [
"工具箱.bat",
"网络自检.bat",
"网络自检.py",
]
def write_crlf(path: Path, text: str) -> None:
"""bat 必须是 CRLF,裸 LF 会让 cmd 误读。"""
path.write_bytes(text.replace("\n", "\r\n").encode("gbk", errors="replace"))
def main() -> int:
TOOLS.mkdir(parents=True, exist_ok=True)
# 1. 一键修复防火墙.bat -> xffhq.bat(内容原样搬,只是改名)
old_fix = TOOLS / "一键修复防火墙.bat"
new_fix = TOOLS / "xffhq.bat"
if old_fix.is_file():
data = old_fix.read_bytes()
# 确保是 CRLF
data = data.replace(b"\r\n", b"\n").replace(b"\n", b"\r\n")
new_fix.write_bytes(data)
print(f" 一键修复防火墙.bat -> xffhq.bat({len(data)} 字节)")
old_fix.unlink()
elif new_fix.is_file():
print(" xffhq.bat 已存在")
else:
print(" [警告] 找不到 一键修复防火墙.bat")
# 2. 新脚本
for name, content in NEW_FILES.items():
path = TOOLS / name
write_crlf(path, content)
print(f" 已写入 {name}")
# 3. 删旧的
for name in OLD_FILES:
path = TOOLS / name
if path.is_file():
path.unlink()
print(f" 已删除 {name}")
# 4. 残留的旧名字(放行防火墙_以管理员运行.bat 是运行时生成的)
for name in ("放行防火墙_以管理员运行.bat",):
path = TOOLS / name
if path.is_file():
path.unlink()
print(f" 已删除 {name}")
print()
print(" tools/ 现在的内容:")
for item in sorted(TOOLS.iterdir()):
print(f" {item.name} ({item.stat().st_size} 字节)")
return 0
if __name__ == "__main__":
sys.exit(main())