国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 校園網(wǎng)自動(dòng)登錄全平臺(tái)解決方案

校園網(wǎng)自動(dòng)登錄全平臺(tái)解決方案

時(shí)間:2023-04-18 16:50:02 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-04-18 16:50:02 來源:網(wǎng)站運(yùn)營(yíng)

校園網(wǎng)自動(dòng)登錄全平臺(tái)解決方案:

TL;DR

最近考研復(fù)習(xí)有點(diǎn)枯燥,折騰一些好玩的。學(xué)校這個(gè)校園網(wǎng)有點(diǎn)腦殘,應(yīng)該是根據(jù) IP 和 MAC 地址共同判斷是否同一設(shè)備,如今不管是 Android 、iOS 還是 Windows 都默認(rèn)開啟了隨機(jī) MAC 的功能,說的是為了防止不同 WiFi 網(wǎng)絡(luò)對(duì)設(shè)備的追蹤,這無可厚非,還是開著比較好,而且我研究了下,這個(gè)隨機(jī) MAC 應(yīng)該是針對(duì)不同 WiFi,相同 WiFi 使用的 MAC 還是一樣的,不過我們學(xué)校宿舍和教學(xué)樓的 WiFi 名不一樣。

但還沒完,不僅如此,如果只是在宿舍里,路由器或者說是光貓雖然采用 DHCP 分配 IP,但畢竟設(shè)備數(shù)量有限,學(xué)過計(jì)網(wǎng)的應(yīng)該知道 DHCP 雖然是動(dòng)態(tài)分配 IP,但其實(shí)每次重新分配的時(shí)候會(huì)優(yōu)先分配相同的 IP,除非該 IP 已經(jīng)被分配了,基本上不會(huì)出現(xiàn)重新登錄的情況,比如長(zhǎng)期放在宿舍的電腦。但手機(jī)不一樣,經(jīng)常是教學(xué)樓和宿舍兩頭跑,一到教學(xué)樓,噩夢(mèng)就開始, 有時(shí)候你換一個(gè)教室都會(huì)讓你重新登錄。

由于復(fù)習(xí)的時(shí)候,我的 iPad 和手機(jī)都需要連接校園網(wǎng),所以我不得不讓 iPad 在登錄校園網(wǎng)的時(shí)候偽裝成電腦(這個(gè)很簡(jiǎn)單,等會(huì)再說),但這樣會(huì)導(dǎo)致下次打開電腦的時(shí)候就無法自動(dòng)連接上校園網(wǎng)了。所以折騰來折騰去,每個(gè)平臺(tái)都折騰出了連接校園網(wǎng)自動(dòng)登錄的方案(macOS 有方案未測(cè)試)。

順便說下宿舍安裝路由器的問題,很簡(jiǎn)單,我們學(xué)校沒做限制,光貓的 LAN 口連接上路由器的 WAN 口,再連接上路由器的 WiFi 同樣登錄一次,這樣就把校園網(wǎng)帳號(hào)綁定到路由器了。但是沒啥意義,畢竟帶寬就那么點(diǎn),不劃算,除非你設(shè)備特別多。

實(shí)現(xiàn)連接校園網(wǎng)自動(dòng)登錄需要分為兩步

  1. 檢測(cè)連接到校園網(wǎng)
  2. 執(zhí)行登錄腳本

一鍵登錄腳本

本著解耦的原則,盡量做到登錄與檢測(cè)互不關(guān)聯(lián),可以分開工作,也方便一套代碼跑所有平臺(tái)。但是吧,理想很豐滿,現(xiàn)實(shí)很骨感,電腦端可以很方便的使用 Python 腳本,手機(jī)上就不行了,就算使用 Nodejs,也會(huì)帶來很大的成本(電量,內(nèi)存)開銷。當(dāng)然這個(gè)登錄邏輯很簡(jiǎn)單,手機(jī)上使用快捷指令和 MacroDroid 也能輕松實(shí)現(xiàn)。

登錄原理

