Skip to content

Repository files navigation

XXGCXY-CampusNet-AutoLogin

新乡工程学院校园网自动登录助手 —— 基于 Tauri 2.x 的 Windows / Linux 桌面应用,自动检测 / 重连校园网 WiFi 并完成 Portal 认证登录。

校园网认证机制详解讲解(感兴趣的话推荐查看):AUTH_MECHANISM.md

脚本前身:https://github.com/Thatgfsj/XXGC-CampusNet-AutoLogin

开发者文档(API、架构、问题修复史):JSDOC.md

技术栈

PowerShell Rust Tauri JavaScript HTML/CSS Node.js Batch Shell Git LFS

下载

GitHub Releases: 最新版本

版本 说明 内置 PS7 需要系统 PS 5.1+
Windows NSIS / MSI Windows 安装器,体积小
Linux .deb / .rpm / tar.gz 👻 👻

v1.9.0+ 起不再内置 PowerShell 7 移植版。Windows 10/11 自带 PowerShell 5.1,已支持 DPAPI 加密。

功能

  • ⚡ Rust 进程内原生直发认证 (Sub-100ms Instant Login, v2.0.9+) — 桌面端核心认证移入 Rust 进程内,使用原生 Windows CryptUnprotectData API 原位解密与 reqwest 异步直发,彻底根除系统 PowerShell 5.1 冷启动与多轮 WMI 扫描的 9.5 秒固有等待,实现 80 毫秒以内闪电秒登;保留外部脚本无缝降级兜底
  • 🚀 外部脚本冷启动与网卡探查深度瘦身 (v2.0.9+) — 剔除 xywdl.bat 启动时重复拉起 PowerShell 查询版本的 1.75 秒冗余空转;为 xywdl.ps1 引入网卡对象单例缓存,消除单次认证重复扫描 3 轮 WMI 的 1.5 秒开销
  • 🔥 保持移动热点开启守护 (v2.0.8+) — 突破校园网单账号/单设备限制,针对学生开电脑热点供手机/平板共享上网的痛点,采用 Windows 原生 WinRT 实时守护热点,防无设备连接超时休眠自动关闭,断网自愈后联动唤醒
  • 🎨 深色极客毛玻璃 UI (v2.0.8+) — 全新 Dark Acrylic 磨砂亚克力微光画布,140px 发光动态网络健康雷达仪表环,学生数字身份名片(支持移动/联通/电信品牌专属色彩徽章与快捷抽屉),可折叠等宽终端动态日志
  • 🚀 兼容字母学号与补卡后缀 (v2.0.8+) — 解除纯数字限制,全面支持字母与数字组合账号(如补卡后缀 ls / lls 及前缀字母工号),输入误带 @ 自动智能剥离
  • 🤫 开机静默自启防打扰 (v2.0.8+) — 注册表 --autostart 标志联动原生窗口初始隐藏,重启电脑开机后彻底静默驻留系统托盘,绝无弹窗闪烁打扰
  • 可视化登录配置 (v1.9.0+) — 首次启动弹窗引导,运营商/学号/密码/Portal URL 表单填写,小白也能自助配置;"设置"页(原"网络配置"页)有"更改账号信息"按钮可随时再改
  • Portal URL 智能清洗与防双问号 (v2.0.5+) — 粘贴重定向长链接自动提纯 BaseURL 并抽取网络参数;四重防御性净化杜绝双问号导致的学号密码丢失与“设备不在正常状态”报错
  • JSON 响应精准判定与真实提示透传 (v2.0.5+) — 优先采用 JSON 解析器统一处理字符/数字 code,直接展示 AC 服务端真实中文提示,彻底告别“未知错误 99”
  • 纯净日志排版 (v2.0.5+) — 消除前端多余空白时间戳行,输出紧凑清晰
  • 请求发送多层级保底 (v2.0.0+) — 登录请求发送失败自动降级: Windows 依次尝试 PowerShell → C# → Python;Linux 依次尝试 curl → Python。任一层成功即可完成认证
  • 自动检测网络状态 — 实时监测 WiFi 连接和互联网访问
  • 自动重连 WiFi — 断网时自动连接预设的 WiFi
  • 自动登录校园网 — 连接后自动执行认证脚本
  • 系统托盘运行 — 最小化到托盘,后台静默运行
  • 开机自启 — 可选的开机自动启动
  • 凭证加密存储 — 密码通过 Windows DPAPI 加密, 不存明文
  • 中文界面 — 安装包和 UI 均支持简体中文

