dsh-campus-net:DSH 側邊欄裏的 Srun 校園網連接器

前言

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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