python实现校园网自动登录的示例讲解


Posted in Python onApril 22, 2018

因为最近想用树莓派搞个远程监控系统,又因为学校的网需要从网页登录而树莓派又不方便搞个显示器带着,所以寻思着搞个能够自动登录校园网的脚本程序,省去了每次都要打开浏览器输入账号密码的烦恼.

1.工具

火狐浏览器+firedebug插件,debug插件可才浏览器中附加组件中添加,其他浏览器也可以只要可以监控浏览器的网络行为即可.

python+requests包

2.步骤

1)  先打开到登录界面,然后在按f12打开firedebug插件,此时debug无任何记录行为,然后点击刷新按钮,再点击登录按钮,再次调出debug点击控制台选项卡,这时会发现很多get方法加上最后由登录产生的POST方法,如图所示

python实现校园网自动登录的示例讲解

2) 点击POST方法的小箭头会发现,浏览器的请求头header信息,这个需要我们保存下来(不是响应头),

python实现校园网自动登录的示例讲解

3) 查看POST选项卡中的内容,其中的变量和参数都需要保存下来,这里面可以看到其中的password是被加过密的.如果只是登录自己的账号密码,那么程序到此可以结束.把其中的数据用自己抓到的数据替换使用下面代码即可登录校园网.

python实现校园网自动登录的示例讲解

import requests
#登录地址
post_addr="http://a.nuist.edu.cn/index.php/index/login"
#构造头部信息
post_header={
 'Host': 'a.nuist.edu.cn',
 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
 'Accept': 'application/json, text/javascript, */*; q=0.01',
 'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
 'Accept-Encoding': 'gzip, deflate',
 'Content-Type': 'application/x-www-form-urlencoded',
 'X-Requested-With':'XMLHttpRequest',
 'Referer':'http://a.nuist.edu.cn/index.php?url=aHR0cDovL2RldGVjdHBvcnRhbC5maXJlZm94LmNvbS9zdWNjZXNzLnR4dA==',
 'Content-Length': '67',
 'Cookie':'_gscu_1147341576=059821653286gq10; sunriseUsername=123441534;\
 sunriseDomain=NUIST;sunriseRememberPassword=true; sunrisePassword=123456;\
 PHPSESSID=hb0o9bkct2f6ge164oj3vj0me5;think_language=zh-CN',
 'Connection':'keep-alive',
}
#构造登录数据
post_data={'domain':'NUIST',
   'enablemacauth':'0',
   'password':'MTgzMzEw',
   'username':'xxxxxxx'
   } 
#发送post请求登录网页
z=requests.post(post_addr,data=post_data,headers=post_header)

4)  但是发现一个问题就是上面的程序只能自己使用,如果换一个账号密码登录那么又要使用浏览器抓数据包,烦…仔细查看上面的步骤发现想要写一个其它账号不用抓包也可以登录的程序的难点在于构造post_data程序中password被加密过,如果能够知道它的加密方式,写一个通用的(在本校内)程序还是非常容易的.

其实这一步如果对常用的加密方法比较了解,那么去查看网页的源代码(js)还是比较容易得出它的加密方式,可惜我不懂,只知道一个md5加密,因此我就尝试用python中的hashlib包对密码进行加密然后查看是否和抓到的数据相同,遗憾的是连一个字符都木有相同的…,然后我想既然数据是从本地想服务器发的那么加密的过程必然在客户端完成很有可能是通过js脚本(对网页编程不太了解,只知道js可在客户端执行,所以猜测是js脚本完成对passward编码),然后通过debug查看抓到的js代码.

打开debug的调试器可以看到左边有一排js代码,通过js文件名可以大概猜测到js的作用.

python实现校园网自动登录的示例讲解

5) 查看左侧文件名能够直接猜测到作用有login.js,md5.js,client.js,usercss.js.既然md5不是password加密方式那么查看其它js代码.幸运的是点开第一个base64代码敏感的发现这篇代码就是一种编码方式,赶紧百度之,发现base64果然是一种编码方式,趁热打铁百度python的base64编码实现,发现python早已集成base64的包,利用此包再次对密码进行编码….发现结果和抓到的postdata一毛一样,至此写一个通用的程序指日可待!!

完整代码如下(粗犷版):

#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
 FileName:conNet.py
 Author:shenhuixiang
 Copyright(c)2017,shenhuixiang
'''
import base64
import requests
'''
输入账号密码和登录的网络
网络参数为如果是移动的则填写CMCC
如果是学号则填NUIST
'''
USER_ACCOUNT='110'
DOMAIN_SELECTION='CMCC'
USER_PASSWATD='123456'
#登录地址
post_addr="http://a.nuist.edu.cn/index.php/index/login"
#构造头部信息
post_header={
 'Host': 'a.nuist.edu.cn',
 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
 'Accept': 'application/json, text/javascript, */*; q=0.01',
 'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
 'Accept-Encoding': 'gzip, deflate',
 'Content-Type': 'application/x-www-form-urlencoded',
 'X-Requested-With':'XMLHttpRequest',
 'Referer':'http://a.nuist.edu.cn/index.php?url=aHR0cDovL2RldGVjdHBvcnRhbC5maXJlZm94LmNvbS9zdWNjZXNzLnR4dA==',
 'Content-Length': '67',
 'Cookie':'_gscu_1147341576=059821653286gq10; sunriseUsername='+USER_ACCOUNT+';\
 sunriseDomain='+DOMAIN_SELECTION+';sunriseRememberPassword=true; sunrisePassword='+USER_PASSWATD+';\
 PHPSESSID=hb0o9bkct2f6ge164oj3vj0me5;think_language=zh-CN',
 'Connection':'keep-alive',
}
'''
password在post的参数中经过base64编码,
为了查找password加密方式...吐血三升.
'''
post_data={'domain':DOMAIN_SELECTION,
   'enablemacauth':'0',
   'password':base64.b64encode(USER_PASSWATD.encode()),
   'username':USER_ACCOUNT
   }
#发送post请求登录网页
z=requests.post(post_addr,data=post_data,headers=post_header)
#z.text为str类型的json数据因此先编码成byte类型在解码成unicode型这样就可以正常输出中文
s=z.text.encode('utf-8').decode('unicode-escape')
print(s)

以上这篇python实现校园网自动登录的示例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的栈(Stack)
Jan 26 Python
Python设计模式之原型模式实例详解
Jan 18 Python
python统计中文字符数量的两种方法
Jan 31 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
NumPy排序的实现
Jan 21 Python
python实现人脸签到系统
Apr 13 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
Python语言规范之Pylint的详细用法
Jun 24 Python
用Python写一段用户登录的程序代码
Apr 22 #Python
python实现简单登陆流程的方法
Apr 22 #Python
Python 实现选择排序的算法步骤
Apr 22 #Python
python学习基础之循环import及import过程
Apr 22 #Python
Python中循环引用(import)失败的解决方法
Apr 22 #Python
Python 数据处理库 pandas进阶教程
Apr 21 #Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 #Python
You might like
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python 读取文件并替换字段的实例
2018/07/12 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
python super用法及原理详解
2020/01/20 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
项目采购员岗位职责
2014/04/15 职场文书
公务员年度考核评语
2014/12/31 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
小学运动会入场口号
2015/12/24 职场文书