UESTC校园网自动连接方案
寒假在家也能猛猛科研?UESTC 校园网自动保活方案(牛马专用版)
写在前面
放寒假了,作为一名致力于为祖国科研事业添砖加瓦的优秀研究生(指我),回家自然也是要远程控制教研室电脑“猛猛学习”的。但众所周知,学校不仅放假偶尔会断电,那个深澜校园网认证也是个时不时抽风的“磨人小妖精”。
这就导致了一个经典的死循环:
- 师弟帮忙开了机(或者配置了 BIOS 上电自启)。
- 你满怀期待打开 ToDesk/RayLink/Tsun。
- 显示设备离线。
- 因为校园网登录过期或者断网了,此时你只能对着屏幕流下悔恨的泪水,痛斥为什么不能通过意念写 Paper。
为了保障各位英才的科研之路畅通无阻,不再被这点小事绊倒,特写了此脚本为祖国未来的人才保驾护航。
(注:断电重连的前提是你得先配置好 BIOS 的“来电自启/Restore on AC Power Loss”,这个大家根据自己的电脑品牌自行 Google,我就不展开了)
它能干啥?
简单来说,这就是个帮你“盯梢”的脚本,主打一个死缠烂打,永不掉线。
- 开机自动认证:电脑只要一通电启动,脚本立马在后台静默运行,自动完成校园网认证。
- 掉线自动重连:它会每隔几十秒(可配)悄悄
ping一下外网。一旦发现网断了,立马触发重连机制,直到连上为止。 - 微信状态通知:由于人在千里之外,看不见电脑屏幕。所以我加了企业微信通知。连上了、断开了、重连成功了,手机上都能第一时间收到消息,心里稳得一批。
实测效果
-
断开校园网
-
启动一次性登录脚本
-
持续监控
核心原理
虽然初心是为了“牛马”方便,但代码写都写了,还是稍微正经聊两句实现逻辑。
1. 登录协议逆向
其实深澜(Srun)的认证系统虽然前端花里胡哨,核心就是几个 HTTP 请求。我们只需要抓包分析一下它的挑战(Challenge)过程和加密算法。
主要流程大概是:
get_challenge: 获取 token 和 client ip。hmd5/chksum: 根据 token 对密码进行一顿加密操作(魔改的 MD5 和 Base64)。srun_portal: 带着加密后的 info 字段去请求登录接口。
本项目对应的 LoginManager 封装了所有复杂的加密逻辑,你只需要填账号密码就行。
2. 状态监测 Daemon
光能登录不行,关键是得“保活”。写了个简单的死循环监控(Daemon):
- 检测策略:优先
ping指定 IP(比如阿里的 DNS),如果 ping 不通,再尝试 HTTP 请求(防止被 portal 劫持误判)。 - 防抖动:不会一断网就疯狂请求,设置了重试阈值,只有连续几次失败才判定为真·断网,发起重连。
3. 开机自启方案
为了让大家(包括我自己)用得爽,我写了个批处理脚本 install_autostart.bat。
它会调用 Windows 的 schtasks 命令,创建一个任务计划(名为 UESTC-NET)。
- 触发器:用户登录时(OnLogon)。
- 权限:最高权限运行(防止部分系统权限限制导致从脚本无法执行)。
- 隐蔽性:配合
pythonw.exe,后台静默运行,平时你根本感知不到它的存在。
怎么用?
代码我已经开源了,直接整就行。
第一步:准备工作
-
下载项目:GitHub 链接,把代码拉到本地(建议放在非 C 盘目录下)。
-
安装环境:你需要有 Python。然后运行
pip install -r requirements.txt装一下依赖。 -
填配置:
复制config.example.py为config.py,主要修改以下几项:1
2
3'user': User('202xxxxxxxx', 'Password'), # 你的学号和密码
'ac_id': '1', # 主楼/实验室填 1,寝室填 3
'domain': '@dx-uestc', # 默认校园网不用动(或者直接不填),电信改成 @dx
第二步:一键完成 (推荐)
直接双击项目目录下的 install_autostart.bat。
- 如果你有管理员权限,它会自动帮你建好任务计划。
- 如果没有,它会自动生成一个 VBS 脚本丢到启动文件夹里(也能用,就是没那么优雅)。
看到“成功”俩字,这事就算成了。
第三步:手动挡(硬核玩家可选)
如果你喜欢自己动手,或者脚本运行失败,可以用命令行手动配置:
方案 A:任务计划程序 (推荐)
1 | schtasks /create /tn "UESTC-NET" /tr "\"<Python路径>\pythonw.exe\" \"<项目路径>\\always_online.py\"" /sc onlogon /rl HIGHEST /f |
(注:请将 <Python路径> 替换为你的 python.exe 所在目录,<项目路径> 替换为代码实际路径)
方案 B:NSSM 服务
如果你有洁癖,想把它做成系统服务:
1 | nssm install UESTC-NET "<Python路径>\pythonw.exe" "<项目路径>\\always_online.py" |
常见问题 (Q&A)
Q: 运行报错“缺少 requests 模块”?
A: 请确保你运行了 pip install -r requirements.txt,并且 always_online.py 使用的 Python 环境和你安装依赖的环境是同一个。
Q: 怎么看它有没有在运行?
A: 打开任务管理器,找找有没有 pythonw.exe 进程。或者去 logs/ 目录下看看有没有当天的日志文件。
Q: 我想卸载怎么办?
A: 项目里贴心地准备了 uninstall.bat,双击运行即可一键清理任务和文件。清理完后,整个文件夹直接删掉就行。
结语
工具是造出来了,至于有没有由于网络过于通畅,导致寒假真的写了很多代码/论文…那就是另一个悲伤的故事了。
希望能帮到同样需要在假期远程“搬砖”的各位。为了科研(毕业),冲!
项目地址:https://github.com/psmarter/UESTC-NET
如果觉得好用,点个 Star 也是极好的。







