前言¶
DSH 的理念是「一切皆插件」,但社区里常见的插件多是接搜索、接数据库、接模型;真正和系统网络栈打交道的很少。Srun 深澜校园网既是上网入口,也是容易把人锁在外面的一道门:登录页地址、账号、断网后那张「挂着默认路由却走不通」的网卡,基本都靠手动处理。
下面介绍 dsh-campus-net,由 tianyadadi 维护,把 Srun 深澜认证放进 DSH 侧边栏:自动识别当前走哪条网、显示实时上下行速度、一键登录断开、统计流量,另外还处理登出后的黑洞网卡。它定位为联网工具,只面向 Srun 深澜一种认证系统。
这是什么¶
一句话定位:Srun 校园网(深澜)连接器,给 DSH 侧边栏挂一只常驻挂件。
- 维护者:tianyadadi
- 分类:联网工具
- 当前版本:0.3.1(见
package.json) - 许可证:MIT
- 运行平台:仅 Windows(依赖
netstat -e、netsh wlan、PowerShell)
它解决的问题是:在 Windows 上做 Srun 认证时,登录、断开、切号、流量查看要反复开浏览器;登出后网卡没断但路由抢了流量,会把模型请求卡到超时。插件把这些动作收进侧边栏,并提供不依赖 DSH 的自救脚本。
核心功能¶
| 功能 | 说明 |
|---|---|
| 自动识别网络 | 按默认路由判定当前走的是手机热点 / WiFi / 有线 / 校园网,显示对应名字和图标 |
| 实时测速 | 上行 + 下行速率,每 2 秒刷新(折叠态 3.5 秒) |
| 一键开关 | 连接 / 断开校园网 |
| 断开保护 | 断开后 30 秒自动重连,避免把自己锁在外面 |
| 开机自动连 | DSH 启动后自检,离线就登录 |
| 断网自救 | 插件目录里的 救急重连.cmd,双击重连,不依赖 DSH |
| 非校园网自动禁用 | 在热点下按钮置灰,不会误点 |
| 黑洞网卡检测 | 揪出「挂着默认路由却走不通」的网卡,一键抬跃点让它抢不过当前网络 |
| 流量统计 | 今日 / 本次登录 / 开机以来,上下行分开算 |
| 在线时长 | 显示本次已连多久,断开自动清零 |
| 多账号 | 宿舍 / 实验室多个号,面板下拉切换 |
| 非上网时段自动重试 | 学校返回「不在上网时段」时每 10 分钟试一次,连上就停 |
安装与启用¶
1、装插件¶
推荐从 npm 安装:
dsh plugin --profile desktop add dsh-campus-net
也可以从 GitHub 安装:
dsh plugin --profile desktop add github:tianyadadi/dsh-campus-net
本地开发、改了代码要热更时,用本地目录:
dsh plugin --profile desktop add link:<本目录绝对路径>
2、重启 DSH¶
bundle 层要重启才组装。
3、验证是否装好¶
重启后看两点:侧边栏左下角(账号头像上方)出现挂件;命令行自检通过:
python core/campus_net.py doctor
没出现的话,先看 DSH 日志里有没有 dsh-campus-net 的加载错误。
4、填账号¶
把 core/campus-net.example.json 复制成 core/campus-net.json,填上自己的:
{
"portal": "2.2.2.2",
"username": "你的学号",
"password": "你的密码",
"autoConnect": true,
"autoReconnectSeconds": 30
}
这个文件在 .gitignore 里,不会被提交。
安装前需要先确认三样东西:认证地址(登录页 IP,通常是 2.2.2.2 这类内网地址)、账号、密码。确认方法是连上校园 WiFi、随便打开一个网页,看跳转到的登录页地址栏里的 IP。另外要先确认学校用的是 Srun 深澜:登录页地址里出现 portalLogout.do、wlanuserip、wlanacname 这些特征就是。Dr.COM、锐捷、需要验证码或短信二次验证的门户不适用。
典型用法¶
命令行部分独立于侧边栏,可以直接调用:
python core/campus_net.py status # 查状态
python core/campus_net.py login # 登录
python core/campus_net.py logout # 断开(默认 30 秒后重连)
python core/campus_net.py network # 当前网络识别
python core/campus_net.py speed # 测速
python core/campus_net.py doctor # 自检
python core/campus_net.py dead-path # 查有没有黑洞网卡
python core/campus_net.py fix-path # 修(抬跃点;DNS 是静态时才重置,会弹 UAC)
python core/campus_net.py restore-path # 还原跃点
python core/campus_net.py traffic # 流量(今日 / 本次 / 开机以来)
python core/campus_net.py accounts # 列出所有账号
python core/campus_net.py switch-account 实验室 # 切号(也可写序号)
多账号有两种配置写法,老配置不用改:
{ "username": "学号", "password": "密码" }
{ "accounts": [
{ "name": "宿舍", "username": "111", "password": "p1" },
{ "name": "实验室", "username": "222", "password": "p2" }
],
"current": 0 }
多于一个账号时面板会显示下拉框,选了立刻生效;切号会把选中账号镜像回 username/password,所以 救急重连.cmd 这类只认老字段的调用方照样能用。在线时切号不会踢掉当前会话,只影响下次登录。
关于黑洞网卡¶
校园网登出(或未认证)后,那张网卡还是 up 的、默认路由也还在。WiFi 一抖,系统就把流量切给它,SYN 发出去没人应答,客户端默认连接超时 10 秒后放弃。表现为模型突然报 transport failed / Request timed out.,三家服务商同时挂。
插件的判定方式是绑定这张网卡的源 IP 去连 223.5.5.5:443,1.5 秒连不上才算黑洞——因为校园网网关 ping 得通但没认证照样出不去,只看 ping 不准。挂件上折叠态小圆点变黄,展开后有「修一下」和「还原跃点」两个按钮:修一下把该网卡跃点抬到 9999(会弹一次 UAC,所以需要管理员权限);还原跃点把跃点交回系统自动。抬跃点而不是禁用网卡,是因为禁用之后回校园网还要去设备管理器手动开。DNS 只有静态配置时才会顺手重置,DHCP 下发的 DNS 插件会跳过并不糊弄。
性能与限制¶
各接口耗时(README 给出的实测):
| 接口 | 耗时 | 做法 |
|---|---|---|
status |
~200ms | 网络信息 30 秒磁盘缓存 + 不在校园网时短路 + 流量 30 秒节流 |
speed |
~930ms | netstat -e 两次采样(窗口 700ms) |
network |
~200ms(有缓存) | 单次 PowerShell 拿路由 + netsh 拿 SSID |
dead-path |
~150ms(有缓存)/ 首次 ~1.7s | 黑洞探测结果缓存 60 秒 |
traffic |
~65ms(过期时)/ 0ms(缓存) | netstat -e 单次读取 |
已知限制:只支持 Srun 深澜;只在 Windows 测试过;密码明文存储在本地 campus-net.json,需确保机器只有一人使用;不支持需要验证码、短信二次验证的门户。流量统计读的是 netstat -e 的全机聚合累计值,所有网卡流量合在一起,不区分走的是哪张卡。
适用场景与注意¶
适合在校使用 Srun 深澜认证、希望在 DSH 里顺手完成登录和看流量的用户,尤其是需要长期挂 DSH、又不希望认证状态影响模型请求的场景。不适合使用 Dr.COM、锐捷或其他认证系统的学校,也不适用于需要验证码或短信二次验证的门户。
需要留意的几点:插件以当前 DSH 进程的权限运行,安装前应先打开源码检查,并确认许可证(MIT)。由于 fix-path 会弹 UAC 提升权限,建议只在明确出现黑洞网卡时执行。配置里的密码是明文,注意不要让他人接触本机。项目托管在 GitHub,社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,不是官方应用商店。
目录与仓库¶
- 插件目录页:https://www.skillhub.cn/plugins/tianyadadi/dsh-campus-net
- GitHub 仓库:https://github.com/tianyadadi/dsh-campus-net