日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

校园网GiWiFi模拟登陆

發布時間:2024/3/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 校园网GiWiFi模拟登陆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

坑爹的校園GiWiFi每個月要24元不限時長,然而每天半夜還自己掉線,登陸的APP更是臃腫,手動寫了個GiWiFi登陸Python腳本

先分析了電腦網頁登陸過程,都是打開網頁自動跳轉http://172.21.1.1:8062/redirect(校園網網關加端口和/redirect)

再進行307跳轉到登陸頁面,輸入賬號密碼就可以登陸了,中間進行一次post請求和一次get請求。

使用環境:Python2.7.4版本

1 2 import urllib , urllib . request , urllib . parse , urllib . response , json , sys , time , os #此處是所有需要的庫,后面不在帶上

首先直接進行get請求然后獲取到登陸頁面的鏈接,登陸頁面的鏈接中有發送post請求的大部分參數,簡直大快人心

1 2 3 4 5 6 def get_rel_url ( ) : req = urllib . request . Request ( "http://172.21.1.1:8062/redirect" ) req . add_header ( 'User-Agent' , 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0' ) ipaddress = urllib . request . urlopen ( req ) ???????? #返回登陸頁面的URl return ipaddress . geturl ( )

然后進行解析URL中的參數,將其轉換為JSON數據進行解析出來

1 2 3 4 5 #傳入上面獲取的URL 返回json數據 def qs ( url ) : ???? query = urllib . parse . urlparse ( url ) . query ???? rs_json = dict ( [ ( k , v [ 0 ] ) for k , v in urllib . parse . parse_qs ( query ) . items ( ) ] ) ???? return rs_json

初始化json數據進行解析

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #初始化JSON urljson = json . loads ( json . dumps ( qs ( get_rel_url ( ) ) ) ) #GiWiFi網關地址 def get_gw_address ( ) : return urljson [ 'gw_address' ] #本機MAC地址 def get_local_mac ( ) : return urljson [ 'mac' ] #本機IP地址 def get_local_ip ( ) : return urljson [ 'ip' ] #GiWiFi的AP MAC地址 def get_gw_mac ( ) : return urljson [ 'apmac' ] #GiWiFi的登陸網關端口 def get_gw_port ( ) : return urljson [ 'gw_port' ] #GiWiFi AP的SSID def get_gw_ssid ( ) : return urljson [ 'gw_id' ]

在對登陸時進行抓取數據包,根據抓到的數據進行填充數據包

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 login_phone = "賬號" login_password = "密碼" json_data = { 'gw_id' : '' + get_gw_ssid ( ) + '' , 'gw_address' : '' + get_gw_address ( ) + '' , 'gw_port' : '' + get_gw_port ( ) + '' , 'url' : 'http://www.baidu.com' , 'ip' : '' + get_local_ip ( ) + '' , 'mac' : '' + get_local_mac ( ) + '' , 'apinfo' : '' , 'btype' : 'pc' , 'PHPSESSID' : '' , 'olduser' : '0' , 'page_time' : '' + str ( int ( time . time ( ) ) ) + '' , 'lastaccessurl' : '' , 'user_agent' : '' , 'devicemode' : '' , 'access_type' : '0' , 'station_sn' : '2851320eb741' , 'client_mac' : '' + get_gw_mac ( ) + '' , 'online_time' : '0' , 'logout_reason' : '7' , 'contact_phone' : '400-038-5858' , 'suggest_phone' : '400-038-5858' , 'station_cloud' : 'login.gwifi.com.cn' , 'acsign' : '800ec48e04be9a2ea9804ce64648887e' , 'name' : '' + login_phone + '' , 'password' : '' + login_password + '' , 'service_type' : '1' }

模擬登陸,發送數據包,其中返回的JSON數據有攜帶登陸秘鑰的地址,獲取后直接使用地址發起GET請求,返回登陸狀態數據

1 2 3 4 5 6 7 8 9 10 11 12 def login ( ) : data = urllib . parse . urlencode ( json_data ) . encode ( encoding = 'UTF-8' ) #POST發送登陸數據 req = urllib . request . Request ( 'http://login.gwifi.com.cn/cmps/admin.php/api/loginaction?round=308' ) login_json = urllib . request . urlopen ( req , data = data ) #對返回的JSON數據進行解析 auth_json = json . loads ( login_json . read ( ) ) auth_url = auth_json [ 'info' ] ???????? #對解析到的地址繼續發起GET請求并獲取登陸狀態 end_login_status = urllib . request . urlopen ( auth_url ) return end_login_status #返回登陸狀態數據

將返回的登陸數據進行解析,檢測登陸狀態auth_state是否2,為2則登陸成功,就可以上網了

1 2 3 4 5 6 7 8 9 def get_login_status ( ) : wifi_status_json = urllib . request . urlopen ( "http://" + get_gw_address ( ) + ":" + get_gw_port ( ) + "/wifidog/get_auth_state?ip=" + get_local_ip ( ) ) status_json = json . loads ( wifi_status_json . read ( ) ) [ 'data' ] auth_status = json . loads ( status_json ) [ 'auth_state' ] if auth_status == 2 : status = "GiWiFi online" else : status = "GiWiFi offline" return status

為了防止賬號掉線或者半夜GiWiFi AP自動重啟,讓其檢測是否在線,如果在線就隔一會再檢測,掉線就進行登陸

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #獲取登陸狀態的JSON get_json = json . loads ( urllib . request . urlopen ( "http://" + get_gw_address ( ) + ":" + get_gw_port ( ) + "/wifidog/get_auth_state?ip=" + get_local_ip ( ) ) . read ( ) ) [ 'data' ] #解析登陸狀態 end_status = json . loads ( get_json ) [ 'auth_state' ] #如果為2顯示已經登陸 if end_status == 2 : print ( 'Login_Status:' , get_login_status ( ) ) #循環檢測是否在線 while 1 > 0 : get_json = json . loads ( urllib . request . urlopen ( "http://" + get_gw_address ( ) + ":" + get_gw_port ( ) + "/wifidog/get_auth_state?ip=" + get_local_ip ( ) ) . read ( ) ) [ 'data' ] end_status = json . loads ( get_json ) [ 'auth_state' ] ???????? #登陸狀態不為2進行登陸 if end_status != 2 : ???? print ( 'Start login GiWiFi ......' ) ???? login ( ) ???? print ( 'Login_Status:' , get_login_status ( ) ) ???????? #睡眠1S time . sleep ( 1 )

以上為Python2.x版本的腳本,如果需要Python3.x版本的請前往 ?原文出處 下載

總結

以上是生活随笔為你收集整理的校园网GiWiFi模拟登陆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。