河师大校园网登录/登出工具,基于 Bash + libsecret 实现。
# Arch / Manjaro
sudo pacman -S curl libsecret测试基于 curl 7.80+。脚本通过 --config - 用 data-urlencode "name@filename" 把密码文件传给 curl——这是 curl 7.18+ 才支持的语法,所有现代发行版默认均满足。
cd htu-script
# 1. 保存账号(按提示输入学号、密码、运营商)
./htu-script net set
# 2. 登录 / 登出
./htu-script # 登录
./htu-script logout # 登出| 命令 | 说明 |
|---|---|
./htu-script net set |
设置/修改账号 |
./htu-script |
登录校园网 |
./htu-script logout |
登出校园网 |
./htu-script net delete |
删除保存的账号(任一 key 失败会打印警告,需到密钥环 GUI 手动清理) |
| 选项 | 说明 |
|---|---|
--delay N |
在执行前等待 N 秒(开机自启场景,给校园网/密钥环准备时间) |
也可通过环境变量 HTU_STARTUP_DELAY=N 设置延时,效果等价。
开机后校园网可能尚未就绪,直接运行会失败。用 --delay 解决:
- 保存账号:
./htu-script net set - 设置 WiFi:在 KDE 中连接校园网 WiFi
- 添加自启:
- 打开 设置 → 系统 → 自动启动
- 点击 添加 → 登录脚本,在弹窗里填入脚本路径,例如
/path/to/htu-script - 在自动启动列表里点开这条目的 属性,把 应用程序 → 参数 一栏填为
--delay 8
- 登录后 8 秒自动登录校园网
注意:自动启动依赖 KDE 在登录时解锁密钥环(默认行为)。如果你的钱包配置被改过(比如禁用了自动解锁),
--delay之后lookup password仍会失败,需要保持默认 wallet 配置。
| 状态 | 环境 |
|---|---|
| ✅ 实测 | Arch Linux + KDE Plasma 6 |
| 其他 Linux + 支持 Secret Service 的桌面环境 |
不支持 macOS、Windows。如需多平台,请使用上游 htu-toolbox 二进制。
net set 时的输入行为:
- 学号:每字符屏幕回显为
*;保存成功后只在终端打印脱敏形式(首 3 末 3,中间***,例如123***456;过短学号整体打码为***)。- 字符集限制:仅接受 ASCII 字母/数字/点/下划线/连字符,长度 ≤32。换行、引号、
;&\等都会被拒绝并报错——这是挡掉"密钥环被污染后通过 curl config 文件注入第二条url指令把凭证发到外网"的关键。
- 字符集限制:仅接受 ASCII 字母/数字/点/下划线/连字符,长度 ≤32。换行、引号、
- 密码:完全静默,不回显任何字符;为防误输必须输入两次确认,两次完全一致才接受。
- 长度 ≤128。
- 临时文件:密码用
mktemp创建 mode 600 文件传 curl,用完即shred -u(无 shred 则rm);脚本被信号中断时也会清理。 - core dump:
ulimit -c 0关闭,避免崩溃时密码被写入磁盘。
- 校园网登录门户(
http://192.168.1.1)和登出接口(http://10.101.2.205/loginOut)都是 HTTP 而非 HTTPS。同网段被动嗅探理论上可见明文凭证——客户端无法解决,需服务端升级。 - 解析 portal 重定向 URL 后,脚本做多层防御:
- URL 字符白名单:必须形如
https?://<IPv4>[:port]/quickauth.do,每段 0–255; - 私网断言:主机必须落在 RFC1918 私网段(10/8、172.16/12、192.168/16),且拒绝 userinfo(如
http://10.0.0.1@evil.com/auth会被直接 die); - do_curl 入口再校验:学号/运营商/URL 在写入 curl config 之前再校验一次,防止密钥环被污染(D-Bus 写访问、备份被篡改)时 curl config 文件被注入额外的
url指令,把凭证发到任意外网 host。
- URL 字符白名单:必须形如
- 凭证存放在系统密钥环(Secret Service / KWallet / GNOME Keyring),通过 D-Bus 访问。
- 任何能访问你用户 D-Bus session bus 的进程都能调
secret-tool lookup拿到密码——这是桌面会话级信任边界。 - 离开电脑请锁屏(KDE 默认快捷键
Meta+L)。
本脚本(包括本 README)由 AI 辅助生成。
- 上游:https://github.com/arkuna23/htu-toolbox(MIT License)
- 本项目:MIT License