坑爹的校园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模拟登陆相关推荐

  1. GiWiFi模拟登录的完整过程

    本文内容参考: 校园网GiWiFi模拟登陆 GiWiFi模拟登录步骤 1, 获取基本参数: 首先需要请求网关地址:172.17.1.2 如果你连接了GiWiFi并且未进行认证,那么本地址将会重定向到G ...

  2. pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量

    闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...

  3. 基于Python的HTTPS协议模拟登陆+爬取页面

    之前写的一直没成功,原因是用的不是HTTPS相关的函数.这次仔细研究了一下,有几个需要注意的点,一个是POST模拟登陆的时候,header中的cookie值,不同的网站应该会有不同的要求:另一个是GE ...

  4. winform模拟登陆网页_【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)...

    之前已经介绍过了网络相关的一些基础知识了: 以及简单的网页内容抓取,用C#是如何实现的: 现在接着来介绍,以模拟登陆百度首页: 为例,说明如何通过C#模拟登陆网站. 不过,此处需要介绍一下此文前提: ...

  5. Python高级爬虫开发,高难度JS解密教程,绝地求生模拟登陆!

    前言 这篇文章因为涉及到JS解密部分,所以难度比较高,Python基础比较薄弱的同学可以来看看思路. 开始 进入到该网站后我们可以看到如下界面,今天要做的内容就是模拟登陆 那么咱们首先抓到登陆的包看看 ...

  6. 批量注册、模拟登陆很难吗?一个Python爬虫案例告诉你答案!

    **批量注册:**自动化批量注册账号,我见过很多人利用selenium这个自动化框架做,但是速度太慢. **模拟登陆:**这里要说明一下,其实你注册一个账号=模拟登陆一个账号,这个原理其实是一样的. ...

  7. python模拟全部代码_Python模拟登陆实现代码

    下面分享一个使用Python进行网站模拟登陆的小例子. 原理 使用Cookie技术,绕开网站登录验证.要使用到cookielib库.流程: 创建一个保存Cookie的容器,可选的有CookieJar, ...

  8. 233网校java_java辅导:使用java模拟登陆考试大

    java辅导:使用java模拟登陆考试大 2009年1月5日来源:233网校网校课程 在线题库评论 分享到 public static void loginexamda() { URL url = n ...

  9. 【转】 浏览器分析模拟登陆过程

    原文地址:http://www.crifan.com/use_ie9_f12_to_analysis_the_internal_logical_process_of_login_baidu_main_ ...

最新文章

  1. 组合特征(二)tfidf(word+article)+lsa
  2. 带你一分钟理解闭包--js面向对象编程
  3. php 判断用户是否刷新,如何在php和ajax中创建一个注册页面,它会在不刷新页面的情况下检查某个用户名是否已经存在? - php...
  4. 说说自己写PHP框架的一些感受
  5. 匹配objectuse rootsift= sqrt( sift / sum(sift) ) to improve object retrieval
  6. 提交代码出现 Push to origin/master was rejected 错误解决方法
  7. Delphi编程分割图片的方法
  8. Linux常用监控服务器性能命令 内存 CPU 磁盘
  9. 2021年9月份最新数据库排行榜出炉
  10. 各大 IT 公司的架构图
  11. 东芝笔记本电脑重装系统
  12. ceph BALANCER
  13. 京东Deco 智能代码体验版正式上线啦,快来体验设计稿一键生成代码~
  14. 组件封装 - steps组件
  15. H(单应矩阵homography),本质矩阵(Essential Matrix)和F(基础矩阵fundamental)
  16. vue可视化拖拽组件模板,vue组件拖拽自定义界面
  17. Linux下/etc/mdev.conf学习
  18. lvm - Logical Volume Manager - 逻辑卷管理
  19. 微软云 (Microsoft Cloud) 技术概述
  20. 旧无线路由器能变打印机服务器,旧路由器改wifi放大器_当wifi扩展器怎么设置?-192路由网...

热门文章

  1. #Java学习#习题一
  2. web网页设计实例作业 ——电影泰坦尼克号(4页) HTML+CSS+JavaScript 学生HTML个人网页作业作品下载 个人网页设计制作 大学生个人网站作业模板 简单个人网页制作
  3. linux版vmware无法导入ovf,vmware 虚拟机导入OVF出现路径错误
  4. 在持续集成 (CI) 环境中使用 Android 模拟器 | AndroidDevSummit 中文字幕视频
  5. 统计年鉴 付费下载 夏泽网
  6. SAP中如何对预制凭证,增加开户行和账户标识
  7. 售前工程师的成长---一个老员工的经验之谈(二)(转载)
  8. input的button类型,点击页面跳转
  9. 论文好词好句开源共享@GitHub
  10. SATA 3.0 双通道 - 硬盘数据线 + 硬盘电源线