安装

Windows(推荐)

  1. 下载最新的 xxgcxy-wifi_x.x.x_x64-setup.exe
  2. 双击运行,按提示完成安装
  3. 首次运行需配置 WiFi 和账号信息

系统要求:

自 v1.9.0 起不再内置 PowerShell 7 移植版。Windows 自带的 PowerShell 5.1+ 完整支持 DPAPI ProtectedData(.NET Framework 4.x)。v2.0.0 起登录请求发送带多层级降级(PowerShell → C# → Python),任一层可用即可认证,脚本已做 Win 7/8 兼容(WMI fallback 处理 Get-NetAdapter 不存在的问题)。

Linux

chmod +x xywdl.sh
./xywdl.sh     # 需要 curl 或 python3 (登录请求发送会自动选择可用的一层)

项目结构

├── index.html              # 前端界面 (HTML/CSS/JS)
├── package.json            # Node.js 依赖
├── xywdl.ps1               # 校园网认证脚本 (PowerShell)
├── xywdl.bat               # Windows 启动器(找系统 pwsh / powershell)
├── xywdl.sh                # Linux 启动脚本
├── src/sender/             # 请求发送保底层 (v2.0.0+)
│   ├── sender.cs           # C# 源码 (预编译为 xywdl_sender.exe)
│   ├── sender.py           # Python 源码 (纯标准库, 跨平台)
│   └── xywdl_sender.exe    # 预编译 C# 发送器 (~5KB, .NET Framework 4.x)
├── AUTH_MECHANISM.md       # 校园网认证机制详解
├── JSDOC.md                # 项目技术文档(含 API、架构、问题修复史)
├── src-tauri/              # Tauri 后端 (Rust)
│   ├── Cargo.toml
│   ├── tauri.conf.json
│   └── src/
│       ├── lib.rs          # 核心业务逻辑
│       └── main.rs         # 程序入口
└── .github/                # CI/CD 配置

开发

环境要求

  • Rust 1.70+
  • Node.js 18+
  • Windows 10/11 或 Linux
  • .NET Framework 4.x(仅 Windows 上构建 C# sender 用,本机 Windows 自带)

构建

git clone https://github.com/Thatgfsj/XXGCXY-CampusNet-AutoLogin.git
cd XXGCXY-CampusNet-AutoLogin
git lfs pull
npm ci
npx @tauri-apps/cli build

分支说明

分支 用途
win-portable Windows 便携版(含内置 PS7)
win-system-ps7 Windows 版(需系统 PS7)
linux-sh Linux 纯脚本版

更新日志

  • v2.2.6认证方法透明化、登录后状态即时刷新与检测-认证链路提速
    1. 日志明确实际认证方法:登录开始日志改为中性表述,成功/失败日志注明实际路径("Rust原生直发" / "外部脚本·PowerShell"),前端同步移除"原生直发优先"硬编码文案,用户一眼可辨本次认证由谁完成;
    2. 登录后状态即时刷新:修复"保存并立即登录"与手动"立即登录"完成后主页仍显示"未连接"直到下一检测周期的问题——这些入口现在完成认证后立即广播 ServiceStatus(成功 Connected / 业务拒绝 Backoff / 其余 NeedsLogin);
    3. 检测-认证链路提速:① 双探针并发仲裁(任一 204 即在线、任一 3xx 即需登录),离线判定最坏耗时 12s→6.5s;② 探测即取参——离线探测拿到的 302 Location 顺路解析为认证参数直接复用,正常离线→发认证路径省去最长 7.5s 的独立嗅探;③ 登录成功后下一轮探测缩短为 3 秒,尽快 204 复验确认 Connected;
    4. 主页版本号动态化:版本徽章改为运行时读取应用真实版本(getVersion(),以 tauri.conf.json 为唯一事实源),以后升级不再出现界面版本与安装包不一致。
  • v2.2.5中文系统网卡识别修复(GBK 解码)、传输层防限流冷却与后端日志落盘
    1. netsh 输出 GBK 解码修复(原生直发瘫痪根因):中文 Windows 下 netsh 输出为 GBK 编码,原 String::from_utf8_lossy 将"物理地址"/"IPv4 地址"等标签解码为乱码,导致 MAC/IP 永远解析失败、Rust 原生直发每次被拒而降级 PowerShell 脚本。新增 decode_console_output(合法 UTF-8 直通、否则按 GBK 解码),覆盖 get_wlan_network_info/get_connected_wifi/scan_wifi 全部解析点,附带 GBK 编解码单元测试;
    2. 传输层失败 60 秒冷却(防认证网关限流):实机日志显示网关短暂限流时原逻辑 4 分钟连发 5 轮登录、每轮三层各一枪,加剧对方超时/RST。现非业务拒绝的登录失败(超时/连接重置)进入 60 秒冷却,期间保持 NeedsLogin 状态但不发包;登录成功或手动"立即登录"即时清除冷却;
    3. 三层发送链同因短路xywdl.ps1 中 L1 命中网络级故障(超时/无法连接/连接被重置)时跳过 L2 C# 与 L3 Python 的无效重试(同一 URL 三发毫无意义),直接走既有"三层全部失败"出口;服务器有 HTTP 响应(302/4xx/5xx)不短路,保留降级价值。新增 H 组 4 项用例,套件 38/38 全绿;
    4. 后端日志生产环境落盘:移除 tauri-plugin-log 的 debug-only 门控(此前 release 构建完全无后端日志、故障无法回溯),新增文件目标与 xywdl 脚本日志同目录(%APPDATA%\xxgcxy-wifi\logs\backend*.log),1MB 轮转保留历史;
    5. 探针超时放宽:联网探测超时由 2 秒放宽至 3 秒,降低高密度校园网拥塞下的"假离线"误判率(本轮风暴的触发起点)。
  • v2.2.4保活状态机与事件驱动闭环加固、热点防并发饿死与全链路真实端到端测试
    1. 前端状态渲染与事件驱动修复:重构前端状态机解析逻辑,精准解构 Rust Serde 标签枚举格式({"type":"Connected"}{"type":"Backoff","remaining_secs":...}),彻底修复界面由于反序列化不匹配卡死在“WiFi 网络未就绪”的严重缺陷;
    2. 热点守护降频与 tokio 线程池防饥饿:将前端 1s 倒计时与热点守护解耦,热点检查改为独立 30 秒周期并增设前端 isCheckingHotspot 防重入锁;Rust 后端通过 spawn_blocking 封装 netsh 调用并加入 HOTSPOT_LOCK.try_lock() 排他锁与 12 秒超时,彻底杜绝 PowerShell 进程堆积饿死保活状态机;
    3. 302 嗅探安全白名单与防污染机制:实现 is_valid_portal_base_url 白名单校验(严格匹配校园网专用内网网段与域名端口),阻断重定向广告页污染用户配置;新增 save_login_profile_json,嗅探参数安全落盘且严禁污染或覆盖用户密码;
    4. 并发互斥调度与防抖收口:在 AppState 引入全局异步互斥锁 is_logging_in,将后台保活、手动登录、“保存并立即登录”与托盘菜单全量串行化互斥,杜绝并发双发认证;对手动登录增加 3 秒冷却防抖;
    5. 子进程防挂起与测试套件工业级重构:外部脚本启动迁移为异步 tokio::process::Command,配置 kill_on_drop(true) 与 15 秒超时守护;清理虚假测试脚本;tests/run_ps1_tests.ps1 注入 UTF-8 输出编码配置,确保在默认中文 Windows (GBK 控制台) 下 33/33 测试普适通过;tests/test_sh_judge.sh 重构为真实驱动 xywdl.shmock_portal.py 的端到端测试(19项测试全绿),并修复 xywdl.shset -e 模式下正则兜底提前异常退出的隐患。
  • v2.2.3Hero Gauge 绝对几何中心重构与全视口高 DPI 自适应加固
    1. SVG <g> 分组与绝对同心圆中心锚定:动态圆环由 <g class="radar-meter-group"> 独立包裹,显式声明 transform-origin: 70px 70px; transform-box: view-box;,使背景轨道圆环静止,动态扫描环在底层严格以 (70, 70) 为绝对原点进行 100% 纯正同心旋转;
    2. 中心内容绝对坐标层解耦(消除 6px 视觉重心偏移):重构 .radar-center-content 为绝对定位遮罩,.status-icon 通过 top: 50%; left: 50%; transform: translate(-50%, -50%) 绝对锚定在 (70px, 70px) 几何中心,脉冲呼吸点脱离 Flex 竖向排列并以 CSS 变量 --dot-color 驱动,彻底消除了下方小点对图标向上的挤压偏移;
    3. 高 DPI 与弹性布局防御:为 .toggle-switch 添加 flex-shrink: 0 杜绝 125%/150% 缩放下开关被挤压形变;为 .network-pill 增加 min-width: 0 防止超长 SSID 挤爆 CSS Grid 单元格;为 filter 光晕增加平滑过渡与 GPU 图层隔离。
  • v2.2.2实机全链路真实环境闭环验证与多发送器真实互通认证
    1. 实机真实网络联调与认证闭环:基于用户实机真实无线网卡(Realtek RTL8852BE WiFi 6,已连 XinKe_Hist_Stu,IP 10.4.124.192)与实际校园网网关(172.18.252.12:6060)实测,真实 DPAPI 解密与网络交互全链路 100% 连通;
    2. 三层发送器(PowerShell / C# / Python)实战全量通过:在实际机器上直接驱动 PowerShell (548ms)、C# 原生独立发送器 (1158ms)、Python 3 标准库发送器 (273ms) 真实请求校园网认证接口,三端均成功获得网关返回 code: "0", message: "认证成功"
    3. C# 编译器本地无缝构建校验:使用本地 .NET Framework v4.0.30319 csc.exe 完成 sender.cs 原生二进制本地重编译与静默输出验证;
    4. WiFi 解析安全防护加固:在 get_connected_wifi 中加入 !line.starts_with("BSSID") 防御性前缀守卫,消除多网卡环境下可能的虚假 SSID 捕获风险。
  • v2.2.1修复 Hero Gauge 雷达动画偏心/换算异常,彻底根除 UTF-8 BOM 导致的自动认证失效
    1. Hero Gauge 旋转与圆周几何修复:将仪表盘 <circle r="54"> 的 SVG stroke-dasharray 精确校准为理论圆周长 339.3(彻底消除 38px 的重叠缝隙);将检测中的旋转动画由内层 <circle> 的偏心绕点迁移至外层 .radar-svg 以中心为原点的原生平滑旋转(radarSvgSpin),彻底解决检测网络时仪表环偏心乱晃的动画异常;
    2. 全面防御性清洗 UTF-8 BOM 头:Rust 端的 load_configload_campus_net_infoget_login_profileis_login_configured 以及启动时的 AppState 初始化全面挂载 strip_bom 过滤函数,彻底根除 PowerShell 写入带 BOM 导致 JSON 反序列化失败、使得内存中 primary_ssid 为空的系统级隐患;
    3. 自动化保活探测与防御性双重触发:Rust 后端 check_network 优化为即使未显式保存 SSID 也允许任意已连接 WiFi 进行判定与登录;前端 checkNetwork 机制升级,只要检测到 WiFi 已连接但无外网连通(status.needs_login || (!status.internet_ok && status.wifi_connected)),无缝主动发起 Web Portal 认证;并在手动点击“立即检测”时重置登录冷却计时,彻底恢复全自动化无感联网;
    4. AppState 启动预热:Rust 启动阶段直接从磁盘读取并解析已有配置并同步至内存,无需等待前端首个 IPC 命令即可具备完整的 SSID 守护上下文。
  • v2.2.0恢复历史命名规范(xxgcxy-wifi)并支持 Windows 安装后原生中文文件名与快捷方式
    1. 包名与构建产物规范回归:统一项目包名、Tauri 构建目标以及各平台发布文件名前缀为 xxgcxy-wifi,保持历史下载规范一致性(xxgcxy-wifi_2.2.0_x64-setup.exexxgcxy-wifi_2.2.0_amd64.deb 等);
    2. 安装后自动转为中文名:NSIS 安装器钩子(installer.nsi)在安装完成之后自动将目标可执行文件复制并命名为 新乡工程校园网保活.exe
    3. 中文快捷方式与桌面/开始菜单对齐:自动清理默认英文快捷方式,在桌面与“开始”菜单创建专属「新乡工程校园网保活」快捷方式及卸载入口;
    4. 原生进程无缝转交与自启注册表适配:Rust 后端主入口实现双向探测,当以旧名或安装向导默认拉起时无缝交接至 新乡工程校园网保活.exe;开机自启动注册表项及托盘气泡提示全面使用中文名「新乡工程校园网保活」,且向前兼容旧版自启项。
  • v2.1.1变异模糊测试(Fuzz Audit)、严格作用域净化与多语言数据契约工业级核验。针对历史演进可能带来的隐式断层展开全盘深度排查:
    1. 变异模糊测试套件(6万次注入全量通过):建立自动化变异引擎,对 Portal URL 提纯、URL 编码器、服务端响应体解析、多网卡与热点冲突、历史配置向下兼容进行 60,004 次极端边界注入,验证无内存损坏、无状态死锁、无异常抛出;
    2. Rust 后端深层安全扫描:实现全生产代码 0 处裸 .unwrap()、0 处 panic!(),Win32 Unsafe 块内存与句柄生命周期严密闭环,切片访问全量前置守卫校验;
    3. 前端 ES 模块严格作用域净化:显式声明顶层模块变量(connectedSsid, firstRunTimerId, isFirstRunSetup, portalParsing),根除严格模式下的全局变量污染与潜在 ReferenceError
    4. 跨语言契约三端一致性核验:全面对齐 Rust、前端 UI、PowerShell 脚本间的 14 个核心配置字段,确保老版本升级与空值回退平滑无感。
  • v2.1.0五维子代理全链路深度审计与底层网络协议栈工业级加固。基于五个专项技术子代理对 Rust 原生发包、C# 独立发送器、PowerShell 认证引擎、Python 跨平台保底层及前端交互闭环的系统性实机审计,实施针对性加固:
    1. Rust 原生直发与探活加固:彻底修复 generate_uuid() 中按位运算符优先级错误导致的 UUID 偶尔畸变为 37~38 位的严重缺陷(完全符合 RFC 4122 v4 标准);重构 get_wlan_network_info() 适配中文 Windows(支持“名称”与所有活动网卡遍历,彻底避免回退假 IP 10.0.0.1 导致的认证拒绝);优化 check_url 探针,遇到 302 重定向严格判定为需登录(消除非预期重定向被误判为已连通的漏洞),使用无损流式读取兼容 GBK 编码 Portal 页面;探活备用节点替换为国内高可用端点(华为/MIUI);
    2. Python 保底层 (sender.py):注入 NoRedirectHandler 禁止跟随 302 重定向(与 C# / PowerShell 严格对齐,防止认证成功后跟随跳转至外网未放行地址引发异常);标准输出全面切换为 sys.stdout.buffer.write 强制输出 UTF-8 字节流,杜绝 Windows 中文控制台下 UnicodeEncodeError 崩溃;
    3. C# 独立发送器 (sender.cs):控制台输出强制指定 UTF-8;加入 \uFEFF 与空白字符循环清洗;显式开启 TLS 1.1 / TLS 1.2 现代安全协议;禁用 KeepAlive 及时释放连接;
    4. 前端与托盘交互闭环:托盘菜单“执行登录脚本”全面接入 runLoginScript(),享受统一状态机、防抖冷却与互斥锁保护,杜绝与心跳检测的并发竞态。
  • v2.0.9全面根治认证卡死与连接过慢问题,引入 Rust 进程内原生直发(Sub-100ms 闪电登录)。重构桌面端执行链路,核心认证直接移入 Rust 进程内,使用 Windows 原生 CryptUnprotectData 解密与异步 reqwest 直发,彻底根除系统的 PowerShell 5.1 冷启动与多轮 WMI 扫描开销,认证耗时从 9.5 秒断崖式降低至 80 毫秒以内;保留外部脚本作为无缝降级兜底;PowerShell、C#、Python 三层请求发送器统一注入标准 Chrome 浏览器标头与中文语言环境及 Referer,彻底解决校园网 AC/WAF 防火墙误判并重置连接(“基础连接已经关闭: 连接被意外关闭” / “Remote end closed connection without response”);针对内网环境将单层请求超时由 30 秒缩减至 6 秒,消除了原三层降级累加长达 90 秒的假死卡顿;优化外部脚本,去除 xywdl.bat 重复调用 PowerShell 查版本的 1.75 秒损耗,并为 xywdl.ps1 加入网卡对象单例缓存;移除前端登录后 30 秒全局阻塞锁,改为即时释放,用户手动点击“立即检测并重连”秒级响应;前端日志防抖,消除“重连后需要登录校园网...”多重重复输出;优化 SSID 大小写容错匹配与心跳自适应。
  • v2.0.8:桌面端客户端 UI 全面重构为**深色极客毛玻璃(Dark Acrylic Glassmorphism)**风格;引入 140px 动态发光网络健康雷达环(Hero Gauge),支持在线/待登录/掉线状态呼吸动效与扫描雷达;全新学生身份名片(Profile Card)支持运营商专属色彩徽章与快捷更改;控制开关采用现代扁平平滑开关;活动动态终端升级为等宽字体并支持语义化高亮(绿标/红标/蓝标)与折叠;新增“保持移动热点开启 (Hotspot Keep-Alive)”功能(利用 Windows 原生 WinRT API 实时守护移动热点,防无设备连接超时休眠关闭,突破校园网单账号限制,保障手机/平板多设备持续共享上网);修复账号输入限制(支持字母与数字组合,完美兼容补卡后缀如 ls / lls 以及前缀字母工号,输入含 @ 自动剥离);彻底解决重启开机自启弹窗问题(注册表注入 --autostart 标志且窗口初始设为不可见,开机绝对静默在托盘保活,手动双击才弹出窗口);移除冗余“保存并登录”按钮;输入框示例参数全面脱敏匿名化;默认窗口优化为 460×800 并增加最小尺寸约束;CI/CD 修复弃用警告并支持正式发布。
  • v2.0.5:消除前端日志多余空行;建立 Portal URL 四重防御性清洗体系(输入框粘贴自动提纯/保存提纯/Rust落盘提纯/脚本剥离),杜绝双问号导致账号密码丢失和 AC 报“设备不在正常状态”;重构响应判定逻辑(优先 JSON 解析并兼容双引号 code,直接透传真实错误信息,告别未知错误 99);脚本增加 169.254 APIPA IP 过滤与 DHCP 延迟重试;自动化测试套件扩展至 30 项且全量通过。
  • v2.0.4:修复 SSID/MAC 留空被误判为缺少字段、修复 PS 管道双 BOM 导致保底层发送失败、Portal URL 解析防连点锁。
  • v2.0.3:登录脚本添加详细步骤日志,每个阶段显示 [步骤 X/5] 标记,失败时明确显示 [!] 卡在: 步骤 N,三层发送各显示 [第 N 层] 及具体错误原因。
  • v2.0.2:修复登录配置缺少 SSID 字段导致无法登录(SSID 留空时运行时自动检测当前 WiFi);更新版本号至 2.0.2。
  • v2.0.1:修复桌面端调用登录脚本时 bat 失败路径的 pause 永久挂死;发送超时统一改为 30 秒;登录脚本实际输出回显到 UI 日志。
  • v2.0.0:修复登录无法使用(MAC 留空被误判为缺少字段)、请求发送多层级降级(Windows: PowerShell→C#→Python;Linux: curl→Python)、跨平台 Python 保底层、Portal URL 解析按钮防连点、清理死代码。详见 JSDOC.md §9
  • v1.9.1:修复认证结果判定正则误匹配(code:10/100/123 被误判为“账号不存在”、code:440 被误判为“非法接入”)、请求日志脱敏密码(passwd=***)、统一 PS 端参数 URL 编码;新增自动化测试套件(tests/)与 Rust 单元测试。详见 JSDOC.md §9
  • v1.9.0:登录模块解耦为 JSON 模板 + 渲染器;可视化登录配置屏;DPAPI 加密密码;取消内置 PS7。

许可证

MIT License © Thatgfsj

About

新乡工程校园网自动登录,防止断线,超强保活。

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages