学校教务系统模拟登陆

登录模拟
关于
想尝试一下学校的官网,试试看。
登陆页面
学校的教务系统是青果公司的,很多版块页面都是单独的iframe。但是审查元素单独去访问显示没有权限。
登陆要求:账号,密码,验证码(以前好像是必须要输入验证码的,现在在一定输入次数之内,可以不用输入。)
密码部分
随便输个错误的账号跟密码
发现一堆乱起八早的参数,经过测试,参数作用如下:
参数 | 说明 |
---|---|
__VIEWSTATE | html中的 |
__EVENTVALIDATION | html中的 |
dsdsdsdsdxcxdfgfg | 加密之后的密码 |
fgfggfdgtyuuyyuuckjg | 加密之后的验证码 |
txt_asmcdefsddsd | 输入的账号 |
txt_pewerwedsdfsdff | 输入的密码 |
txt_psasas | 验证码 |
密码加密肯定是js完成的,于是找js部分
鼠标点到输入框那,发现失去焦距和按键弹起会触发shtitblur()和chkpwd()函数,全局搜索,第一个没啥用,第二个出来了,正好是加密部分。
|
|
这段js的意思是将密码用md5加密,取前30位转大写,然后与密码和学校代码和账号拼接,再进行md5加密取前30位转大写。验证码与密码差不多。 Python实现:
|
|
cookie部分
做完上述,我以为我又行了,,,结果打脸,无法访问。。。
后来发现cookie
部分有个ASP.NET_SessionId
字段,这是个啥,每次请求还不一样,好像是随机的。查阅资料发现,ASP.NET
用来判断web
会话状态的一个参数,只要访问过页面之后就会保存在cookies
中。
每次提交账号密码,都会生成一个新的cookie
,保持同一个会话,否则无法访问。使用session_res = requests.session()
保持会话,并拿到ASP.NET_SessionId
的值。
|
|
拼接header
|
|
最后,拼接headers
和提交的参数data
,使用post发送请求,成功登录。
后续可能会尝试进行课表的爬取,,,,,
课表爬取
目标网页
url:http://218.22.58.76:2346/ZNPK/KBFB_ClassSel.aspx
抓包分析
发现必须要输入验证码,而验证码里headers
里面的cookie
有两个字段,其中的sessionid
获取方式上文提到了。首先访问一遍课表入口地址,通过session
方法获取cookie
字段,拿到值。
输入验证码,继续看发送了什么。
post
请求,发送了专业班级,学期,格式等等,但是这些不是重点。它还把验证码发过去了。返回的请求却不是课表,而是一段html
。这就很奇怪,后面的那个get
请求才是对的课表图片。
验证码正确:
验证码错误:
这段
html
是组成课表的头部,显示学校专业班级,好像跟课表没什么关系。但是,当验证码输错时,这个请求会弹出alert
(“验证码错误”),没有后续的课表图片请求了。
由此,http://218.22.58.76:2346/ZNPK/KBFB_ClassSel_rpt.aspx
的请求是为了判断验证码是否正确。正确则可以进行后续的请求,错误则警告,后续停止。
接着get
一下目标图片的地址,显示全为乱码,content
一下转二进制流即可。
重点在于使用相同
cookie
保持同一个会话(当时这里参数弄错了,困扰了我好久。。。),还有就是验证码的作用,必须先提交post
之后,get
图片才有数据。
python实现
|
|