2026-10-27 19:38
[插件交流] [坦克插件] 解决国服开启系统代理后卡“正在连接”的问题
一、问题现象
回坑以来一直被一个比较奇怪的问题困扰:Windows开启系统代理后,坦克世界国服客户端会卡在“正在连接”界面,无法正常登录;关闭系统代理后则一切正常。
我有两台电脑,环境均为Windows 10 + Clash Verge,开启系统代理,关闭TUN模式并使用相同的代理配置,其中一台可以正常登录,另一台却不行。
为了不在每次玩游戏前都手动关闭系统代理,折腾了一番后,最后通过一个只有几行Python代码的小MOD解决了问题。
目前这个MOD已经在我和朋友的电脑上实测有效:无需关闭Windows系统代理,也无需开启TUN模式,即可正常登录游戏。
二、简单说说排障过程
一开始怀疑是Clash的代理规则导致的,但尝试了不少办法,都没能解决:
1. Clash设置全局直连(DIRECT)、单独为WOT相关域名添加直连规则,以及使用Merge规则修改配置,均无效。
2. 设置UDP流量不经过代理,同样无效。实际上从抓包结果来看,游戏登录失败时的UDP探测通信能够正常收发,也未发现相关UDP流量被代理转发,因此问题并不是简单的UDP流量走了代理。
3. 检查和对比两台电脑的DNS、系统代理设置、ProxyOverride、WinHTTP等配置,也没有发现能够解释这一问题的明显差异。
4. 尝试开启TUN模式,但根据其他朋友反馈发现,这也不一定能解决问题。而且还会导致另一个游戏NIKKE无法正常登录。
后来又使用Wireshark抓包、ProcMon、WGCheck和游戏客户端日志进行排查,甚至专门制作了一个诊断MOD,尝试追踪游戏内部的代理配置和网络请求。
不过截至目前,无论是抓包结果、游戏日志还是诊断MOD的日志,都没能查明到底是什么地方出了问题,也无法解释为什么配置基本相同的两台电脑表现不同。
但在过程中,测试Python环境变量时发现,通过修改游戏进程中的变量,可以在不关闭系统代理的情况下正常登录。
用脚本附加环境变量启动战游平台并将变量继承给游戏本体成功后,就把这个方法封装成了一个自动加载的MOD,免得每次启动游戏都要额外操作。
对于不想使用mod的朋友,找AI写个启动战游平台的脚本即可,每次开游戏前把战游平台关了并运行脚本即可。内容应当与跟下述源码类似。
三、MOD原理与源码
《坦克世界》客户端使用了Python,部分网络请求会经过Python的标准库。
Python 2.7在Windows下获取代理配置时,通常优先读取环境变量,没有获取到相应配置时再读取Windows注册表中的系统代理设置。
相关逻辑可以简化为:
而这个MOD就是利用了这一点。
核心代码:
简单解释一下:
NO_PROXY是一个用于指定代理绕过目标的环境变量。
在Python 2.7中,设置非空的NO_PROXY后,getproxies_environment()就能获取到非空配置,从而使上述getproxies()逻辑不再回退读取Windows注册表中的系统代理。
这里使用example.invalid作为占位值,而不是*,是为了尽量避免让其他正常使用代理的Python网络请求全部被强制直连。
这个修改只作用于游戏进程中的环境变量,不会关闭Windows系统代理,也不会修改Clash配置或系统注册表。
需要强调的是,这个MOD不是让游戏的所有流量强制直连,也不是修改游戏的网络通信代码。
它只是改变游戏内Python标准库获取代理配置时的行为。如果程序还设置了HTTP_PROXY、HTTPS_PROXY等环境变量,这个MOD也不会清除它们。
至于为什么这种方法能解决登录问题、为什么同样的设置在不同电脑上会有不同表现,目前还没有找到明确答案。
对于有顾虑或想自己制作本MOD的朋友,坦克的MOD采用标准.wotmod格式,本质上是一个无压缩ZIP文件。
本MOD文件结构如下:
其中mod_000_proxy_fix.pyc就是上述Python源码编译后的字节码文件。
可以将源码保存为mod_000_proxy_fix.py,使用Python 2.7编译:
然后按照上述目录结构打包为无压缩的ZIP文件,修改扩展名为.wotmod。
普通玩家直接安装成品MOD即可,不需要自行编译,也不需要另外安装Python。
四、安装及使用方法
1. 下载附件中的MOD文件压缩包并解压
MOD文件名:
2. 将文件放入游戏的MOD目录
以国服2.4.1.0版本为例:
注意是mods目录,不是res_mods,也不需要解压。
3. 正常启动游戏
保持原有的系统代理设置即可,不需要关闭代理,也不需要开启TUN模式。
通过WGC正常启动游戏,MOD会在加载时自动执行,不需要额外操作。
4. 卸载方法
直接删除.wotmod文件即可,不需要恢复任何系统设置。
5. 游戏版本更新
游戏版本更新后,可能会更换mods目录下的版本文件夹。
此时将MOD复制到新版本对应的文件夹即可尝试继续使用。
由于代码比较简单,理论上很难受到游戏版本更新的影响,但新版本是否兼容还需要实际测试。
五、其他说明
1. 这个MOD主要针对开启Windows系统代理后,游戏卡在“正在连接”,而关闭代理后又能正常登录的情况。如果关闭代理后仍然无法登录,可能是其他问题。
2. MOD已经在我和朋友的电脑上实测有效,但不保证所有因开启代理引起的登录失败都能通过这种方式解决。
3. MOD仅对游戏进程中的一个Python环境变量进行设置并输出日志,没有其他内容。
4. 如果出现其他异常,直接删除MOD即可。
最后,这个问题到底是怎么造成的,我现在也没弄明白。尤其是为什么相同网络环境、相似配置的两台电脑,一台正常、一台不正常,折腾了这么久还是没找到答案。
不过好在找到了一种比较简单的解决办法
[attach]./mon_202610/27/k9Q78-16wkK1.7z[/attach]
回坑以来一直被一个比较奇怪的问题困扰:Windows开启系统代理后,坦克世界国服客户端会卡在“正在连接”界面,无法正常登录;关闭系统代理后则一切正常。
我有两台电脑,环境均为Windows 10 + Clash Verge,开启系统代理,关闭TUN模式并使用相同的代理配置,其中一台可以正常登录,另一台却不行。
为了不在每次玩游戏前都手动关闭系统代理,折腾了一番后,最后通过一个只有几行Python代码的小MOD解决了问题。
目前这个MOD已经在我和朋友的电脑上实测有效:无需关闭Windows系统代理,也无需开启TUN模式,即可正常登录游戏。
二、简单说说排障过程
一开始怀疑是Clash的代理规则导致的,但尝试了不少办法,都没能解决:
1. Clash设置全局直连(DIRECT)、单独为WOT相关域名添加直连规则,以及使用Merge规则修改配置,均无效。
2. 设置UDP流量不经过代理,同样无效。实际上从抓包结果来看,游戏登录失败时的UDP探测通信能够正常收发,也未发现相关UDP流量被代理转发,因此问题并不是简单的UDP流量走了代理。
3. 检查和对比两台电脑的DNS、系统代理设置、ProxyOverride、WinHTTP等配置,也没有发现能够解释这一问题的明显差异。
4. 尝试开启TUN模式,但根据其他朋友反馈发现,这也不一定能解决问题。而且还会导致另一个游戏NIKKE无法正常登录。
后来又使用Wireshark抓包、ProcMon、WGCheck和游戏客户端日志进行排查,甚至专门制作了一个诊断MOD,尝试追踪游戏内部的代理配置和网络请求。
不过截至目前,无论是抓包结果、游戏日志还是诊断MOD的日志,都没能查明到底是什么地方出了问题,也无法解释为什么配置基本相同的两台电脑表现不同。
但在过程中,测试Python环境变量时发现,通过修改游戏进程中的变量,可以在不关闭系统代理的情况下正常登录。
用脚本附加环境变量启动战游平台并将变量继承给游戏本体成功后,就把这个方法封装成了一个自动加载的MOD,免得每次启动游戏都要额外操作。
对于不想使用mod的朋友,找AI写个启动战游平台的脚本即可,每次开游戏前把战游平台关了并运行脚本即可。内容应当与跟下述源码类似。
三、MOD原理与源码
《坦克世界》客户端使用了Python,部分网络请求会经过Python的标准库。
Python 2.7在Windows下获取代理配置时,通常优先读取环境变量,没有获取到相应配置时再读取Windows注册表中的系统代理设置。
相关逻辑可以简化为:
getproxies_environment() or getproxies_registry()而这个MOD就是利用了这一点。
核心代码:
import osos.environ['NO_PROXY'] = 'example.invalid'print '[WoT ProxyFix 1.0.0] loaded; NO_PROXY=example.invalid'简单解释一下:
NO_PROXY是一个用于指定代理绕过目标的环境变量。
在Python 2.7中,设置非空的NO_PROXY后,getproxies_environment()就能获取到非空配置,从而使上述getproxies()逻辑不再回退读取Windows注册表中的系统代理。
这里使用example.invalid作为占位值,而不是*,是为了尽量避免让其他正常使用代理的Python网络请求全部被强制直连。
这个修改只作用于游戏进程中的环境变量,不会关闭Windows系统代理,也不会修改Clash配置或系统注册表。
需要强调的是,这个MOD不是让游戏的所有流量强制直连,也不是修改游戏的网络通信代码。
它只是改变游戏内Python标准库获取代理配置时的行为。如果程序还设置了HTTP_PROXY、HTTPS_PROXY等环境变量,这个MOD也不会清除它们。
至于为什么这种方法能解决登录问题、为什么同样的设置在不同电脑上会有不同表现,目前还没有找到明确答案。
MOD文件结构与制作方法
对于有顾虑或想自己制作本MOD的朋友,坦克的MOD采用标准.wotmod格式,本质上是一个无压缩ZIP文件。
本MOD文件结构如下:
WoT_ProxyFix_1.0.0.wotmod|-- meta.xml`-- res/    `-- scripts/        `-- client/            `-- gui/                `-- mods/                    `-- mod_000_proxy_fix.pyc其中mod_000_proxy_fix.pyc就是上述Python源码编译后的字节码文件。
可以将源码保存为mod_000_proxy_fix.py,使用Python 2.7编译:
python -m py_compile mod_000_proxy_fix.py然后按照上述目录结构打包为无压缩的ZIP文件,修改扩展名为.wotmod。
普通玩家直接安装成品MOD即可,不需要自行编译,也不需要另外安装Python。
四、安装及使用方法
1. 下载附件中的MOD文件压缩包并解压
MOD文件名:
WoT_ProxyFix_1.0.0.wotmod2. 将文件放入游戏的MOD目录
以国服2.4.1.0版本为例:
World_of_Tanks_CN\mods\2.4.1.0\WoT_ProxyFix_1.0.0.wotmod注意是mods目录,不是res_mods,也不需要解压。
3. 正常启动游戏
保持原有的系统代理设置即可,不需要关闭代理,也不需要开启TUN模式。
通过WGC正常启动游戏,MOD会在加载时自动执行,不需要额外操作。
4. 卸载方法
直接删除.wotmod文件即可,不需要恢复任何系统设置。
5. 游戏版本更新
游戏版本更新后,可能会更换mods目录下的版本文件夹。
此时将MOD复制到新版本对应的文件夹即可尝试继续使用。
由于代码比较简单,理论上很难受到游戏版本更新的影响,但新版本是否兼容还需要实际测试。
五、其他说明
1. 这个MOD主要针对开启Windows系统代理后,游戏卡在“正在连接”,而关闭代理后又能正常登录的情况。如果关闭代理后仍然无法登录,可能是其他问题。
2. MOD已经在我和朋友的电脑上实测有效,但不保证所有因开启代理引起的登录失败都能通过这种方式解决。
3. MOD仅对游戏进程中的一个Python环境变量进行设置并输出日志,没有其他内容。
4. 如果出现其他异常,直接删除MOD即可。
最后,这个问题到底是怎么造成的,我现在也没弄明白。尤其是为什么相同网络环境、相似配置的两台电脑,一台正常、一台不正常,折腾了这么久还是没找到答案。
不过好在找到了一种比较简单的解决办法
[attach]./mon_202610/27/k9Q78-16wkK1.7z[/attach]
已编辑
![[ac:goodjob]](https://img4.nga.cn/ngabbs/post/smile/ac1.png)