首先谈谈我的网络环境
目前我们学校使用的是百兆网线接法,因此无需使用配置过高的路由器,百兆即可满足需求。
设备配置
- 主路由:斐讯K2路由器(使用高格固件)
- 旁路由:玩客云(运行OpenWrt系统)
网络接入方式
- 斐讯K2路由器通过 WAN 和 WAN2 连接校园网,并通过 DHCP 自动获取 IP 地址。
- 玩客云负责一些额外的性能处理、广告屏蔽、富强等功能。
设备图片
主要功能
- 主路由:提供网络连接并进行基本的路由功能。
- 旁路由:增强性能,屏蔽广告,优化网络环境等。
校园网自动认证的实现
在本文中,我将介绍如何使用旁路由实现校园网的自动认证。这个过程包括模拟登录请求,获取认证所需的 cookies,并用它们来验证和授权访问校园网络。
一、认证流程概述
校园网的认证通常涉及多个步骤,其中包括发送请求到认证服务器并获取必要的授权信息。我们需要:
1. 发送第一次登录请求:
通过 curl 请求到校园网的认证地址,登录并获取认证 cookies
。
2. 提取认证 token:
从返回的 cookies 中提取认证所需的 sysauth
信息,这是后续请求所必需的。
3. 获取网络接口信息:
从路由器的管理界面获取 WAN 和 WAN2 的 IP 地址,作为认证过程中需要传递的信息。
4. 执行自动登录:
使用提取的 IP 地址,通过调用 API 接口进行自动登录。
二、代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| timestamp=$(date +%s)
curl '校园网认证地址' \ -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \ -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \ -H 'Cache-Control: max-age=0' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Origin: 校园网认证地址' \ -H 'Referer: 校园网认证地址' \ -H 'Upgrade-Insecure-Requests: 1' \ -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0' \ --data-raw 'username=用户名&password=密码×tamp=时间戳&csrftoken=CSRF_TOKEN' \ --cookie-jar cookies.txt --insecure
cat cookies.txt
sysauth=$(grep -oP 'sysauth\s+\K[^\s]+' cookies.txt)
if [ -z "$sysauth" ]; then echo "Error: sysauth not found in cookies.txt" exit 1 else echo "Retrieved sysauth: $sysauth" fi
response=$(curl -s '网络接口状态获取地址?='$timestamp \ -b "sysauth=$sysauth" \ -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0')
wan_ip=$(echo "$response" | jq -r '.[] | select(.id == "wan") | .ipaddrs[0].addr') wan2_ip=$(echo "$response" | jq -r '.[] | select(.id == "wan2") | .ipaddrs[0].addr')
echo "WAN IP: $wan_ip" echo "WAN2 IP: $wan2_ip"
login_wan_response=$(curl '认证API地址' \ -H 'Accept: application/json, text/plain, */*' \ -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \ -H 'Access-Control-Allow-Origin: *' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/json;charset=UTF-8' \ -H 'Origin: 认证网站' \ -H 'Referer: 认证网站' \ -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0' \ --data-raw '{"username":"用户名","password":"密码","ifautologin":"0","channel":"4","pagesign":"secondauth","usripadd":"'$wan_ip'"}' \ --insecure)
if echo "$login_wan_response" | grep -q '"code": 200'; then echo "成功使用 WAN IP 登录" else echo "WAN IP 登录失败" exit 1 fi
login_wan2_response=$(curl '认证API地址' \ -H 'Accept: application/json, text/plain, */*' \ -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \ -H 'Access-Control-Allow-Origin: *' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/json;charset=UTF-8' \ -H 'Origin: 认证网站' \ -H 'Referer: 认证网站' \ -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0' \ --data-raw '{"username":"用户名","password":"密码","ifautologin":"0","channel":"4","pagesign":"secondauth","usripadd":"'$wan2_ip'"}' \ --insecure)
if echo "$login_wan2_response" | grep -q '"code": 200'; then echo "成功使用 WAN2 IP 登录" else echo "WAN2 IP 登录失败" exit 1 fi
|
三、自动认证的实现流程
步骤 1:登录旁路由管理界面,获取 sysauth
值
- 首先,通过 HTTP 请求登录旁路由管理界面,提交用户名和密码以获取认证所需的
cookies
和 sysauth
值。
- 通过
--cookie-jar
将返回的 Cookies 保存到 cookies.txt
文件中,然后解析文件提取 sysauth
。
代码片段如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| curl '旁路由登录地址' \ -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-raw 'username=路由用户名&password=路由密码' \ --cookie-jar cookies.txt --insecure
sysauth=$(grep -oP 'sysauth\s+\K[^\s]+' cookies.txt)
if [ -z "$sysauth" ]; then echo "Error: sysauth not found in cookies.txt" exit 1 fi
|
说明:
步骤 2:获取 WAN 和 WAN2 的 IP 地址
- 使用提取的
sysauth
值访问旁路由接口状态,解析返回数据中的 WAN 和 WAN2 的 IP 地址。
- 使用工具 jq 处理返回的 JSON 数据,提取所需字段。
代码片段如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| response=$(curl -s '网络接口状态地址?='$timestamp \ -b "sysauth=$sysauth" \ -H 'User-Agent: Mozilla/5.0')
wan_ip=$(echo "$response" | jq -r '.[] | select(.id == "wan") | .ipaddrs[0].addr') wan2_ip=$(echo "$response" | jq -r '.[] | select(.id == "wan2") | .ipaddrs[0].addr')
echo "WAN IP: $wan_ip" echo "WAN2 IP: $wan2_ip"
|
说明:
- 替换
路由用户名
和 路由密码
为实际的管理员登录信息。
- WAN 和 WAN2 是路由器中两个不同的网络接口,返回的 IP 地址用于下一步的认证请求。
步骤 3:使用获取的 IP 地址进行校园网认证
- 将获取的 WAN 和 WAN2 IP 地址分别用于校园网的认证请求。
- 模拟 POST 请求,提交认证所需的用户名、密码和其他参数。
代码片段如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| login_wan_response=$(curl '认证API地址' \ -H 'Content-Type: application/json;charset=UTF-8' \ --data-raw '{"username":"校园网用户名","password":"校园网密码","channel":"4","usripadd":"'$wan_ip'"}' \ --insecure)
if echo "$login_wan_response" | grep -q '"code": 200'; then echo "成功使用 WAN IP 登录" else echo "WAN IP 登录失败" exit 1 fi
login_wan2_response=$(curl '认证API地址' \ -H 'Content-Type: application/json;charset=UTF-8' \ --data-raw '{"username":"校园网用户名","password":"校园网密码","channel":"4","usripadd":"'$wan2_ip'"}' \ --insecure)
if echo "$login_wan2_response" | grep -q '"code": 200'; then echo "成功使用 WAN2 IP 登录" else echo "WAN2 IP 登录失败" exit 1 fi
|
说明:
- 替换
认证API地址
为校园网认证的实际接口地址。
- 替换
校园网用户名
和 校园网密码
为实际的认证信息。
四、完整脚本
最终完整脚本已经在 “代码实现” 部分提供,可以直接复制使用(记得替换为实际信息)。
希望这篇博客清晰地解释了校园网自动认证的过程,如果还有疑问,随时与我联系!