Sleepstars 的记录室

Sleepstars 的记录室

深圳大学教学区校园网 Windows 自动登录(新手向系列二)(2025年版)

2024-10-07

更新日志

2024.9.20 更新初版

2024.10.15 添加保持登录版本,如果需要持续登录(远程桌面等)跳转文末

2025.1.19 教学区更新了深澜系统,脚本需要新,需要使用二进制文件登录

零、前言

如果你想要一个更简练的版本,只需要宿舍区的脚本请移步该文章(暂时废弃):

https://blog.sleepstars.net/archives/shen-zhen-da-xue-su-she-qu-xiao-yuan-wang-windows-zi-dong-deng-lu-xin-shou-xiang-xi-lie-yi

这个脚本已经可以完美实现宿舍区的登录,唯一的小问题是不支持教学区的校园网登录现已分开两个支持。

教学区的校园网登录有一个小问题,就是教学区的登录是使用域名的。而众所周知,在开启了一些网络工具后,由于其会劫持 DNS 解析(例如配置了浏览器中的 DoH),导致无法连接到教学区的登陆网站,这时候除了 hosts 魔改大法这种不优雅的方案,就只能通过直接请求 IP 并指定 host 头来访问了。

这个时候使用 cURL 的 resolve 功能就可以非常完美的解决我们的需求,这种方式允许用户在特定条件下绕过 DNS 查找,直接将请求发送到指定的 IP 地址。

例如:

curl --resolve example.com:443:127.0.0.1 https://example.com

这条命令会强制将 example.com 的 HTTPS 请求(端口 443)发送到 IP 地址 127.0.0.1,而不是通过 DNS 解析得到的 IP 地址。常用于调试或测试不同服务器的响应。

为了解决一个脚本登录两个区域网络的难题,有两个选择:

  1. 直接对着俩接口发登录请求,反正总能中一个;

  2. 写一个逻辑判断是在宿舍区还是在教学区,选择性向一个区域发送登录请求。

思索再三,为了校园网验证服务器的健康有序平稳发展,我选择了方案二(其实是因为更好玩)

下面开始实操部分

如果你只需要脚本内容,可以直接点击跳转到实操部分

一、脚本简析

为了让大家用得安心用得放心,这里逐段解析一下脚本的内容,大家也可以让 GPT 跟据你的需求修改:

期待大家给我甩 PR 来改改这个抽象逻辑部分,感谢大佬们捧场。

1. 标题头部分

@echo off
echo.
echo.
echo ███████╗███████╗██╗   ██╗    ███╗   ██╗███████╗████████╗██╗    ██╗ ██████╗ ██████╗ ██╗  ██╗
echo ██╔════╝╚══███╔╝██║   ██║    ████╗  ██║██╔════╝╚══██╔══╝██║    ██║██╔═══██╗██╔══██╗██║ ██╔╝
echo ███████╗  ███╔╝ ██║   ██║    ██╔██╗ ██║█████╗     ██║   ██║ █╗ ██║██║   ██║██████╔╝█████╔╝ 
echo ╚════██║ ███╔╝  ██║   ██║    ██║╚██╗██║██╔══╝     ██║   ██║███╗██║██║   ██║██╔══██╗██╔═██╗ 
echo ███████║███████╗╚██████╔╝    ██║ ╚████║███████╗   ██║   ╚███╔███╔╝╚██████╔╝██║  ██║██║  ██╗
echo ╚══════╝╚══════╝ ╚═════╝     ╚═╝  ╚═══╝╚══════╝   ╚═╝    ╚══╝╚══╝  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝
echo.
echo.
echo Powered by FIX SZUCIEVA
echo 由深大义修组提供技术支持
echo 若有问题欢迎前往我的博客留言:https://blog.sleepstars.net/
echo.
echo ==========================================
echo.

这段仅是为了美观需求,无任何功能(字符画好看吧)

2. 网络连通性函数部分

:: 检查网络连接,分别检查宿舍区、教学区和百度
:: 使用curl检测宿舍区网络连通性
curl -s -I --connect-timeout 1 --max-time 3 --max-redirs 0 http://172.30.255.42/ >nul
if %errorlevel% equ 0 (
    set "dormitory_available=true"
) else (
    set "dormitory_available=false"
)

:: 使用curl检测教学区网络连通性,禁止跳转
curl -s -I --connect-timeout 1 --max-time 3 --max-redirs 0 https://net.szu.edu.cn/ >nul

if %errorlevel% equ 0 (
    set "teaching_available=true"
) else (
    set "teaching_available=false"
)

