北京理工大学校园网官方登录脚本太烂了。于是我把它逆向了。
不是那种“有点粗糙”的烂,报错不说人话、想挂后台还得先和它搏斗一轮的烂。所以这里放一个更适合人类使用的北理工 SRun4K 登录脚本:单文件、零第三方依赖,拿学号和密码登录。
该脚本能完全替代 http://10.0.0.55/download/download_client.html 所提供的登录脚本,已测试 Linux / Windows 环境。
理论上支持所有使用 深澜软件 的网络登录。
- 登录校园网
- 检查 portal 是否可达
- 登出
- keepalive 掉线重登
- 自动解析
ip和acid - 自动尝试 BIT 常见 portal 入口
- 支持配置文件、环境变量、命令行参数
- Debug 输出会隐藏密码
python3 srun.py login -u 学号 -p 密码常用命令:
python3 srun.py login -u 学号 -p 密码
python3 srun.py check
python3 srun.py logout -u 学号
python3 srun.py keepalive -u 学号 -p 密码 --interval 300
python3 srun.py --helpcheck 会查询 /cgi-bin/rad_user_info,输出当前设备是否已经在线:
online: 学号 @ 在线IP @ 套餐 @ 剩余流量 295.33 GiB @ 剩余时长 不限时
如果返回 offline: ...,说明当前设备还没通过认证。
生成默认配置:
python3 srun.py init-config默认路径:
~/.config/srun-login/config.json
配置模板会包含:
{
"protocol": "http",
"host": "10.0.0.55",
"username": "",
"password": "",
"acid": "auto",
"portal_path": "",
"ip": "",
"n": "200",
"type": "1",
"enc_ver": "srun_bx1",
"test_url": "http://www.baidu.com/"
}密码默认留空。要不要写进配置文件由你决定;不想落盘就每次用 -p 传。
优先级:
命令行参数 > 环境变量 > 配置文件 > 默认值
支持的环境变量:
export SRUN_HOST=10.0.0.55
export SRUN_USERNAME=你的学号
export SRUN_PASSWORD=你的密码
export SRUN_ACID=auto
export SRUN_PORTAL_PATH=
export SRUN_IP=然后:
python3 srun.py login默认会从 portal 页面自动解析 ip 和 acid。脚本支持官方客户端那套 /index_1.html 解析方式,也支持页面里的 acid: "1"。如果页面没写 acid,脚本会按 BIT 默认值 1 来,不用手动传。
如果登录成功但不能上网,或者你的接入点确实不是 1,再手动指定:
python3 srun.py login -u 学号 -p 密码 --acid 1如果出现“登录成功但不能上网”,优先怀疑 acid 不对。
脚本会自动尝试这些入口:
/srun_portal_pc.php
/srun_portal_pc?ac_id=1&theme=bit
/index.html
/
如果你的校园网入口比较有个性,也可以手动指定:
python3 srun.py check --host 10.0.0.55 --portal-path '/srun_portal_pc?ac_id=1&theme=bit'
python3 srun.py login -u 学号 -p 密码 --host 10.0.0.55 --portal-path '/srun_portal_pc?ac_id=1&theme=bit'后台保活:
nohup python3 srun.py keepalive -u 学号 -p 密码 --host 10.0.0.55 --interval 300 > srun.log 2>&1 &它会定期检查网络,不通就重新登录。默认测试 URL 是:
http://www.baidu.com/
也可以换:
python3 srun.py keepalive -u 学号 -p 密码 --test-url http://connectivitycheck.gstatic.com/generate_204Windows 开机自启可参考 https://www.cnblogs.com/RainFate/p/14214274.html
新建:
~/.config/systemd/user/srun-login.service
内容:
[Unit]
Description=SRun campus network keepalive
After=network-online.target
[Service]
Type=simple
WorkingDirectory=%h/path/to/project
ExecStart=python3 srun.py keepalive --interval 300
Restart=always
RestartSec=10
Environment=SRUN_HOST=10.0.0.55
Environment=SRUN_USERNAME=你的学号
Environment=SRUN_PASSWORD=你的密码
[Install]
WantedBy=default.target启用:
systemctl --user daemon-reload
systemctl --user enable --now srun-login.service看日志:
journalctl --user -u srun-login.service -f脚本实现的是常见 SRun4K 流程:
- 打开 portal 页面,解析
ip和acid - 请求
/cgi-bin/get_challenge获取 token - 生成
{MD5}密码字段 - 生成
{SRBX1}的info - 计算
chksum - 请求
/cgi-bin/srun_portal?action=login
用户名就是你输入的完整用户名,通常是学号。
python3 srun.py login -u 学号 -p 密码 --debugDebug 会打印更多响应信息,但密码会显示为:
<redacted>
python3 -m unittest tests.test_srun -v这个脚本只是把你自己的账号密码自动提交给校园网认证系统,不提供绕过认证、破解账号、规避计费之类的功能。它的目标很朴素:让 Linux 下登录校园网别再像拆盲盒。