1.工具
火狐浏览器+firedebug插件,debug插件可在浏览器附加组件中添加,其他浏览器也可以,只要有可以监控浏览器的网络行为插件即可.python+requests包2.步骤
1)先打开到登录界面,然后在按f12打开firedebug插件,此时debug无任何记录行为,然后点击刷新按钮,再点击登录按钮,再次调出debug点击掌握台选项卡,这时会创造很多get方法加上末了由登录产生的POST方法,如图所示
2)点击POST方法的小箭头会创造,浏览器的要求头header信息,这个须要我们保存下来(不是相应头),
3)查看POST选项卡中的内容,个中的变量和参数都须要保存下来,这里面可以看到个中的password是被加过密的.如果只是登录自己的账号密码,那么程序到此可以结束.把个中的数据用自己抓到的数据更换利用下面代码即可登录校园网.
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)
123456789101112131415161718192021222324252627282930314)但是创造一个问题便是上面的程序只能自己利用,如果换一个账号密码登录那么又要利用浏览器抓数据包,烦…仔细查看上面的步骤创造想要写一个其它账号可以利用,但不用抓包也可以登录的程序的难点在于布局post_data程序中password被加密过,如果能够知道它的加密办法,写一个通用的(在本校内)程序还是非常随意马虎的.实在如果对常用的加密方法比较理解,那么去查看网页的源代码(js)还是比较随意马虎得出它的加密办法,可惜我不懂,只知道一个md5加密,因此我就考试测验用python中的hashlib包对密码进行加密然后查看是否和抓到的数据相同,遗憾的是连一个字符都木有相同的…,然后我想既然数据是从本地向做事器发送的,那么加密的过程一定是在客户端完成的,很有可能是通过js脚本(对网页编程不太理解,只知道js可在客户端实行,以是预测是js脚本完成对passward编码),然后通过debug查看抓到的js代码.打开debug的调试器可以看到左边有一排js代码,通过js文件名可以大概预测到js的浸染.
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)