Repository navigation
Releases
v0.3.1
v0.3.1 — 开机自动连接修复
小版本,只修一个问题:开机后插件不自己连,得去浏览器手动点一次。
症状
- 一开机就打开 DSH,挂件显示「未连接」,但下载/上传都有速度
- 必须自己去浏览器打开任意网页,才连得上
- 之后再点「连接」是好的,只有开机那一次不行
根因
kick() 只做一件事:DSH 启动 8 秒后跑一次 ensure,失败就结束。
而 retry.js 的自动重试只认「不允许上网时间段」这类错误,
「拿不到门户参数 / 连不上门户」不在重试范围内 → 一次失败 = 永久放弃。
开机那会儿网卡刚拿到 IP、门户还没就绪,探测 http://2.2.2.2/ 12 秒超时是常态,
所以这个失败几乎是必然的。
现在
启动自检改成退避重试:
第 1 次 8s → 第 2 次 +15s → 第 3 次 +25s → 第 4 次 +45s
第 5 次 +60s → 第 6 次 +90s → 第 7 次 +120s → 第 8 次 +180s
- 约 6 分钟内最多试 8 次,连上立刻停
- 每次写日志:
启动自检 #3:已登录/启动自检 #3:失败:拿不到门户参数… - 8 次都失败才放弃,不影响手动点「连接」
- 开机时确实不在校园网(比如连了热点)也不会反复弹,试完就安静停下
另一处说明
未认证时挂件也会显示下载/上传速度 —— 那是网卡实际收发的流量,
局域网和门户本身也有数据。面板上补了一行说明,别把它当成「已联网」。
升级
插件是 link 安装的(本地源码),重启 DSH 即生效,不用重装。
v0.3.0
v0.3.0 — 流量统计 / 在线时长 / 多账号 / 非上网时段自动重试
四个功能,都是为了「少动手」:以前得自己盯、自己点的事,现在插件替你盯着。
1. 流量统计
- 面板显示 今日 / 本次登录 / 开机以来,上下行分开
- 数据源是
netstat -e的全机聚合累计值,靠前后采样做差 - 30 秒节流,面板每 3 秒轮询不会真的每次都读
- 计数变小(机器重启过)时把当前值当增量,不会算出负数或天文数字
- 跨天自动归档,只留最近 7 天
- 第一次运行只建立基线,今日从 0 起 —— 不会把「开机以来」误算成「今天」
2. 在线时长
面板显示「已连 2 小时 13 分」。起点在登录成功那一刻记,断开自动清零。
3. 多账号
core/campus-net.json 支持 accounts 数组 + current:
{ "accounts": [
{ "name": "宿舍", "username": "111", "password": "p1" },
{ "name": "实验室", "username": "222", "password": "p2" }
], "current": 0 }- 老配置零迁移:没有
accounts时,username/password自动当成唯一账号(名字叫「默认」) - 多于一个号时面板变成下拉框,选了立刻生效
- 切号会把选中账号镜像回
username/password,救急重连.cmd等老调用方不用改 - 在线时切号不会踢掉当前会话,只影响下次登录
4. 非上网时段自动重试
学校在非上网时段返回「不允许上网时间段,请在上网时段认证」。
以前遇到就停在那儿。现在:
- 识别到这类错误 → 每 10 分钟自动试一次,最多 60 次(≈10 小时)
- 连上就停;手动登录成功也立刻停
- 面板显示「⏳ 现在是非上网时段,8 分钟后自动重试(第 3/60 次)」
重试逻辑单独放在 retry.js,就是为了能单测 —— 测试里把间隔调成 50ms 跑,
不用真等 10 分钟。
新接口 / 新命令
| 类型 | 内容 |
|---|---|
| 接口 | POST /api/campus-net/switch-account(body: {index} 或 {name}) |
| 接口 | status 多了 traffic / accounts / account / online_seconds / auto_retry |
| 命令 | traffic、accounts、switch-account <序号|名字> |
升级
dsh plugin --profile desktop add link:<本目录绝对路径>然后重启 DSH(服务端路由和挂件都变了)。
v0.2.0
v0.2.0 — 黑洞网卡检测
这一版只加一件事:揪出「挂着默认路由却走不通」的网卡,并在挂件上修掉它。
为什么加
2026-11-03 那晚,模型一直报 transport failed / Request timed out.,
三家服务商(阿里云、暴喵、官方)同时挂,每次刚好卡 10 秒,重试 5 次全灭。
查下来跟服务商一点关系都没有:
- 校园网登出后,那张网卡还是 up 的、默认路由也还在
- WiFi 一抖,系统把流量切过去 → SYN 没人应答
- Node 的 undici 默认连接超时正好是 10 秒 → 客户端自己放弃
- 证据:同一时刻直接打端点 0.6~1.8 秒正常;绑源 IP 实测那张网卡 21 秒超时;
WLAN 事件日志显示断线时段与失败时段完全重合
新增
- 黑洞探测 —— 绑定每张候选网卡的源 IP 去连
223.5.5.5:443,1.5 秒连不上即判定。
只看 ping 不够:校园网网关 0ms 能通,但没认证照样出不去。结果缓存 60 秒。 - 挂件提示 —— 折叠态圆点变黄;展开后有黄色说明 + 两个按钮:
- 修一下:跃点抬到 9999(弹一次 UAC);DNS 只有在该网卡是静态配置时才重置,
若是 DHCP 下发则跳过并明说 —— 重置只会把同一批死 DNS 再拿回来(实测踩过) - 还原跃点:跃点交回系统自动
- 修一下:跃点抬到 9999(弹一次 UAC);DNS 只有在该网卡是静态配置时才重置,
- 新接口 ——
GET /api/campus-net/dead-path、POST /api/campus-net/fix-path、
POST /api/campus-net/restore-path - 新命令 ——
python core/campus_net.py dead-path | fix-path | restore-path
为什么是抬跃点而不是禁用网卡
禁用之后要回校园网还得去设备管理器手动开,太重。
抬跃点只是让它永远抢不过当前网络 —— 插上网线照样能用,只是优先级靠后。
兼容性
status 的返回多了个 dead_path 字段,老前端忽略它即可,不影响任何已有行为。
安装 / 升级
dsh plugin --profile desktop add link:<本目录绝对路径>升级后重启 DSH(新增了服务端路由,bundle 层要重启才组装)。
v0.1.0
v0.1.0 — 首个可用版本
校园网(Srun 深澜)连接器,给 DeepSeek Harness 侧边栏加一只常驻挂件。
功能
- 实时测速 — 上传 / 下载速率,折叠态 3.5 秒刷新,展开态 2 秒
- 一键开关 — 连接 / 断开校园网
- 自动识别网络 — 按默认路由判定:手机热点 / WiFi / 有线 / 校园网,显示对应名字和图标
- 断开保护 — 断开后 30 秒自动重连,避免把自己锁在外面
- 开机自动连 — DSH 启动 8 秒后自检,离线就登录
- 位置可拖动 — 按住挂件拖到合适位置,松手自动记住;面板里有「复位」
- 断网自救 — 双击
救急重连.cmd,不依赖 DSH 也能重连
支持的系统
Srun 深澜 认证(portalLogout.do / wlanuserip / wlanacname 特征)。
不适用:Dr.COM、锐捷、需要验证码或短信二次验证的门户。
安装
dsh plugin --profile desktop add link:<本目录绝对路径>然后:
- 把
core/campus-net.example.json复制成core/campus-net.json - 填入你的认证地址、账号、密码
- 重启 DSH
- 跑
python core/campus_net.py doctor确认四项全绿
文档
已知限制
- 只在 Windows 测试过(依赖
netstat -e、netsh wlan、PowerShell) - 密码明文存在本地
campus-net.json,该文件已在.gitignore里