背景 我在的學校校園網登錄是web式的,即隨便打開一個網頁就會自動跳轉到登錄頁面,然後輸入用戶名密碼,點登錄,便可以上網了。 但這種登錄方式有個缺點:登錄狀態不會一直保持下去。即過一段時間就會掉線,然後你需要重新登陸才行。這個時間大概是一天。 這就蛋疼了,想讓實驗室的電腦隨時保持聯網狀態怎麼辦呢?( ...
背景
我在的學校校園網登錄是web式的,即隨便打開一個網頁就會自動跳轉到登錄頁面,然後輸入用戶名密碼,點登錄,便可以上網了。
但這種登錄方式有個缺點:登錄狀態不會一直保持下去。即過一段時間就會掉線,然後你需要重新登陸才行。這個時間大概是一天。
這就蛋疼了,想讓實驗室的電腦隨時保持聯網狀態怎麼辦呢?(有時候我需要遠程我的電腦)
這個時候可以用python腳本解決這個問題!
思路
寫一個死迴圈一直 ping 8.8.8.8,如果 ping 通說明正連著網,進入下一次迴圈;如果 ping 不通,說明斷網了,嘗試登陸校園網,然後進入下一次迴圈。即:
ping 8.8.8.8 —> 如果已聯網 —> 繼續 ping 8.8.8.8 —> …… —> 如果斷網 —> 嘗試登陸 —> 登陸成功 —> ping 8.8.8.8 ……
腳本寫好後放到 windows 的計劃任務里設置開機啟動。
或者在linux中設置 crontab,一樣的道理。
技術點
•利用 python 進行 post 請求
•base64加密解密
•利用 subprocess 創建子進程
碎碎念
腳本在後臺運行cpu占用大概為 1~2%,記憶體占用大概為 4M 左右,完全可以接受。
當然如果你有條件的話,運行在內網伺服器上也是極好的,順便可以連個路由器出來,這樣實驗室的小伙伴能用不斷網的wifi了……
如果沒有伺服器,樹莓派+路由器的組合也是一種解決方案~
當然最省錢的就是我這種把腳本直接跑在自己機器上的……
代碼
python學習交流Q群:906715085### #coding=utf8 import urllib,urllib2 import base64 import os , subprocess username = '你的base64加密過的校園網用戶名' password = '你的base64加密過的校園網密碼' url = 'https://login.xxxx.edu.cn/auth_action.php' # 校園網登陸驗證地址 def isConnecting(): # Judge network connect status res = subprocess.call('ping 8.8.8.8 -n 1',shell=True) return False if res else True def Signon(): # Sign on data = { 'action' : 'login', 'username' : base64.decodestring(username), 'password' : base64.decodestring(password), 'ac_id' : 1, 'save_me' : 0, 'ajax' : 1, } data = urllib.urlencode(data) response = urllib2.urlopen(url,data=data) response = response.read().decode('utf8') print response def main(): while True: if not isConnecting(): # no-connect status, attempt sign on Signon() if __name__=="__main__": try: main() except Exception,e: print '[ERROR]:', print e
這個小腳本很簡單,主要為大家提供一個思路~
最後
編程語言可以方便我們的生活,我想這就是它存在的價值。這一章的小技能還是十分實用的,代碼也就區區幾十行,非常的簡單
喲!!這一章到這裡就結束了,下一章見啦!