我們學(xué)校是 Web 登錄,只需要發(fā)送一個(gè) GET 請(qǐng)求即可,當(dāng)然更多的學(xué)校是使用 POST 請(qǐng)求,更加安全。瀏覽器登錄的時(shí)候直接 F12 打開開發(fā)者工具,找到類似于這么一長(zhǎng)串的連接,如果登錄時(shí)會(huì)跳轉(zhuǎn),建議打開頂上的 Preserve log 選項(xiàng),這樣跳轉(zhuǎn)出去了再返回這些信息還在。

http://192.168.200.2:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=1&user_account=%2C0%2Cxxxxxxx%40cmcc&user_password=Tender520Family&wlan_user_ip=10.17.163.90&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3&v=5407 找到后劃到最下邊,可以格式化參數(shù),點(diǎn)擊 view URL encoded 選項(xiàng),可以解碼 URL,可以正確顯示標(biāo)點(diǎn)符號(hào)。比如 , 是 %2C, @ 是 %40




參數(shù)分析

主要是

這三個(gè)參數(shù)比較重要,需要自己填寫,其他參數(shù)不用改,jsVersion 和 v 這兩個(gè)參數(shù)甚至可以不需要,這需要自己嘗試,看哪些參數(shù)省略掉同樣可以登錄。至于為什么 wlan_user_mac 全 0,處于待填充的狀態(tài),我嘗試過把這個(gè) 參數(shù)修改為非本機(jī) mac,無法登錄。有時(shí)候這個(gè) http 請(qǐng)求會(huì)讀取 mac 地址,比如下面這個(gè),不過都能登錄。




腳本邏輯

腳本主要用來獲取 ip 和發(fā)送 http 請(qǐng)求,通過分析返回值來判斷是否登錄成功,如果該帳號(hào)已登錄,就遞歸調(diào)用登錄函數(shù)來重新登錄。 返回值主要有以下幾個(gè)

這里的返回值為 jsonp,即返回的是一個(gè)函數(shù),以達(dá)到跨域的目的

腳本編寫

Windows、Linux、Mac

均使用 Python 腳本,你需要安裝 Python 的運(yùn)行環(huán)境。

def get_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] s.close() return ipdef login(ip, args): args.ip = ip args.device = 0 if args.device == 'pc' else 1 res = requests.get('http://192.168.200.2:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=1&user_account=%2C{device}%2C{account}%40{operator}&user_password={password}&wlan_user_ip={ip}&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name='.format_map(vars(args))) if '"msg":""' in res.text: print('當(dāng)前設(shè)備已登錄') return elif r'/u8ba4/u8bc1/u6210/u529f' in res.text: print('登錄成功') return elif 'bGRhcCBhdXRoIGVycm9y' in res.text: print("密碼錯(cuò)誤") return elif 'aW51c2UsIGxvZ2luIGFnYWluL' in res.text: login(get_ip(), get_args()) else: print("您可能欠費(fèi)停機(jī)") returnPOST 請(qǐng)求和 GET 請(qǐng)求的區(qū)別就是 GET 請(qǐng)求會(huì)把所有參數(shù)寫在鏈接里,這樣直接訪問這個(gè)連接就可以登錄了(當(dāng)然,還需要?jiǎng)討B(tài)獲取 IP 地址)。寫腳本的時(shí)候就很方便,直接復(fù)制這個(gè)鏈接,GET 一下就行了。而 POST 請(qǐng)求的鏈接很短,請(qǐng)求的參數(shù)會(huì)單獨(dú)列出來。首先要看請(qǐng)求頭中的 Content-Type 字段

form 表單在校園網(wǎng)登錄里應(yīng)該比較普遍,我隨便寫一下,自己根據(jù)實(shí)際情況改就行了。

