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實現家庭網絡單線復用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM