使用 Padavan 路由器实现校园网定时 Web 认证
Harry_M
2021-03-02 MuMu模拟器
①前言
前两天入手了一台Redmi AC2100 主要是拿来玩玩,顺便拿来捣鼓捣鼓校园网
②校园网
我们的校园网是基于 DR.com 的,分为电信,联通,移动和老师用的滨江学院四个运营商,除了老师的账号(好像还包括研究生的)24小时不断网,学生的账号每周日到周四23:00断网,周五和周六23:30断网,一个账号限制3个设备,但不会限制路由器的使用,而且部分电子产品连接网络必须要手动输入网址认证登录,米家设备想接入校园网更是不可能,所以就用路由器中继校园网达到一个账号多设备(三个以上)使用,并且可以接入米家设备(小爱同学)
校园网
③路由器
之前入过一个k2p,上个学期捣鼓了几天就带回家当主力路由器了,在恩山上看了感觉AC2100还挺香的,入手就刷了老毛子固件(刷固件就不进行赘述了),然后就开始了今天的重点:校园网
④思路
首先制作一个shell脚本,再通过定时让脚本不断运行,实现每天早上一觉睡醒就能直接使用校园网
⑤原理
我校有线网络 Web 认证的本质,就是发送一个 HTTP-POST 请求到认证服务器。因此,我们只需要用 curl 构造一个 POST 请求,并且在每次路由器重启后都发送一遍即可实现自动认证。
尽管不同学校的 POST 请求可能会有一些差别,但只要使用了 Web 认证,其原理和实现方法都是相同的。
⑥抓取登录要用的 POST 请求
首先打开Chrome,F12,打开校园网登录界面(未登录的),切换到Network 选项卡,勾选Preserve log(保存日志)
抓取post①
然后正常输入账号密码,选择运营商,点击登录。此时会出现一些HTTP请求,依次查看,找到Request Method 为POST 的日志文件,通常只有一个Request Method 为 POST 的日志文件,日志名里应该带有Login字段
找到POST日志
找到这个日志后,右键>Copy>Copy as cURL
copy curl
粘贴到文本编辑器中进行后续编辑
修改cURL以供永久使用
上一步我们copy到的cURL如下
可以发现每一行后面都有一个 ”\” ;每一个”-H” 前都有两个空格,首先删掉它们,使所有代码变成一行
其次将末尾的 --compressed --insecure 去除,然后将所有的单引号换成双引号。分析 cURL,前大半部分都是 HTTP 请求的标头(-H 后的内容),你可以酌情作一些修改或删除。
之后在第一行curl后添加 “-X POST”
最后的 --data 部分,才是我们要关注的重点。根据抓到的请求,DDDDD=%2C0%2C 后是我们的宽带账号,&upass=后是我们的宽带密码,%40后是运营商。同时,开头的 &wlanuserip=和&ip= 后是我们获得的内网 IP,&mac= 后是我们设备的 MAC 地址。
为了构造可永久使用的 cURL,首先要确保宽带账号、宽带密码是正确的。最后需要处理的,就是内网 IP 和设备 MAC 地址的问题。在 Padavan 的 Linux 环境下,你可以使用以下命令获取当前的内网 IP:
ifconfig | grep inet | grep -v inet6 | grep -v 127 | grep -v 192 | awk '{print $(NF-2)}' | cut -d ':' -f2
使用以下命令获取设备 MAC 地址:
ifconfig ra0 | grep HWaddr | awk '{print $NF}' | tr '[:upper:]' '[:lower:]' | tr ':' '-'
这时,我们就可以构造出一个永久可用的 cURL,如下:
下面是文字版
CURRENT_IP=$(ifconfig | grep inet | grep -v inet6 | grep -v 127 | grep -v 192 | awk '{print $(NF-2)}' | cut -d ':' -f2)
#linux
MAC_ADDRESS=$(ifconfig ra0 | grep HWaddr | awk '{print $NF}' | tr '[:upper:]' '[:lower:]' | tr ':' '-')
#linux
curl -X POST "查看链接{CURRENT_IP}&wlanacip=null&wlanacname=null&mac=${MAC_ADDRESS}&ip=${CURRENT_IP}&enAdvert=0&queryACIP=0&jsVersion=2.4.3&loginMethod=1" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" -H "Upgrade-Insecure-Requests: 1" -H "Origin: 查看链接 -H "Content-Type: application/x-www-form-urlencoded" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36" -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.9" -H "Referer: 查看链接 -H "Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" -H "Cookie: PHPSESSID=" --data-raw “DDDDD=%2C0%2C{账号}%40telecom&upass={密码}&R1=0&R2=0&R3=0&R6=0¶=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=&v6ip=“
在这里,我们用变量 CURRENT_IP 存储获得的内网 IP,用变量 MAC_ADDRESS 存储获得的 MAC 地址,并在 curl 命令中进行了替换。需要注意的是,要在 bash 命令的引号中使用变量的话,引号必须为双引号,而不能采用由 Chrome 复制得来的单引号。
⑦测试cURL
在认证页面上登出,在桌面新建一个shell文件,将之前的代码复制进去,将前两行
CURRENT_IP=$(ifconfig | grep inet | grep -v inet6 | grep -v 127 | grep -v 192 | awk '{print $(NF-2)}' | cut -d ':' -f2)
#linux
MAC_ADDRESS=$(ifconfig ra0 | grep HWaddr | awk '{print $NF}' | tr '[:upper:]' '[:lower:]' | tr ':' '-')
#linux
替换成
CURRENT_IP=$(ifconfig | grep inet | grep -v inet6 | grep -v 127 | cut -d ' ' -f2)
#macos
MAC_ADDRESS=$(ifconfig en0 | grep ether | awk '{print $NF}' | tr ':' '-')
#macos
然后运行此shell文件
(打开终端,cd Desktop → bash 文件名.sh)
这里 CURRENT_IP 和 MAC_ADDRESS 后的命令与上面的略有不同,是因为 macOS 下获取内网 IP 与 MAC 地址的命令与 Padavan 有一些区别。稍等一会,如果能正常上网就说明我们构造的cURL是OK的
⑧编写、测试脚本
为了可以自动化完成cURL认证,我们需要编写一个简单的shell脚本,这是我的一份参考
下面是文字版(大同小异)
CURRENT_IP=$(ifconfig | grep inet | grep -v inet6 | grep -v 127 | grep -v 192 | awk '{print $(NF-2)}' | cut -d ':' -f2)
#linux
MAC_ADDRESS=$(ifconfig ra0 | grep HWaddr | awk '{print $NF}' | tr '[:upper:]' '[:lower:]' | tr ':' '-')
#linux
curl -X POST "查看链接{CURRENT_IP}&wlanacip=null&wlanacname=null&mac=${MAC_ADDRESS}&ip=${CURRENT_IP}&enAdvert=0&queryACIP=0&jsVersion=2.4.3&loginMethod=1" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" -H "Upgrade-Insecure-Requests: 1" -H "Origin: 查看链接 -H "Content-Type: application/x-www-form-urlencoded" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36" -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.9" -H "Referer: 查看链接 -H "Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" -H "Cookie: PHPSESSID=" --data-raw “DDDDD=%2C0%2C{账号}%40telecom&upass={密码}&R1=0&R2=0&R3=0&R6=0¶=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=&v6ip=“
脚本保存为xyw.sh ,连接路由器,用winscp导入xyw.sh到路由器 /etc/storage 目录下
再执行以下命令赋予脚本执行权限:chmod +x xyw.sh
打开SSH终端会话窗口,输入 . /etc/storage/xyw.sh(点+空格+脚本地址),测试是否可以成功连接网络
⑨配置自动化连接
在 自定义设置 > 脚本 > 在 WAN 上行/下行启动后执行 的内容后添加一行:/etc/storage/xyw.sh,并点击页面最下方的 应用本页面设置 即可。
如果还不放心,那么还可以借助 Crontab 每隔一段时间检查认证状态并自动认证,只需要打开 系统管理 > 服务 > Cron 守护程序,然后在 计划任务 中填入 crontab 命令并应用设置即可:
此时,路由器就可以自动完成校园有线网的认证过程了。
⑩参考及感谢
查看链接
路由器小白一只,如有错误还请大佬们指正
最后py一下小编们@阿酷 @alexkillers @好兆头 @梨子 @酷安小编
#路由器# #校园网# #红米AC2100#