内容提要
作者因校园网限制5台设备且需CAS认证,使用OpenWrt路由器无线连接校园WiFi并建立局域网。因Python方案失败,改用Shell脚本,通过grep提取一次性execution参数,配合curl提交账号密码实现自动登录,并用CronTab定时运行,解决设备掉线问题。
延伸解读
为何选择 Shell 而非 Python
作者最初尝试用 Python 编写登录脚本,但路由器闪存仅 32MB,安装解释器后空间不足;即使将 Python 安装到外接设备,运行正则匹配时也会卡顿近 10 秒。最终改用 Shell 脚本,利用 grep 和 ${} 处理字符串,轻量且高效。这提醒我们,在资源受限的嵌入式设备上,Shell 往往是更务实的选择。
CAS 认证的额外参数:execution
南科大校园网登录并非简单的账号密码提交,还需要一个一次性的 execution 参数。该参数由服务器在访问登录页时生成,并嵌入 HTML 中。脚本通过 curl 获取页面,再用 grep 提取该值,最后随表单提交。这种机制增加了自动登录的复杂度,也是许多类似脚本需要解决的关键点。
CronTab 配置的常见陷阱
作者在配置定时任务时遇到多个问题:文件末尾缺少换行符会导致最后一条任务不执行;脚本需要足够权限,建议设为 777;脚本首行应指定解释器,并 source 环境配置文件。这些细节虽小,却直接影响自动化任务的可靠性,值得在部署时逐一检查。
设备限制与信号切换的意外影响
校园网限制单账号 5 台设备,而作者的路由器因手机在 2.4GHz 和 5GHz 频段间切换,被 CAS 判定为两台设备,导致挤掉线。这揭示了无线网络环境中,信号波动可能触发认证系统的误判。自动登录脚本虽能缓解掉线问题,但根本解决仍需优化网络配置或与校方沟通。
Q&A
为什么需要自动登录南科大校园网的脚本?
因为校园网限制一个账号只能同时连接5台设备,且所有设备都需要通过CAS认证。当设备在不同频段间切换时,CAS会将其判定为不同设备,导致路由器被挤掉线。自动登录脚本可以定时重新认证,解决掉线问题。
这个Shell脚本是如何实现自动登录的?
脚本先用curl访问CAS登录页面,将返回的HTML保存到文件,然后用grep提取一次性execution参数,再通过curl提交用户名、密码和execution参数完成登录。
在OpenWrt路由器上运行Python脚本遇到了什么问题?
路由器闪存只有32MB,安装Python解释器时空间不足;将Python安装到外接设备后,运行登录脚本时因正则匹配大字符串导致路由器卡顿近10秒,最终弃用Python方案。
配置CronTab定时任务时需要注意哪些坑?
CronTab文件末尾必须有换行符,否则最后一条任务不执行;脚本需要足够的权限(可设为777);脚本第一行要加#!/usr/bin/sh,第二行最好source profile文件以获取正确环境。
如何解决路由器无法解析校园内网地址的问题?
在路由器DNS设置中取消“重绑定保护”,这样路由器就能正常解析校园内网DNS,访问校内服务。
为什么路由器会被挤掉线?
因为一个账号限制5台设备,当手机在2.4GHz和5GHz频段间切换时,CAS会将其识别为两个不同设备,导致设备总数超限,路由器被挤掉线。