东南大学校园网开机自动认证:不用再打开浏览器、输入账号密码、选择运营商/服务类型。
同时支持 SEU-ISP(运营商宽带)和 SEU-WLAN(校园网)——脚本会读当前连着的无线网络, 自动选用对应的一份配置(账号、密码、运营商后缀)。
Python 3 标准库实现,无第三方依赖,已在 Windows 11 + SEU-ISP 上实测通过。
- 锁屏阶段就认证:系统启动时由 SYSTEM 计划任务触发,不用等登录 Windows
- 同时支持 SEU-ISP 与 SEU-WLAN:按当前 SSID 自动切换账号与「服务类型」后缀
- 登录后兜底 + 断线自愈:用户登录时再触发一次,之后每 15 分钟检查一次
- 不只信门户返回:每次认证后真的去请求一次外网,通了才算成功
- 会话卡死自愈:连续两次「门户说在线但外网不通」会自动注销后重新认证
- 单实例锁:两个任务同时被唤醒时只跑一个,不会重复提交
- 直连门户:明确绕过系统代理
- 顺手关掉「登录到网络」弹窗:装任务时自动关掉 Windows 那个联网验证弹窗(可一键恢复,见下文)
| 无线网络 | 实际提交的账号格式 | 说明 |
|---|---|---|
| SEU-ISP(中国移动) | 一卡通号@cmcc |
电信 @dx、联通 @lt |
| SEU-WLAN(校园用户) | ,0,一卡通号 |
无感知认证前缀,不带后缀(实测) |
两个网络是同一个门户(w.seu.edu.cn),但账号写法不同,脚本按当前 SSID 自动选。
后缀来自门户自己下发的服务类型列表。config.json 的 profiles 里按 SSID 写好即可,
连上哪个网络就用哪一份(没匹配到时用顶层的 account / password / isp_suffix)。
两个网络一般用同一个密码;万一不一样,在对应 profile 里单独写 password 即可,
留空则用顶层那个 —— 详见下面的「配置文件怎么填」。
config.json 支持 // 和 /* */ 注释:程序会先剥掉注释再解析,所以你可以直接在文件里写备注。
放哪儿:和 exe(或 seu_isp_login.py)放在同一个目录,login.log 也会生成在那里。
几个要点:
ssid必须和 Windows 里显示的无线网络名一致(大小写无所谓)。写错时日志会显示网络 未识别, 然后退回用顶层默认后缀 —— 这时很容易出现「后缀对不上、认证被拒」。account_prefix:最终提交的账号 =前缀 + 账号 + 后缀。SEU-WLAN 实测要用,0,前缀、后缀留空。password留空就用顶层那个,写""和删掉这一行等价。- 密码填错时门户返回
Authentication fail,日志会写成认证被拒绝(Authentication fail), 脚本会立刻停下并提示,不会傻重试。 - 其余参数(接口地址、超时、重试节奏、日志大小、没网时催连 WiFi 等)示例文件里逐条都有注释,一般不用动。
东南大学的认证门户是 Drcom 系统(w.seu.edu.cn)。把网页上的登录动作拆成 HTTP 请求:
| 动作 | 请求 |
|---|---|
| 登录 | https://w.seu.edu.cn:801/eportal/?c=Portal&a=login |
| 注销 | https://w.seu.edu.cn:801/eportal/?c=Portal&a=logout |
登录参数:
| 参数 | 说明 |
|---|---|
login_method |
1(PORTAL 协议) |
user_account |
<一卡通号>@cmcc / <一卡通号>@xyw(见上表) |
user_password |
密码 |
wlan_user_ip |
本机 IP,脚本自动获取 |
jsVersion |
1.0 |
成功返回 dr1003({"result":"1","msg":"认证成功"});已经在线时是 {"result":"0","ret_code":2}。
踩坑记录:老接口
http://w.seu.edu.cn/drcom/login(本地认证)也会返回result=1, 但它不会在 AC 上真正放行——表现为「日志说登录成功,实际还是没网」。 本脚本默认走 PORTAL 协议,并以外网是否真的通作为最终判据。
东大不同网段的门户地址不一样(例如有人的登录页是
http://10.9.10.100/)。脚本会按portal_urls依次探测;如果发现门户不是w.seu.edu.cn,还会按探测到的地址推导一个 eportal 入口再试一次。换网段时通常需要按实际情况改portal_urls/portal_login_base。
未认证时,任何 HTTP 请求都会被门户劫持成认证页(返回 200 + 一段门户 HTML)。
所以脚本在认证后请求 http://www.msftconnecttest.com/connecttest.txt,
只有拿到 Microsoft Connect Test 才算成功:
- 门户说成功、外网也通 → 收工
- 门户说成功、外网不通 → 继续重试;连续两次则先注销再重登
- 到 Releases 下载
seu-autologin-windows-x64.zip,解压到一个固定目录(例如D:\seu-autologin)——config.json和login.log都放在 exe 旁边,别放会被清理的临时目录 - 双击
1-首次配置并测试.cmd:第一次运行会问三个问题 —— 一卡通、密码(校园网和宽带是同一个)、 有没有运营商宽带(没有就直接回车);它会自动生成config.json并立刻试一次认证, 看到「认证完成,外网已连通」就成了 - 双击
2-安装开机自启.cmd(UAC 点「是」):装好后开机、登录、切换网络都会自动认证 顺带会把 Windows 的「登录到网络」弹窗关掉(原理、代价和恢复方法见 关掉「登录到网络」弹窗) - 出问题就打开同目录的
login.log;包里的使用说明.txt是同样步骤(写给不用命令行的人)
两个 exe 的区别:seu-autologin.exe 带控制台(手动运行能看到输出),seu-autologinw.exe 无窗口
(计划任务用,不闪黑框)。命令行等价写法:seu-autologin.exe --once、seu-autologin.exe --init。
未签名的 exe 首次运行会弹 SmartScreen「未知发布者」,点「更多信息 → 仍要运行」即可。
git clone https://github.com/JinYihang1011/seu-network-autologin.git
cd seu-network-autologin
copy config.example.json config.json
notepad config.json # 填 account / password / isp_suffix
python seu_isp_login.py --once # 先手动跑一次,确认能认证成功然后同样双击 install_tasks.cmd(会弹 UAC,选「是」)注册计划任务:
| 任务名 | 触发条件 | 运行身份 |
|---|---|---|
SEU-ISP-AutoLogin-Boot |
系统启动时(锁屏阶段) | SYSTEM / 最高权限 |
SEU-ISP-AutoLogin |
用户登录后立即 + 每 15 分钟 + 网络变化后约 5 秒 | 当前用户 / 普通权限 |
Windows 的「快速启动」开启时,「关机再开机」其实是从休眠恢复,不会触发开机触发器, 这时由登录任务接上;真正的「重启」才走 Boot 任务。两个任务合起来覆盖各种情况。
这个工具只负责「认证」,前提是 Windows 先把 WiFi 连上。很多人卡在这里:SEU-WLAN
的配置文件如果设成了「手动连接」,离开 SEU-ISP 覆盖范围后电脑不会自己连校园网,自然也就不会自动认证。
检查(管理员 PowerShell):
netsh wlan show profiles name="SEU-WLAN" # 看 Connection modeConnect automatically= 会自动连,✅Connect manually= 要手动点,需要改 👇
改成自动连接(管理员 PowerShell):
netsh wlan set profileparameter name="SEU-WLAN" connectionmode=auto
netsh wlan set profileparameter name="SEU-ISP" connectionmode=auto图形界面等价操作:设置 → 网络和 Internet → WLAN → 管理已知网络 → 选中网络 → 勾上「在范围内时自动连接」。
另外两点值得顺手检查:
- 已知网络的优先级:
netsh wlan show profiles列出的顺序就是优先级(越靠前越优先)。 如果手机热点排在校园网前面,电脑在宿舍会优先连热点。调整:netsh wlan set profileorder name="SEU-ISP" interface="WLAN" priority=1 - 本工具的兜底:
wifi_nudge(默认开)会在「一个可用网络都没有」时主动执行netsh wlan connect,按profiles里的顺序催 Windows 连校园网。
设置好之后,完整链路是:Windows 自动连上 WiFi → 本工具自动认证 → 可以上网。 开机、登录、切换网络(约 5 秒后)都会走这条链路。
装任务时(2-安装开机自启.cmd)会自动帮你关掉,这一节说明原理、代价和恢复方法。
为什么会有这个弹窗:每次连上 SEU-ISP / SEU-WLAN,Windows 自带的「网络连接状态指示器」
(NCSI)都会去请求一次 http://www.msftconnecttest.com/connecttest.txt,用它判断这个网络有没有外网。
校园门户把这个请求劫持到登录页,Windows 就认定「这是需要登录的热点」,于是弹通知并自动打开浏览器
到门户页面。本工具认证只要 1 秒左右,但弹窗在这一秒之前就已经弹出来了 —— 所以会出现
「脚本很快就登录好了,浏览器还是弹了一下」的现象。
关掉之后:Windows 不再做这项探测,即注册表
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
EnableActiveProbing : 1(默认)→ 0
本工具自己的外网校验请求的是同一个网址,不受影响,认证正确性和速度都没有任何变化。
代价:Windows 不再知道「这个网络需要登录」。万一认证没成功(比如密码改了、开着 Clash 的 TUN、
门户改版),托盘图标可能仍然显示已连接,也不会再弹窗提醒你 —— 记得看 login.log。
另外,如果以后做过「网络重置」或某些大版本更新,这个值可能被改回 1,弹窗就会回来,重跑一次即可。
恢复弹窗:双击 4-恢复联网验证弹窗.cmd(或管理员 PowerShell 跑 signin_popup.ps1 -Restore)。
想重新关掉:双击 3-关闭联网验证弹窗.cmd。
装任务时不想要这一步:管理员 PowerShell 跑 install_tasks.ps1 -KeepSignInPopup。
python logout.py # 调用门户注销接口,本机立刻断网
python seu_isp_login.py --once # 跑一次认证成功时 login.log 长这样(注意里面会写明识别到的网络与服务类型):
第 1 次-1:提交认证(PORTAL 协议(eportal,本机 IP 10.210.x.x,网络 SEU-ISP,账号 123456789@cmcc))→ 门户返回 认证成功|dr1003({"result":"1","msg":"认证成功"})
外网校验通过(HTTP 200,内容匹配)
第 1 次:认证完成,外网已连通
| 键 | 默认值 | 说明 |
|---|---|---|
account |
— | 一卡通号(登录校园网时输的那个号) |
password |
— | 密码。校园网和宽带用的是同一个账号和密码 |
isp_suffix |
@cmcc |
默认运营商后缀 |
profiles |
SEU-ISP→@cmcc、SEU-WLAN→,0, 前缀 + 无后缀 |
按 SSID 的配置,可各自写 account / password / isp_suffix / account_prefix |
login_mode |
auto |
auto = 先 PORTAL 协议,失败再回退本地认证;也可强制 portal / drcom |
portal_login_base |
https://w.seu.edu.cn:801/eportal/ |
登录 / 注销接口地址 |
max_wait_seconds |
300 |
单次运行最多等多久(开机时网络可能起得慢) |
fast_retry_seconds / fast_retry_window_seconds |
2 / 120 |
前 2 分钟每 2 秒探测一次门户 |
retry_interval_seconds |
10 |
2 分钟之后的重试间隔 |
wifi_nudge |
true |
完全没有网络时主动执行 netsh wlan connect 催 Windows 连网(按 profiles 顺序试) |
wifi_interface |
WLAN |
上面那条用的网卡名 |
log_file / log_max_kb |
login.log / 512 |
日志文件,超限自动截断保留后半段 |
seu_isp_login.py 主脚本(Python 3 标准库,无第三方依赖)
config.example.json 配置模板,复制成 config.json 后填自己的账号密码
1-首次配置并测试.cmd 首次运行向导 + 试认证(双击即可)
2-安装开机自启.cmd 注册计划任务(双击,会自动提权)
3-关闭联网验证弹窗.cmd 关掉 Windows 的「登录到网络」弹窗(重装/重跑用)
4-恢复联网验证弹窗.cmd 把上面那个弹窗恢复回来
使用说明.txt 给不用命令行的人看的三步说明
logout.py 把本机踢下线,用来测试自动登录
install_tasks.ps1 注册两个计划任务(需管理员)
install_tasks.cmd 双击即可(自动提权)
signin_popup.ps1 关闭/恢复联网验证弹窗的实际逻辑(-Restore 恢复)
build_exe.ps1 用 PyInstaller 自己打包 exe
LICENSE MIT
看 login.log:
| 日志 | 含义 |
|---|---|
认证完成,外网已连通 |
正常 |
网络 未识别 |
没读到当前 SSID,会用顶层默认后缀;确认 profiles 里的 SSID 拼写与系统一致 |
门户返回 认证成功 但 外网校验未通过 |
认证没真正生效,脚本会继续重试 |
认证被拒绝 |
一卡通号或密码不对(两个网络是同一个账号密码) |
未发现校园网认证门户 |
请求到不了门户:确认连着校园网;开着 Clash 的 TUN 模式会劫持去门户的路由,需要关掉 TUN 或让 Clash 晚于认证启动 |
已有另一个认证实例在运行,本次跳过 |
两个任务同时被唤醒,属正常 |
| 托盘不再弹「需要操作 / 登录到网络」 | 正常,弹窗已按上文关掉;想恢复双击 4-恢复联网验证弹窗.cmd |
实测一次重启(系统事件日志 + login.log 对齐):
| 阶段 | 耗时 |
|---|---|
| 内核启动 → 锁屏就绪 | 27 秒(Windows 开机本身) |
| 锁屏就绪 → WiFi 关联成功 | 20 秒(Windows WLAN 服务扫描 / 关联) |
| WiFi 关联 → 认证完成、外网通 | 9 秒(其中门户响应约 6 秒) |
脚本在锁屏就绪的同一秒就启动,一直在每 2 秒探测门户,网络一通就立刻认证——
也就是说等待时间基本都在 Windows 自己把 WiFi 拉起来,脚本不是瓶颈。
wifi_nudge 是能做的一点补救:完全没有网络时主动催一次 netsh wlan connect。
config.json里是明文密码,已加入.gitignore,请勿提交或外传。- 只在东南大学(SEU)网络环境下验证过;其他学校的 Drcom 门户接口可能不同,
但接口地址、参数、运营商后缀都可以在
config.json里改。 - 仅供学习和个人便利使用,请遵守学校的网络管理规定。
- 本项目以 MIT 协议开源,见 LICENSE。
动手前后看过这些同类仓库(截至 2026-09 的 GitHub 搜索结果),各有侧重:
| 项目 | 说明 |
|---|---|
| NN708/seu-wlan-login | 最流行的 SEU-WLAN 一键登录(Python + iOS 快捷指令),面向一次性登录 |
| ChenYuWuAi/seu-autologin | Linux(Ubuntu + systemd)版自动登录 |
| geniezi/SEU-WLAN-LOGIN | OpenWrt 路由器版;用的是同一套 eportal ?c=Portal&a=login 接口 |
| PC-DOS/SEU-WLAN-AutoLogin | Windows GUI 工具(VB.NET),同样支持 SEU-WLAN / SEU-ISP |
| Flynn-woo/seu-campus-autologin-windows | Windows 开机自启,工程化完整(安装器/CI/Release),但只适配 10.9.10.100 门户 |
| YunfanGoForIt/SEU-OpenWrt-Gateway | OpenWrt 网关方案,含 portal 自动登录与 OpenClash 共存经验 |
本仓库的定位:Windows 原生 + 双网络按 SSID 自动切换 + Python 标准库零依赖 + 开机(SYSTEM)/登录/每 15 分钟三重触发 + 认证后真实外网校验。
{ "account": "一卡通号", // ← 登录校园网时输的那个号 "password": "密码", // ← 校园网和宽带是同一个密码 "profiles": [ { "ssid": "SEU-WLAN", // 校园网:平时连的多数是这个 "account_prefix": ",0,", // 校园网实测要这个前缀 "isp_suffix": "", // 且不带后缀 "account": "", // 留空 = 用上面的 account "password": "", // 留空 = 用上面的 password "note": "校园网" }, { "ssid": "SEU-ISP", // 运营商宽带(没有的话这条可删) "isp_suffix": "@cmcc", // 移动 @cmcc、电信 @dx、联通 @lt "account": "", "password": "", // 校园网和宽带密码不一样时填这里 "note": "运营商宽带(中国移动)" } ] }