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%253D1 后是我们获得的内网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实现家庭网络单线复用

 

posted on 2021-03-12 13:06  叶子在行动  阅读(9858)  评论(0编辑  收藏  举报

导航