网页认证的原理就是 POST 登录信息而已……原理上,就是用 curl 发一个 POST。基于此想法,我们使用shell脚本搭配curl等命令即可完成

注意:本文仅仅适用于锐捷WEB认证系统,简单来说就是连接校园网后,打开的页面类似于下图所示
锐捷WEB认证系统

准备工具

  • 一个支持shell脚本的路由器(Padavan/LuCI/openwrt等)-->本文不涉及刷入路由器固件,请自行搜索!
  • 一点点Linux知识

联网脚本

一般来说,如果校园网不出什么问题,那么一次认证大概能持续一天的有效期,并且大多数自动掉线集中在凌晨时间段。
所以,我们需要一个每天至少一次的定时任务(建议6次为佳,分别位于0/4/8/12/16/20点),在任务里执行一次连接校园网的路由器脚本,即可确保正常情况下路由器在我们用的时段一直不会断网,不需要我们自己重连。
脚本来自 RuijiePortalLoginShellScript (已经删库,本文发文时依然适用请自行测试)

#!/bin/bash

#If received parameters is less than 2, print usage
if [ "${#}" -lt "2" ]; then
  echo "Usage: ./ruijie_template.sh username password"
  echo "Example: ./ruijie_template.sh 201620000000 123456"
  exit 1
fi

#Exit the script when is already online, use www.google.cn/generate_204 to check the online status
captiveReturnCode=`curl -s -I -m 10 -o /dev/null -s -w %{http_code} http://www.google.cn/generate_204`
if [ "${captiveReturnCode}" = "204" ]; then
  echo "You are already online!"
  exit 0
fi

#If not online, begin Ruijie Auth

#Get Ruijie login page URL
loginPageURL=`curl -s "http://www.google.cn/generate_204" | awk -F \' '{print $2}'`

#Structure loginURL
loginURL=`echo ${loginPageURL} | awk -F \? '{print $1}'`
loginURL="${loginURL/index.jsp/InterFace.do?method=login}"

service="这里填写你的service"
queryString="这里填写你的queryString"
queryString="${queryString//&/%2526}"
queryString="${queryString//=/%253D}"

#Send Ruijie eportal auth request and output result
if [ -n "${loginURL}" ]; then
  authResult=`curl -s -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36" -e "${loginPageURL}" -b "EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_AUTO_LAND=; EPORTAL_USER_GROUP=; EPORTAL_COOKIE_OPERATORPWD=;" -d "userId=${1}&password=${2}&service=${service}&queryString=${queryString}&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=false" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" "${loginURL}"`
  echo $authResult
fi

脚本使用教程

获取queryString

打开锐捷WEB认证页面,复制地址栏中的地址,类似如下:

http://10.30.45.5/eportal/index.jsp?wlanuserip=bfc5fd9c00a6197ea7b82b43dad1711c&wlanacname=b7a6beb213bddb7cb279117507fd9505&ssid=&nasip=db04d267b66e6635f95593ef2cee30c6&snmpagentip=&mac=ba26bc1b0bd0d7ac1225ee4408d63188&t=wireless-v2&url=709db9dc9ce334aa02a9e1ee58ba6fcf3bc3349e947ead368bdd021b808fdbac30c65edaa96b0727&apmac=&nasid=b7a6beb213bddb7cb279117507fd9505&vid=9ce748c8152aa2fa&port=9dd8ca80f39c412a&nasportid=5b9da5b08a53a54081823d758e3b7d1119bbe4d5641d86a23599854bc00a2201d06dc63252a9c09b

其中wlanuserip=***&wlanacname=***&ssid=&nasip=***&snmpagentip=&mac=***&t=wireless-v2&url=***&apmac=&nasid=***&vid=***&port=***&nasportid=***就是我们所需的 queryString参数。每个学校都不一样,请自己获取,勿照抄!

获取service的参数

请务必先查看WEB页面此处,不同学校很可能不一样,如图我校为校园网用户&移动用户,有些学校为中国移动&中国电信等等,请务必获取自己的参数,否则运行脚本提示用户不允许此操作
获取service的参数
将找到的参数,在 UrlEncode编码/解码 这个网页,通过两次UrlEncode编码后的结果,写入到service的参数
两次UrlEncode编码

修改脚本并保存,只需要修改下面两行

#参数请按照上面教程自己获取,勿照抄
service="%25E7%25A7%25BB%25E5%258A%25A8%25E7%2594%25A8%25E6%2588%25B7"
queryString="wlanuserip=bfc5fd9c00a6197ea7b82b43dad1711c&wlanacname=b7a6beb213bddb7cb279117507fd9505&ssid=&nasip=db04d267b66e6635f95593ef2cee30c6&snmpagentip=&mac=ba26bc1b0bd0d7ac1225ee4408d63188&t=wireless-v2&url=709db9dc9ce334aa02a9e1ee58ba6fcf3bc3349e947ead368bdd021b808fdbac30c65edaa96b0727&apmac=&nasid=b7a6beb213bddb7cb279117507fd9505&vid=9ce748c8152aa2fa&port=9dd8ca80f39c412a&nasportid=5b9da5b08a53a54081823d758e3b7d1119bbe4d5641d86a23599854bc00a2201d06dc63252a9c09b"

将上述替换后的脚本内容保存到名为ruijie.sh的文件中,UTF-8编码。

上传脚本到路由器并赋予执行权限

将脚本刷入padavan固件闪存中

本文演示的是老毛子padavan固件,openwrt固件请参考!基本差不多
请注意老毛子padavan路由器重启后存储在内存中的内容会失效的特点,参考github文章修改使其永久保存。

请注意,padavan与openwrt不同,除了外接U盘外其所有可写的目录均是在RAM里面,也就是只要重启,所有修改的内容都会丢失。对于没有U盘接口的路由器,上传后再重启就得重新上传。为了防止插件在重启后丢失,网络提供了这样的一种方法,具体效果请自测:
把插件文件上传到路由器的/etc/storage目录
弄完之后执行:
mtd_storage.sh save
系统会把/etc/storage目录下的内容压缩打包,保存进内存中的区块,重启就不消失了。
别忘记修改参数中的路径。

执行脚本测试

/etc/storage/ruijie.sh 校园网账号 密码
#出现success字样,即成功,这时候连接路由器wifi,已经可以上网!

保存为定时任务执行

我们需要保存两个定时任务,一个为路由器启动后运行脚本,一个为定时执行防止被强制下线!
#路由器启动后运行脚本
#自动执行登录ruijie校园网
/etc/storage/ruijie.sh 校园网账号 密码
#定时执行
0 */6 * * * /etc/storage/ruijie.sh 校园网账号 密码
40 5 * * * /etc/storage/ruijie.sh 校园网账号 密码

①路由器启动后运行脚本
高级设置-自定义设置-自定义用户脚本-在路由器启动后执行
路由器启动后运行脚本
②定时执行防止被强制下线
系统管理-服务-计划任务 (Crontab)
定时执行防止被强制下线
修改后记得保存配置!
随后就不用自己再动手连网了,断开路由器电源,重新插上后一会儿就有网。
Enjoy!!

参考文章

连网脚本
使用 Padavan 路由器实现校园网自动 Web 认证
Dr.COM校园网多设备解决方案——路由器 Padavan/LuCI 固件自动网页认证+Telegram Bot 定时发送连接情况
RuijiePortalLoginShellScript

最后修改:2024 年 03 月 31 日
如果觉得我的文章对你有用,请随意赞赏