openwrt实现校园网自动登录
参考作者:https://sspai.com/post/57882 使用 Padavan 路由器实现校园网自动 Web 认证 https://www.shangmayuan.com/a/cc4b7893893f45448de62e29.html openwrt下实现校园网的web认证 本文:支持原创作者
开始:准备openwrt系统 http://www.openwrt.org.cn/ 微pe工具箱 http://www.wepe.com.cn/ 写盘工具physdrivewrite https://m0n0.ch/wall/physdiskwrite.php 下载固件 koolshare.cn 选择固件,寻找想要的固件(https://firmware.koolshare.cn/LEDE_X64_fw867/%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%BD%AC%E7%9B%98%E6%88%96PE%E4%B8%8B%E5%86%99%E7%9B%98%E4%B8%93%E7%94%A8/(参考选择)) 默认密码:koolshare
另一种方法:OpenWrt下载: https://drive.google.com/drive/folders/1pdJuzpwuhdq6vnNOOvtb5r-JB7Z5bw38 软路由后台密码:netflixcn.com 微PE工具 (64位): https://pan.baidu.com/share/init?surl=OOHZMcm-rUQA4piSgtWBiw提取码: hmts 微PE工具 (32位) : https://pan.baidu.com/share/init?surl=ovJC7RCLKDnY_1nEX9zV3w提取码: 9mup IMG写盘工具: https://drive.google.com/file/d/1ZGWFPR_SFhLaYrHRPsFMjASozoh1-s70/view?usp=sharing (自行寻找梯子)
正文:安装好系统,调整openwrt的路由地址:修改配置文件 vi /etc/config/network 文件
(可参考 https://www.pianshen.com/article/38161294835/ OpenWrt 刷机后的网络配置)
修改文件时,要设置桥接,option type 'bridge' ,才能做路由器管理地址
网卡:eth0或eth1 , option ifname ‘eth0’
修改好配置文件后,重启命令为reboot 关机命令为 poweroff 重启网络命令为 service network restart 或 /etc/init.d/network restart
需要重启系统或重启网络
调整好后浏览器输入后台管理地址,192.168.1.111,输入账号密码,登录进行配置网络
现在,需要进行脚本文件的获取:
用windows系统和chrom浏览器,登录到web校园网认证界面 :
原理
我,校园有线网络Web认证的本质,就是发送一个HTTP-POST请求到认证服务器。因此,我们只需要用 curl
构造一个POST请求,并且在每次重新启动后都发送一遍即可实现自动认证。
尽管不同学校的POST请求可能会有一些区别,但只要使用了Web认证,其原理和实现方法都是相同的。
抓取登录所用的HTTP-POST请求
在这里,我们使用Chrome的开发者工具来抓取请求。重启路由器后打开认证页面,按 command - option - I
调出开发者工具,切换到 Network
选项卡并重置 Preserve log
。
:开发者工具
随后,我们正常输入用户名和密码登录。此时,开发者工具中会出现一些HTTP请求。我们需要在请求中寻找登录所需的项。一般来说,的该项 Request URL
会含有 login
等字段,御姐 Request Method
为 POST
。
登录网络的HTTP-POST请求
在找到这个请求后,我们在请求上垂直提示,选择 Copy > Copy as cURL
。
将请求复制为cURL
将复制到的cURL粘贴到任意文本编辑器中,以待进一步的处理。
待处理的cURL
修改cURL有助于永久可用
以我校为例,在上一步中我们获得的cURL如下:
curl 'http://172.25.249.8/eportal/InterFace.do?method=login' -H 'Connection: keep-alive' -H 'Origin: http://172.25.249.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36' -H 'DNT: 1' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Accept: */*' -H 'Referer: http://172.25.249.8/eportal/index.jsp?userip=100.66.137.149&wlanacname=&nasip=171.88.130.251&wlanparameter=78-4f-43-4c-f0-01&url=http://123.123.123.123/&userlocation=ethtrunk/3:691.3201' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-CN,zh-TW;q=0.9,zh;q=0.8,en;q=0.7' -H 'Cookie: EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_AUTO_LAND=; EPORTAL_USER_GROUP=null; JSESSIONID=684400A38AA6F9CAF582BD43C001BDE3' --data 'userId=<宽带账号>&password=<宽带密码>&service=&queryString=userip%253D100.66.137.149%2526wlanacname%253D%2526nasip%253D171.88.130.251%2526wlanparameter%253D78-4f-43-4c-f0-01%2526url%253Dhttp%253A%252F%252F123.123.123.123%252F%2526userlocation%253Dethtrunk%252F3%253A691.3201&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=false' --compressed --insecure
将首先末尾的 --compressed --insecure
去除。分析卷曲,前大半部分都是HTTP请求的标头(-H
后的内容),你可以酌情作一些修改或删除。把比如 -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'
对划线 -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"
就能伪装的Windows分类中翻译的用户代理等等,在此不多多余述。
最后的 --data
部分,才是我们要关注的重点。根据抓到的请求,userId=
后是我们的宽带账号,password=
后是我们的宽带密码。同时,后面的 userip%253D
1 后是我们获得的内网IP,wlanparameter%253D
后是我们设备的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)
MAC_ADDRESS=$(ifconfig ra0 | grep HWaddr | awk '{print $NF}' | tr '[:upper:]' '[:lower:]' | tr ':' '-')
curl -X POST "http://172.25.249.8/eportal/InterFace.do?method=login" -H "Connection: keep-alive" -H "Origin: http://172.25.249.8" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" -H "DNT: 1" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: */*" -H "Referer: http://172.25.249.8/eportal/index.jsp?userip=${CURRENT_IP}&wlanacname=&nasip=171.88.130.251&wlanparameter=${MAC_ADDRESS}&url=http://baidu.com/&userlocation=ethtrunk/3:691.3201" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: zh-CN,zh;q=0.9,zh;q=0.8,en;q=0.7" -H "Cookie: EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_AUTO_LAND=; EPORTAL_USER_GROUP=null; JSESSIONID=2B36EA2F20A0CE7361D592CE7DBDFED3" --data "userId=<宽带账号>&password=<宽带密码>&service=&queryString=userip%253D${CURRENT_IP}%2526wlanacname%253D%2526nasip%253D171.88.130.251%2526wlanparameter%253D${MAC_ADDRESS}%2526url%253Dhttp%253A%252F%252Fbaidu.com%252F%2526userlocation%253Dethtrunk%252F3%253A691.3201&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=false"
#记得修改宽带账号,宽带密码
在这里,我们用变量CURRENT_IP
存储获得的内网IP,用变量 存储获得的内网IP, MAC_ADDRESS
并在curl命令中进行了替换。需要注意的是,要在bash命令的引号中使用变量的话,引号必须为双引号,而不能采用由Chrome复制得来的单引号。
测试cURL
自己的有所不同:没有本机ip的地址,只需要删除url中的 --compressed --insecure
,前面加上curl -X POST ,便可以在cmd中进行校园网web自动认证
重启路由器或在认证页面上登出,打开macOS的终端,运行以下三行命令:
CURRENT_IP=$(ifconfig | grep inet | grep -v inet6 | grep -v 127 | cut -d ' ' -f2)
MAC_ADDRESS=$(ifconfig en0 | grep ether | awk '{print $NF}' | tr ':' '-')
curl -X POST "http://172.25.249.8/eportal/InterFace.do?method=login" -H "Connection: keep-alive" -H "Origin: http://172.25.249.8" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" -H "DNT: 1" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: */*" -H "Referer: http://172.25.249.8/eportal/index.jsp?userip=${CURRENT_IP}&wlanacname=&nasip=171.88.130.251&wlanparameter=${MAC_ADDRESS}&url=http://baidu.com/&userlocation=ethtrunk/3:691.3201" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: zh-CN,zh;q=0.9,zh;q=0.8,en;q=0.7" -H "Cookie: EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_AUTO_LAND=; EPORTAL_USER_GROUP=null; JSESSIONID=2B36EA2F20A0CE7361D592CE7DBDFED3" --data "userId=<宽带账号>&password=<宽带密码>&service=&queryString=userip%253D${CURRENT_IP}%2526wlanacname%253D%2526nasip%253D171.88.130.251%2526wlanparameter%253D${MAC_ADDRESS}%2526url%253Dhttp%253A%252F%252Fbaidu.com%252F%2526userlocation%253Dethtrunk%252F3%253A691.3201&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=false"
#记得修改宽带账号,宽带密码
这里 CURRENT_IP
和 MAC_ADDRESS
后的命令与上面的略有不同,是因为macOS下获取内网IP与MAC地址的命令与Padavan有一些区别。稍等后,结果中出现了 success
的提示,并且网络可以正常连接了,就说明我们构造的cURL是可用的。
测试表明cURL可用
编写脚本
为了自动化完成curl认证的过程,我们需要编写一个简单的shell脚本,以下是一份参考:
#!/bin/sh
logger "开始检测网络认证状态"
KEYWORD=$(curl -s http://baidu.com | grep "NextURL")
if [[ ${KEYWORD} != "" ]]; then
logger "检测到尚未认证,尝试自动认证"
CURRENT_IP=$(ifconfig | grep inet | grep -v inet6 | grep -v 127 | grep -v 192 | awk '{print $(NF-2)}' | cut -d ':' -f2)
MAC_ADDRESS=$(ifconfig ra0 | grep HWaddr | awk '{print $NF}' | tr '[:upper:]' '[:lower:]' | tr ':' '-')
LOGIN_STATUS=$(curl -s -X POST "http://172.25.249.8/eportal/InterFace.do?method=login" -H "Connection: keep-alive" -H "Origin: http://172.25.249.8" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" -H "DNT: 1" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: */*" -H "Referer: http://172.25.249.8/eportal/index.jsp?userip=${CURRENT_IP}&wlanacname=&nasip=171.88.130.251&wlanparameter=${MAC_ADDRESS}&url=http://baidu.com/&userlocation=ethtrunk/3:691.3201" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: zh-CN,zh;q=0.9,zh;q=0.8,en;q=0.7" -H "Cookie: EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_AUTO_LAND=; EPORTAL_USER_GROUP=null; JSESSIONID=2B36EA2F20A0CE7361D592CE7DBDFED3" --data "userId=<宽带账号>&password=<宽带密码>&service=&queryString=userip%253D${CURRENT_IP}%2526wlanacname%253D%2526nasip%253D171.88.130.251%2526wlanparameter%253D${MAC_ADDRESS}%2526url%253Dhttp%253A%252F%252Fbaidu.com%252F%2526userlocation%253Dethtrunk%252F3%253A691.3201&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=false") # 含有变量时只能使用双引号
SUCCESS=$(echo ${LOGIN_STATUS} | grep success)
if [[ ${SUCCESS} != "" ]]; then
logger "自动认证成功"
else
LOGIN_STATUS=$(echo ${LOGIN_STATUS} | cut -d ',' -f3 | cut -d '"' -f4)
logger "自动认证失败: ${LOGIN_STATUS}"
fi
else
logger "检测到已经认证"
fi
#记得修改宽带账号,宽带密码
curl -s http://baidu.com
如果尚未认证,curl返回的结果如下:在脚本开始的时候,我们通过 来检测是否已经通过认证。
$ curl -s http://baidu.com # -s, 不输出任务进度
<!--
<?xml version="1.0" encoding="UTF-8"?>
<WISPAccessGatewayParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.acmewisp.com/WISPAccessGatewayParam.xsd">
<Proxy>
<MessageType>110</MessageType>
<NextURL>http://172.25.249.8/eportal/index.jsp?userip=100.66.137.149&wlanacname=&nasip=171.88.130.251&wlanparameter=78-4f-43-4c-f0-01</NextURL>
<ResponseCode>200</ResponseCode>
</Proxy>
</WISPAccessGatewayParam>
-->
如果已经认证,curl返回的结果如下:
$ curl -s http://baidu.com
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
我们可以观察到,在尚未认证时,返回的结果中包含关键字 NextURL
(当然,其他与已认证时返回结果不同的内容都可以)。因此,我们使用 KEYWORD
变量来判断认证状态,如果尚未认证,KEYWORD
就不为空,反之 KEYWORD
就为空。
因此,您可以在认证前,认证后分别执行 curl http://baidu.com
,找到前者包含而又没有的特征性内容,将其放在 grep
命令后。
如果尚未认证,脚本就会使用 curl
发送HTTP-POST请求进行认证,并检查返回的结果中是否有 success
字样。如果有,则代表认证成功;如果没有,脚本可以记录下返回的提示信息。
将脚本上传到路由器
:macOS终端,使用ssh连接到路由器:
ssh admin@192.168.123.1 # Padavan 的默认网关 IP 为 192.168.123.1,用户名为 admin
输入默认密码 admin
即可ssh登录到路由器。随后执行以下命令:
cd /etc/storage # 进入存储脚本的目录
vi auto_login.sh # 新建并编辑自动登录脚本
在vi编辑器下,按 i
进入编辑模式,将在准备好的脚本粘贴上去之前,然后按 esc
退出编辑模式,然后输入 :wq
并回车即可保存。再执行以下命令脚本执行权限:
chmod +x auto_login.sh
完成后,执行 exit
即可通过ssh连接。
给脚本文件加入开机自动运行
在openwrt中添加开机自动运行脚本
参考文章:https://www.right.com.cn/forum/thread-4055721-1-1.html openwrt 如何添加软件自启动
网页登录openwrt系统
系统,启动项,往下拉,本地启动脚本
这2个命令放到 exit 0 的上面
至此web自动登录认证完成
设置网络接口
参考文章:https://blog.csdn.net/u012176686/article/details/112035049 解决RaspberryPi刷OpenWrt做硬路由时LAN口无网络问题
因为防火墙和转发的问题,两个网口的网络不能共享,需要配置防火墙
其他参考链接:
https://blog.csdn.net/liberal_wind/article/details/89882777 一种在openwrt路由器突破校园网web认证设备限制的方法(对swu校园网的一次实践)
https://blog.csdn.net/YuZhiHui_No1/article/details/41595355 Linux下的网络配置命令
https://blog.csdn.net/a1094174619/article/details/83068307 openwrt下实现校园网的web认证
https://www.right.com.cn/forum/thread-4055721-1-1.html openwrt 如何添加软件自启动
https://www.pianshen.com/article/38161294835/ OpenWrt 刷机后的网络配置
https://www.pianshen.com/article/52561308228/ OpenWRT 配置远程ssh及访问WEB页面
https://openwrt.org/zh-cn/doc/howto/firstlogin?rev=1528314994 openwrt登录问题
https://jingyan.baidu.com/article/e75aca858397c8542fdac66e.html?qq-pf-to=pcqq.c2c OpenWrt路由器怎样使用密钥登录路由器SSH后台?
https://blog.csdn.net/u012349679/article/details/78182273 openWRT设置中文admin后台及配置SSH登录
http://blog.chinaunix.net/uid-27194309-id-3848723.html openwrt下安装curl, 占用近1M空间, 常用命令集锦
https://www.shangmayuan.com/a/cc4b7893893f45448de62e29.html openwrt下实现校园网的web认证
https://blog.csdn.net/founderznd/article/details/84316921 利用Vlan实现家庭网络单线复用