csu教务管理系统一些研究

自从我们学校换了教务管理系统之后,我觉得我可以学习一波爬取我们学校的教务管理系统。经过时断时续的一个月学习,我觉得可以写完整的模拟登录。
1、准备工作
爬取网站首先要对网站进行详细认真的调查了解。这里我首先查看网站的源代码,首先是这一段代码:`_hidden dl_box1">用户名:密码:验证码:csu教务管理系统一些研究
文章图片
忘记密码      `在这一段代码中,我们可以捕捉到以下信息:页面会捕获用户输入的userAccount和userPassword信息,同时还需要用户输入验证码进行身份确认(吐槽一句,我觉得我们学校新的管理系统做的比原来的安全多了)。但是注意,页面并不是直接用Post方法提交到服务器端的。我们继续往下查看代码。我注意到代码里定义了一个方法如下:`function onSubmint(){ var strUrl="/Logon.do?method=logon&flag=sess"; $.ajax( { url:strUrl,type:"post",cache:false,dataType:"text",success:function(dataStr) { if(dataStr=="no"){ return false; }else{ var scode=dataStr.split("#")[0]; var sxh=dataStr.split("#")[1]; var code=document.getElementById("userAccount").value+"%%%"+document.getElementById("userPassword").value; var encoded=""; for(var i=0; i

2、编写代码
import requestsimport os**# 验证码网址http://csujwc.its.csu.edu.cn/verifycode.servlet*# 获取加密随机字符串http://csujwc.its.csu.edu.cn/Logon.do?method=logon&flag=sesssession = requests.session()url = "http://csujwc.its.csu.edu.cn/Logon.do?method=logon"def safe_int(num): try: return int(num) except ValueError: result = [] for c in num: if not ('0' <= c <= '9'): break result.append(c) if len(result) == 0: return 0 return int(''.join(result))*# 获取验证码*imgUrl = "http://csujwc.its.csu.edu.cn/verifycode.servlet"imgresponse = session.get(imgUrl, stream=True)session.cookies['pgv_pvi'] = '6853033984'print(session.cookies)image = imgresponse.contentDstDir = os.getcwd()+"\\"print("保存验证码到:"+DstDir+"code.jpg"+"\n")try: with open(DstDir+"code.jpg" ,"wb") as jpg: jpg.write(image)except IOError: print("IO Error\n")finally: jpg.closeverifycode = input("验证码")codeUrl = "http://csujwc.its.csu.edu.cn/Logon.do?method=logon&flag=sess"coderesponse = session.get(codeUrl, stream=True)bcode = coderesponse.contentprint(bcode)scode = bcode.split(b'#')[0].decode(encoding='utf-8')print(scode)sxh = bcode.split(b'#')[1].decode(encoding='utf-8')print(sxh)code = "MDkwNjE0MDExMQ==%%%aGFuanVuOTYwNTE0"#用户名和密码的编码encoded=""i=0while i

3、分析总结
【csu教务管理系统一些研究】经过了很长时间才成功暴力破解了我的一个同学的密码,效率真的很低。参数序列有时候会和浏览器发的包不一样,你可以改成固定的序列,“view:1&useDogcode:&encoded":"编码的值"。手动输入验证码的问题,这个可以通过使用tesseract智能识别引擎来解决,这个我就不说了。网页中JS加密代码直接改写成python的就可以了。这里我还把网页的js代码截取下来,用同一个初始值和Python的对比,结果一直一样,应该没错。以后继续加油!

    推荐阅读