:: 使用curl检测百度网络连通性
curl -s -I --connect-timeout 1 --max-time 5 --max-redirs 0 https://baidu.com/ >nul
if %errorlevel% equ 0 (
    set "baidu_available=true"
) else (
    set "baidu_available=false"
)
  • curl -s -I:通过 curl 发出 HTTP 请求,-s 表示静默模式(不输出进度信息),-I 表示只获取HTTP头部信息。

  • --connect-timeout 1:设置连接超时时间为1秒。

  • --max-time 3:设置请求最大时间为3秒,对公网的百度设置5秒

  • --max-redirs 0:不允许 HTTP 请求进行重定向(宿舍区访问任何页面都会重定向回 http://172.30.255.42/ 所以是必要的)

使用 cURL 就可以判断三个区域的连通性,方便我们写下面的逻辑判断。

3. 逻辑判断部分

:: 根据检测结果执行相应操作
if "%baidu_available%"=="true" (
    echo 您已登录,无需再次登录。
) else (

if "%dormitory_available%"=="true" (
        echo 检测到宿舍区网络环境...
        echo 正在使用宿舍区登录系统登录...
            curl -G -d "user_account=%USER_ACCOUNT%" -d "user_password=%USER_PASSWORD%" "%dormitory_login_url%"
        echo 宿舍区网络登录完成
    ) else if "%teaching_available%"=="true" (
        echo 检测到教学区网络环境...
        echo 正在使用深澜登录系统登录...
        :: 使用编译好的srun-login程序进行登录
        if exist "srun-login.exe" (
            srun-login.exe --username=%USER_ACCOUNT% --password=%USER_PASSWORD%
            echo 教学区网络登录完成
        ) else (
            echo 错误:未找到srun-login.exe程序
            echo 请确保已经正确防止登陆程序
        )
    ) else (
        echo 请检查您的网络连接或可能处于校外环境。
        echo 如果您已连接校园网,请尝试直接使用浏览器登录网络。
        echo 如果仍无法连接,欢迎联系深大义修组维修网络。
        echo 深大义修组官网:http://fix.szucieva.com/
        echo 或者搜索深大义修组官方微信公众号:深大义修组
    )
)

看上面这个逻辑之前,先给大家分析一下之前实验的结论:

  1. 任何区域已登录的情况下,三个检测均可访问;

  2. 未登录的时候,宿舍区可同时访问到宿舍区和教学区的登录页面,但无法连接外网;

  3. 未登录时,教学区仅可访问到教学区登录。

由此结论,逻辑判断是如下的:

  1. 当宿舍区和教学区网络都可用,但百度网络不可用时,脚本会认为用户处于宿舍区网络环境,并执行宿舍区网络登录操作;

  2. 如果宿舍区网络不可用,而教学区网络可用,脚本会执行教学区网络的登录操作;

  3. 如果检测到宿舍区和教学区网络均不可用,说明可能在校外或者网络连接有问题,这个时候当然是可以选择义修组报修啦

4. 登录命令

里面用的两个登录命令分别是

:: 宿舍区
curl -G -d "user_account=%USER_ACCOUNT%" -d "user_password=%USER_PASSWORD%" "%dormitory_login_url%"
:: 教学区
srun-login.exe --username=%USER_ACCOUNT% --password=%USER_PASSWORD%

教学区使用了新的深澜登录,需要对账号密码进行一定的处理才可以上传,无法使用简单的 curl 一条指令直接上传,因此使用下载好的二进制文件。该二进制文件可在 GitHub 下载:https://github.com/Sleepstars/SZU_Utils/raw/refs/heads/main/Network/srun-login.exe

二、 脚本使用方法

这部分其实和之前的宿舍区/教学区登录脚本使用方法一致,可以参考之前的页面使用。页面链接

1. 复制并修改脚本

首先复制以下脚本内容,找到其中的 在这里修改你的校园卡账户和密码 的注释(第 20、21 行),将 USER_ACCOUNT USER_PASSWORD 修改为你的实际校园卡账户和密码(原脚本中分别为123和456)

@echo off
echo.
echo.
echo ███████╗███████╗██╗   ██╗    ███╗   ██╗███████╗████████╗██╗    ██╗ ██████╗ ██████╗ ██╗  ██╗
echo ██╔════╝╚══███╔╝██║   ██║    ████╗  ██║██╔════╝╚══██╔══╝██║    ██║██╔═══██╗██╔══██╗██║ ██╔╝
echo ███████╗  ███╔╝ ██║   ██║    ██╔██╗ ██║█████╗     ██║   ██║ █╗ ██║██║   ██║██████╔╝█████╔╝ 
echo ╚════██║ ███╔╝  ██║   ██║    ██║╚██╗██║██╔══╝     ██║   ██║███╗██║██║   ██║██╔══██╗██╔═██╗ 
echo ███████║███████╗╚██████╔╝    ██║ ╚████║███████╗   ██║   ╚███╔███╔╝╚██████╔╝██║  ██║██║  ██╗
echo ╚══════╝╚══════╝ ╚═════╝     ╚═╝  ╚═══╝╚══════╝   ╚═╝    ╚══╝╚══╝  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝
echo.
echo.
echo Powered by FIX SZUCIEVA
echo 由深大义修组提供技术支持
echo 若有问题欢迎前往我的博客留言:https://blog.sleepstars.net/
echo.
echo ==========================================
echo.

:: 在这里修改你的校园卡账户和密码
set "USER_ACCOUNT=123"
set "USER_PASSWORD=456"

:: 分别是宿舍区和教学区的登录
set "dormitory_login_url=http://172.30.255.42:801/eportal/portal/login/"
set "teaching_login_url=https://net.szu.edu.cn/"


:: 检查网络连接
echo 正在检测网络连通性...
echo.
echo ==========================================
echo.

:: 检查网络连接,分别检查宿舍区、教学区和百度
:: 使用curl检测宿舍区网络连通性
curl -s -I --connect-timeout 1 --max-time 3 --max-redirs 0 http://172.30.255.42/ >nul
if %errorlevel% equ 0 (
    set "dormitory_available=true"
) else (
    set "dormitory_available=false"
)

:: 使用curl检测教学区网络连通性,禁止跳转
curl -s -I --connect-timeout 1 --max-time 3 --max-redirs 0 https://net.szu.edu.cn/ >nul

if %errorlevel% equ 0 (
    set "teaching_available=true"
) else (
    set "teaching_available=false"
)

:: 使用curl检测百度网络连通性
curl -s -I --connect-timeout 1 --max-time 5 --max-redirs 0 https://baidu.com/ >nul
if %errorlevel% equ 0 (
    set "baidu_available=true"
) else (
    set "baidu_available=false"
)

:: 根据检测结果执行相应操作
if "%baidu_available%"=="true" (
    echo 您已登录,无需再次登录。
) else (

if "%dormitory_available%"=="true" (
        echo 检测到宿舍区网络环境...
        echo 正在使用宿舍区登录系统登录...
            curl -G -d "user_account=%USER_ACCOUNT%" -d "user_password=%USER_PASSWORD%" "%dormitory_login_url%"
        echo 宿舍区网络登录完成
    ) else if "%teaching_available%"=="true" (
        echo 检测到教学区网络环境...
        echo 正在使用深澜登录系统登录...
        :: 使用编译好的srun-login程序进行登录
        if exist "srun-login.exe" (
            srun-login.exe --username=%USER_ACCOUNT% --password=%USER_PASSWORD%
            echo 教学区网络登录完成
        ) else (
            echo 错误:未找到srun-login.exe程序
            echo 请确保已经正确防止登陆程序
        )
    ) else (
        echo 请检查您的网络连接或可能处于校外环境。
        echo 如果您已连接校园网,请尝试直接使用浏览器登录网络。
        echo 如果仍无法连接,欢迎联系深大义修组维修网络。
        echo 深大义修组官网:http://fix.szucieva.com/
        echo 或者搜索深大义修组官方微信公众号:深大义修组
    )
)

echo.
pause

2. 创建文本内容

在你任何喜欢的位置,新建一个文本文档,并把上面的内容复制进相应的文档中

请注意确保此处需要已经修改好账号和密码

3. 创建为 CMD 脚本

点击左上角的文件,找到另存为

在另存为中,另存为为所有文件,并把后缀修改为 .cmd,并在完成后双击启动尝试是否可以正常使用。如果出现乱码,可以重新执行另存为步骤,把编码修改为 UTF-8 或 ANSI 并尝试是否还有乱码(部分人比如我可能会修改为全局 UTF-8 编码,此时使用 ANSI 就会乱码)

4. (新增步骤)将 srun-login.exe 放入文件夹

下载链接:https://github.com/Sleepstars/SZU_Utils/raw/refs/heads/main/Network/srun-login.exe

源代码链接:https://github.com/Sleepstars/SZU-login

5. 设置为开机启动

在任何位置,输入快捷键 win + r 组合键,进入运行,并输入 shell:startup 找到 Windows 的开机自启文件夹

点击确定,你就会进入到 Windows 的开机自启文件夹,把刚刚你另存为的脚本文件复制到这个文件夹中,此后 Windows 开机就会自动运行脚本登录校园网。

四、小结

这个脚本已经完成了登录和识别的相关工作,如果还需要长期保持登录的(例如远程桌面场景)欢迎各位佬修改,或者借助 GPT 的力量,如果有更好的想法或实现方法,欢迎评论区留言,我看到会尽快回复的!

感谢各位大佬们的支持!没有大家的支持我也写不出来这坨大的

五、保持登录版

@echo off

echo.
echo.
echo ███████╗███████╗██╗   ██╗    ███╗   ██╗███████╗████████╗██╗    ██╗ ██████╗ ██████╗ ██╗  ██╗
echo ██╔════╝╚══███╔╝██║   ██║    ████╗  ██║██╔════╝╚══██╔══╝██║    ██║██╔═══██╗██╔══██╗██║ ██╔╝
echo ███████╗  ███╔╝ ██║   ██║    ██╔██╗ ██║█████╗     ██║   ██║ █╗ ██║██║   ██║██████╔╝█████╔╝ 
echo ╚════██║ ███╔╝  ██║   ██║    ██║╚██╗██║██╔══╝     ██║   ██║███╗██║██║   ██║██╔══██╗██╔═██╗ 
echo ███████║███████╗╚██████╔╝    ██║ ╚████║███████╗   ██║   ╚███╔███╔╝╚██████╔╝██║  ██║██║  ██╗
echo ╚══════╝╚══════╝ ╚═════╝     ╚═╝  ╚═══╝╚══════╝   ╚═╝    ╚══╝╚══╝  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝
echo.
echo.
echo Powered by FIX SZUCIEVA
echo 由深大义修组提供技术支持
echo 若有问题欢迎前往我的博客留言:https://blog.sleepstars.net/
echo.
echo ==========================================
echo.

:loop
:: 在这里修改你的校园卡账户和密码
set "USER_ACCOUNT=123"
set "USER_PASSWORD=456"
:: 分别是宿舍区和教学区的登录
set "dormitory_login_url=http://172.30.255.42:801/eportal/portal/login/"
set "teaching_login_url=https://net.szu.edu.cn/"

:check_network
:: 检查网络连接
echo 正在检测网络连通性...
echo.
echo ==========================================
echo.

:: 检查网络连接,分别检查宿舍区、教学区和百度
:: 使用curl检测宿舍区网络连通性
curl -s -I --connect-timeout 1 --max-time 3 --max-redirs 0 http://172.30.255.42/ >nul
if %errorlevel% equ 0 (
    set "dormitory_available=true"
) else (
    set "dormitory_available=false"
)

:: 使用curl检测教学区网络连通性,禁止跳转
curl -s -I --connect-timeout 1 --max-time 3 --max-redirs 0 https://net.szu.edu.cn/ >nul
if %errorlevel% equ 0 (
    set "teaching_available=true"
) else (
    set "teaching_available=false"
)

:: 使用curl检测百度网络连通性
curl -s -I --connect-timeout 1 --max-time 5 --max-redirs 0 https://baidu.com/ >nul
if %errorlevel% equ 0 (
    set "baidu_available=true"
) else (
    set "baidu_available=false"
)

:: 根据检测结果执行相应操作
if "%baidu_available%"=="true" (
    echo 您已登录,无需再次登录。
) else (
    if "%dormitory_available%"=="true" (
        echo 检测到宿舍区网络环境...
        echo 正在使用宿舍区登录系统登录...
        curl -G -d "user_account=%USER_ACCOUNT%" -d "user_password=%USER_PASSWORD%" "%dormitory_login_url%"
        echo 宿舍区网络登录完成
    ) else if "%teaching_available%"=="true" (
        echo 检测到教学区网络环境...
        echo 正在使用深澜登录系统登录...
        :: 使用编译好的srun-login程序进行登录
        if exist "srun-login.exe" (
            srun-login.exe --username=%USER_ACCOUNT% --password=%USER_PASSWORD%
            echo 教学区网络登录完成
        ) else (
            echo 错误:未找到srun-login.exe程序
            echo 请确保已经正确放置登陆程序
        )
    ) else (
        echo 请检查您的网络连接或可能处于校外环境。
        echo 如果您已连接校园网,请尝试直接使用浏览器登录网络。
        echo 如果仍无法连接,欢迎联系深大义修组维修网络。
        echo 深大义修组官网:http://fix.szucieva.com/
        echo 或者搜索深大义修组官方微信公众号:深大义修组
    )
)

echo.
echo 等待1分钟后将重新检测网络...
choice /t 60 /d y /n >nul
goto check_network

echo.
pause

参考文章:

https://blog.csdn.net/Reven_L/article/details/122256177https://blog.csdn.net/TeleostNaCl/article/details/124553119