#登錄地址post_addr="http://xxx.xxx"#構(gòu)造頭部信息post_header={ 'Content-Type': 'application/x-www-form-urlencoded',}#構(gòu)造登錄數(shù)據(jù)post_data={ 'user_account': '1658xxx', 'user_password': 'xxxxxxx'} #發(fā)送post請(qǐng)求登錄網(wǎng)頁(yè)requests.post(post_addr,data=post_data,headers=post_header)為了使用方便,腳本做成了命令行輸入。在 Windows 上,你可以再進(jìn)一步封裝這個(gè)命令成 bat 文件來實(shí)現(xiàn)點(diǎn)擊執(zhí)行,這個(gè)后面再說。

# 運(yùn)營(yíng)商默認(rèn)為 cmcc,偽裝設(shè)備默認(rèn)為 pc,這兩個(gè)選項(xiàng)可以不用寫> python main.py 1658xxxx passxxxx -o cmcc -d pc> python main.py -h usage: main.py [-h] [-o {cmcc,telecom}] [-d {pc,phone}] account password positional arguments: account password optional arguments: -h, --help show this help message and exit -o {cmcc,telecom}, --operator {cmcc,telecom} operator, cmcc or telecom -d {pc,phone}, --device {pc,phone} fake device, phone or pc

iOS

iOS 有個(gè)強(qiáng)大的工具——快捷指令,這個(gè)很簡(jiǎn)單,直接導(dǎo)入就行了,要用 Safari 打開鏈接導(dǎo)入,導(dǎo)入的時(shí)候會(huì)填寫帳號(hào)密碼等等。如果無法導(dǎo)入,需要在設(shè)置-快捷指令-打開運(yùn)行不受信任的快捷指令選項(xiàng)。如果是 POST 請(qǐng)求下面這樣,可以把這個(gè)快捷指令添加到桌面,也可以當(dāng)作小部件。




Android

可能需要 Root 安裝 Busybox,也有不需要 Root 的方法,等我有空再完善。
Android 也有一個(gè)強(qiáng)大的工具——MarcoDriod,使用邏輯和快捷指令一毛一樣,說實(shí)話是要比快捷指令好用一點(diǎn)。下載文件(校園網(wǎng).category)選擇 MacroDriod 打開就可以完成導(dǎo)入。<自動(dòng)登錄校園網(wǎng)>是用來檢測(cè)是否連接到校園網(wǎng)的,一旦連接就調(diào)用<一鍵登錄校園網(wǎng)>

導(dǎo)入后需要填寫以下幾個(gè)變量

不過如果是 POST 請(qǐng)求的話,我用的是 Shll 腳本來執(zhí)行 curl 命令,只需要

curl -X POST -d 'user_account=1658xxx&user_password=passxxxx' http://xxx.xxx

檢測(cè)連接到校園網(wǎng)

如何檢測(cè)連接到校園網(wǎng)呢,我的方案是判斷連接 WiFi 的名稱,比如 CQUPT 的 WiFi 都有 CQUPT,當(dāng)然其實(shí)也可以請(qǐng)求一個(gè)內(nèi)網(wǎng)的網(wǎng)址來判斷。我選擇使用不同操作系統(tǒng)本身的方法,而不是讓這個(gè) Python 腳本在后臺(tái)運(yùn)行,監(jiān)控 WiFi 的變化,這樣很不優(yōu)雅。

Windows

Windows 的計(jì)劃任務(wù)功能非常強(qiáng)大,可以根據(jù)不同的條件來觸發(fā)不同的命令,尤其是在啟動(dòng)系統(tǒng)但還沒登錄的時(shí)候就能啟動(dòng)其他的程序,可以加快某些軟件的自啟動(dòng)速度。不過可能很多人壓根都不知道這個(gè)玩意兒在哪兒,打開文件管理器,如下步驟即可,我提供了可以導(dǎo)入的文件導(dǎo)入即可,確實(shí)挺復(fù)雜的。

