mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 18:20:43 +00:00
被控端 - 修复 MTU 问题:夹 MSS + 路径 MTU 探测(公网可用率 48% -> 100%) - 复用 HTTP 连接(免掉每次新建 TLS 的 30% 握手失败) - 每分钟回头找局域网,自动切回快 400 倍的路径 - 画面心跳帧:静止时省流量,客户端仍知道流是活的 - 锁屏时给出可操作的提示 手表端 - 内置 GTS Root R4 / GlobalSign Root CA,修 SSLHandshakeException - 连接错误翻译成人话(证书/时间/解析/超时分别提示) - 经中转连上后用服务器报的地址刷新已配对记录 - 新增局域网连接页面、服务器延迟检测 服务器端 - 支持 chunked 请求体(修每 16 秒一次的连接错乱与大面积 502) - 网络调优脚本 net-tune.sh(开机自动应用) - 管理页:批量删除、网络体检、下载区 - 隧道改 HTTP/2 + 双连接 文档 - 许可协议 / 安装前必读 / 安装后须知(作者:小麦子)
128 lines
3.7 KiB
Python
128 lines
3.7 KiB
Python
# -*- 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())
|