OpenWrt自動登錄Portal腳本


學校校園網最近更換了Portal登錄方式,由於實在是覺得麻煩便想使用腳本在路由器上實現自動登錄,然后路由器充當終端。

基礎信息

Router: Xiaomi MiWiFi Nano(R1CL)
Openwrt: 19.07.4 r11208-ce6496d796
Portal: 中國電信WiFi Portal v4.0
Browser: 90.0.4430.212 64-bit

提示

該腳本僅供參考,里面的Portal服務器/用戶名/密碼等參數均為虛擬,更多的是用來學習Linux腳本技巧。在這個過程中,我也遇到了很多問題,得到了好友Will醬的大力幫助,在此表示感謝。我踩的一些坑會在文末寫出來,避免其他人再踩坑。

獲得Portal參數

首先打開Portal頁面,先進行登錄后確認賬號密碼沒有輸錯。然后按F12調出開發者選項,切換到Network選項卡,在Throttling(丟包)選項中選擇Offline(離線),這時點擊登錄后下面數據流會立即出現一個紅色的數據,一般為login。右鍵,Copy,Copy as cURL(bash)。注意一定要復制為bash。

獲取動態參數

我們學校的Portal是靜態賬號,如果是手機號實時獲取驗證碼那種的就不用往下看了,基本沒用了。

但是它還有一個動態參數UserIP,這個我不清楚是否是有意而為之。

UserIP是DHCP直接分配的,相當於我們只要跟路由器詢問一下當前IP就行了。

OpenWrt中獲取IP地址的命令

ifconfig | grep -A1 "eth0.2" | grep 'inet addr' |awk -F ':' '{print $2}'|awk '{print $1}'

將上面命令的輸出內容作為變量存儲在腳本里面調用即可。

就結束了

是的,就結束了。

我給大家看一下成品

#!/bin/ash
sleep 5
UIP=`ifconfig | grep -A1 "eth0.2" | grep 'inet addr' |awk -F ':' '{print $2}'|awk '{print $1}'`
echo "============New Login===============" >> /root/bdlogin.log
date >> /root/bdlogin.log
echo ${UIP} >> /root/bdlogin.log
curl 'http://10.5.17.253:913/v0400/web/other/login' \
  -H 'Connection: keep-alive' \
  -H 'Pragma: no-cache' \
  -H 'Cache-Control: no-cache' \
  -H 'Accept: application/json, text/javascript, */*; q=0.01' \
  -H 'DNT: 1' \
  -H 'X-Requested-With: XMLHttpRequest' \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' \
  -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
  -H 'Origin: http://10.5.17.253:913' \
  -H "Referer: http://10.5.17.253:913/v0400/web/index?userip=${UIP}&authip=10.5.12.239&oraurl=null" \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6' \
  -H 'Cookie: com.ailk.aiip.modules.webgui.common.theme.CookieFilterThemeResolver.THEME=v_4_0; LogSuc=0' \
  --data-raw "commonUser=testbrandbandstu@edustuct&commonUserPwd=93042251&regArea=bj&userIp=${UIP}&authip=10.5.12.239&oraUrl=null" \
  --insecure >> /root/bdlogin.log

保存為腳本丟進啟動項就可以用了。

踩坑

  1. 開頭的sleep 5是為了防止路由器剛開機就執行腳本會有分不到DHCP的情況,這個后來測試的時候我覺得我是多慮了。

  2. >是覆寫,>>是寫入完了繼續在寫

  3. 用了變量的行一定要使用雙引號"I love ${THEPERSON} who is the best"

  4. 把命令的輸出結果作為變量的時候,命令本身外面需要套反引號(如上方代碼第五行)

  5. 每個人網卡配置可能不一樣,中間的eth0.2換成你對應的網卡就可以了

  6. 實際上curl里面的-H參數有些是可以刪的,不過懶得搞了,又不是不能用

其他說明

本人文章截至2021年5月22日僅在本人博客博客園簡書平台發布,其他平台均為未授權發布。


免責聲明!

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



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