這玩意兒?jiǎn)栴}還挺多的,比如本來可以設(shè)置系統(tǒng)啟動(dòng)時(shí)先判斷連接到指定 WiFi 才執(zhí)行登錄腳本,但始終無法正確檢測(cè)連接到 WiFi,一直不執(zhí)行。不過,它還可以監(jiān)控 WIndows 系統(tǒng)所有的日志,也包括連接 Wifi 的日志,只需要添加一個(gè)自定義事件的觸發(fā)器,這樣只要你連接上校園網(wǎng)都能觸發(fā)登錄腳本,不管你是剛打開 WiFi 連接校園網(wǎng)還是切換到校園網(wǎng)。

然而當(dāng)我把系統(tǒng)設(shè)置為快速啟動(dòng)時(shí),WiFi 不會(huì)重啟,這樣開機(jī)時(shí)會(huì)馬上連接上,但計(jì)劃任務(wù)就無法監(jiān)控到這個(gè)事件。所以還需要在開機(jī)登錄系統(tǒng)的時(shí)候在執(zhí)行一次腳本,這就需要自行判斷一下連接的 WiFi 是否為校園網(wǎng)的 WiFi,我這里寫了一個(gè) bat 批處理文件(一鍵登錄校園網(wǎng).bat),順便封裝了一下登錄腳本,你自己改一下python.exe 的安裝位置和腳本的位置。

@echo off@for /f "tokens=1,2,3" %%i in ('netsh WLAN show interfaces') do ( if [%%i]==[SSID] set ssid=%%k)if "%ssid:CQUPT=%"=="%ssid%" (echo) else C:/ProgramData/Miniconda3/envs/py36/python.exe D:/Desktop/Github/login4cqupt/main.py 1658xxx Tenderxxxxxx導(dǎo)入計(jì)劃任務(wù)的文件(校園網(wǎng)自動(dòng)登錄.xml)前需要修改一下幾個(gè)關(guān)鍵的地方

關(guān)于這個(gè)自定義事件具體的設(shè)置方法可以查看這個(gè)回答,這里不細(xì)講

如何設(shè)置計(jì)劃任務(wù)或者腳本才能使電腦在連接指定wifi后自動(dòng)運(yùn)行某程序? - 開源AI的回答 - 本站 https://www.zhihu.com/question/50249683/answer/950791896

Linux

我使用的 NetworkManager 作為網(wǎng)絡(luò)管理工具,它提供了一個(gè)鉤子,用于在網(wǎng)絡(luò)發(fā)生變化時(shí)執(zhí)行腳本。

在 /etc/NetworkManager/dispatcher.d 中創(chuàng)建腳本,命名為 10-login.sh,腳本表示當(dāng)連接到包含 CQUPT 的 WiFi 時(shí)執(zhí)行 Python 腳本,注意要使用完整地址。

#!/bin/shif [[ $(nmcli -t -f NAME connection show --active) =~ "CQUPT" ]]then /home/ourongxing/miniconda3/envs/python36/bin/python3 /home/ourongxing/Github/login4cqupt/main.py 1658xxx passxxxxfi然后再賦予腳本可執(zhí)行權(quán)限

sudo chmod a+x 10-login.sh最后啟用 NetworkManager-dispatcher.service 服務(wù),就大功告成了

sudo systemctl enable --now NetworkManager-dispatcher.service

macOS

由于我沒有設(shè)備,暫時(shí)無法嘗試,但你可以參考這篇文章,其中的原理一樣。 mac根據(jù)wifi切換工作環(huán)境

iOS

iOS 還是要靠快捷指令,它自帶了自動(dòng)化功能,非常簡(jiǎn)單,我相信你也能做到。只是可以它無法做到真正的自動(dòng)登錄,因?yàn)樗鼜棾鲞x項(xiàng)需要你確定。

Android

同樣,Macroid 本身就帶了觸發(fā)器,可以檢測(cè)連接 WiFi 的事件,其實(shí)前面你導(dǎo)入(校園網(wǎng).category)后就已經(jīng)可以連接 WiFi 自動(dòng)登錄了,你要做的就是保證這個(gè)程序一直在后臺(tái)運(yùn)行著。

關(guān)鍵詞:平臺(tái),解決,方案,校園

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