> ## Content Index
> Fetch the complete content index at: https://xavier.wang/llms.txt
> Use this file to discover other available public pages before exploring further.

# 利用快捷指令自动登录校园 Wi-Fi
- URL: https://xavier.wang/120-netlogin-shortcut/
- Published: 2020-11-19T23:56:20.000Z
- Updated: 2021-09-22T03:57:32.000Z
- Description: 咻的一下，就可以了
- Author: 王虾虾
- Tags: 自动化

每次在教室、宿舍里连上学校的 Wi-Fi，要等登录页面弹出来，iOS 用户还会遇到无法登录的问题。在手机上，因为弹出登录页面使用了隐私模式（Privacy Mode），记住密码这一功能也无法正常使用，真是气死人辽。

## 登录流程分析

先来看一下设备登录校园网的流程。

![登录流程](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Login_Steps.jpg)

和家里带密码的无线网络不同，校内的无线网络 JYU-S、JYU-T 将无线信号与用户鉴权两个部分拆散，无线 AC（Access Control，接入管理） + AP（Access Point，接入节点）负责分发无线信号与动态 IP 分发，用户鉴权部分则由 Dr.com 的认证网关伺服器负责，此类认证网关通常采用专用客户端或强制门户实现用户认证（Captive Portal）。

设备连接上校园网后，系统会通过访问特定网址来检测当前网络是否能够互联网，但因为我们没有通过网关的登录认证，认证网关会将原本应该去向 A 的访问请求强制重定向至 B，也就是认证页面（Web Portal）。

来到登录页面，在这个页面上，我们只需输入校园网账号与密码，点击登录，便完成了认证流程。学习过 php 语言的同学不难猜出，这个页面是通过 POST 的方式向认证网关发送了一个带有账号与密码的登录认证请求，认证伺服器收到并核验完成后，我们就可以上网了。

既然是 POST 请求，那事情就简单很多了，抓接口 + 分析 + 重放。

## 制作捷径

先来看看最终效果。

![对比](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Compare.gif)

### 提取账号信息

出于安全考虑，传递的密码使用了混淆后的密码。提取混淆后的密码有两种方式：抓包、重算。

#### 抓包

进入校园网的[登录页面](http://dr.com/a30.html)，打开浏览器的开发者工具（本文以 Chrome 浏览器为例），切换到 Network 选项卡，勾选菜单栏上的 Preserve log（保存请求日志）。

![登录页](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Login_Page.jpg)

在页面上输入校园网账号、密码，点击登录，Network Tool 便会将网页的所有请求记录下来。

![开发者工具](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Develop_Tools.jpg)

点击列表的 `a30.htm`，在 General 一栏中可以得知这个请求是一个 POST，下方的 From Data 记录了 POST 请求发送的所有信息，其中包括校园网账号与混淆后的密码，将 upass 的值记录好，后面会用到。

| 参数     | 值         | 作用      |
| ------ | --------- | ------- |
| DDDDD  | 000000000 | 校园网账号   |
| upass  | \*        | 经过混淆后密码 |
| R1     | 0         | 固定值     |
| R2     | 1         | 固定值     |
| para   | 00        | 固定值     |
| 0MKKey | 123456    | 固定值     |
| R6     | 1         | 固定值     |

#### MD5 计算

除了通过抓包获取混淆后的密码，我们也可以自行计算出 upass 的值。在登录页面的 [JS 文件](http://210.38.163.113/a41.js) 中展示了混淆过程：`MD5(pid+password+calg)+calg+pid`。其中 pid=2、calg=12345678，password 为校园网账号的密码。下面以密码（100000000）为例。

![混淆](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-MD5.jpg)

第一步：组合 pid、password、calg 三个字符串，得到 `2/100000000/12345678`（结果不包含 “/”），然后进行 MD5 运算，得到 32 位小写加密后的字符串 `2929a4a0f01fd2da1fa7f49c346b2049`。

第二步：将字符串与 calg、pid 字符串组合，即 `2929a4a0f01fd2da1fa7f49c346b2049/12345678/2`（结果不包含 “/”），组合完成得到的字符串即为 upass 的值。

![混淆过程](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Mix.jpg)

通过 Postman 重放该请求，返回了“登录成功”的提示，表明该接口目前可用。接下来便可以开始制作捷径。

![Postman 重放](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Postman.jpg)

### 填充信息

> 感谢南区群友建议，使用 dr.com 可自动解析至本区域的认证地址。（20.11.19）  
> ~~因校内不同区域使用的认证网关服务器不一致，东区、中区用户在宿舍区与教学区需要使用不同的登录捷径，且无法使用场景自动化。（20.11.19）~~

登录校园网捷径下载链接：[iCloud](https://www.icloud.com/shortcuts/e8128c3d2ff9424ebcc81e0dbcd64167)  
~~按照不同区域，选择对应区域的捷径：~~[~~东区、中区~~](https://www.icloud.com/shortcuts/d55f5df720b64f93aec1022ad033b471)~~、~~[~~南区、教学楼~~](https://www.icloud.com/shortcuts/d4290ae388ba4e9e8a190dcd88288bad)~~。（20.11.19）~~

温馨提示：第一次使用捷径，需要完成以下步骤：  
1、快捷指令 APP 下载地址：[App Store](https://apps.apple.com/us/app/shortcuts/id1462947752)  
2、在 *设置 - 快捷指令* 中打开 *允许不受信任的快捷指令*，（开启前需要先在快捷指令中运行一次捷径）

在添加捷径时，请按照初始化流程的提示，填写校园网账号与混淆后的密码（即 2.3 步骤获取的 upass 字符串）。

![捷径初始化](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Shortcut_Initial.jpg)

添加 *登录校园网* 捷径后，请打开该捷径的 *网络访问权限* 与 *通知权限*（点击的 *登录校园网* 捷径文件右上角的 *更多*，继续点击 *更多*，在下方勾选 *允许访问互联网* 与 *通知提示* 两个选项）

![捷径权限设置](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Shortcut_Permissions.jpg)

填写与开启权限后，便完成了捷径的安装步骤，连接 Wi-Fi、运行捷径，如果成功登录，那么会弹出以下提示；而如果出错，则需要进入捷径的编辑界面，找到 *获取 URL 内容* 下方的文本框，查看错误提示，在目前接口未调整的情况下，多半为账号或密码填写错误导致无法登录。

![运行捷径](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Shortcut_Success.jpg)

### 场景自动化识别

除了简化操作以外，iOS 的快捷指令还提供了自动化操作，当触发某些条件后会运行指定操作。借助这个特性，我们可以设定为连接到校园 Wi-Fi 则自动运行登录捷径，减少操作。

![自动化场景](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Auto_Scene_Actions.jpg)

进入 *快捷指令* 首页的底部的 *自动化* 选项卡，点击右上方加号，选择 *创建个人自动化*。

在条件列表中选择 *无线局域网*，选中 *JYU-S、JYU-T、JYU-S(5G)、JYU-T(5G)* 四个无线网络，点击下一步。

在操作页，点击下方的 *搜索 App 和操作*，输入 *快捷指令*，选择 *运行快捷指令*，运行的捷径设置为 *登录校园网*。点击下一步并保存该自动化操作。

进入 *设置 - 无线局域网设置*，将设备连接到 JYU-S 等校园 Wi-Fi，如无意外，系统会弹出运行快捷指令的提示，点击运行，捷径会自动帮你完成身份认证的操作。

![连接 + 自动登录](https://cdn.i2c.icu/2020-11/Netlogin_Shortcut-Effect.jpg)

## 尾言

完成以上操作后，连接校园 Wi-Fi 的步骤会方便许多。文中只演示了 iOS 上的快捷操作，本捷径的原理是通过 HTTP POST 发送登录请求 + HTTP GET 判断联通情况，根据此方法可以迁移至其他工具，Android 系统可以使用 Tasker 执行，macOS 与 Windows 系统则可以采用 curl 执行的方式。

以上方法仅适用于使用 Dr.com 作为认证网关的院校，如果使用其它认证系统，接口会有所差异，请自行更改。

## 参考链接

- [如何利用 iOS 快捷指令自动化登录校园网](https://sspai.com/post/58189)
- [Wikipedia：Captive Portal](https://zh.wikipedia.org/wiki/%E5%BC%BA%E5%88%B6%E9%97%A8%E6%88%B7)
- [连接Wifi时自动弹出登录页面是如何做到的？](https://blog.csdn.net/bjbz%5Fcxy/article/details/95231192)