长沙理工大学教务管理系统模拟登陆

Java模拟登陆长沙理工大学教务系统教程
本文详细介绍了如何使用Java和Jsoup模拟登陆长沙理工大学教务管理系统,包括浏览器抓包、密码和验证码加密、获取Cookie及进行模拟登陆的过程,并展示了如何利用登录后的Cookie获取成绩。

准备

浏览器抓包设置

按F12开启浏览器抓包。
抓包界面
选择Network选项,并记得选上Preserve log选项,否则页面一旦跳转,之前抓的包就会消失。

开始抓包

通过对首页进行刷新抓包,我抓到了以下数据包。
数据包
通过对数据包的逐个观察,我选出了首页数据包里的三个关键包。

一个是登陆界面的数据包,里面包含了完整的登陆Form表
登陆数据包
根据登陆界面的代码分析得出表单的上传还需要一些加密方法,“加密算法数据包
在这里插入图片描述

一个是验证码的数据包。
验证码数据包

随后我们再对登陆过程进行抓包。一般登陆表都是采用POST的方式上传。(此时如果没有选上Preserve log选项,将观察不到登陆数据包)
由下图可知服务器的请求地址(Requesst URL)和请求方式(Request Method)
登陆包
登陆数据包携带的数据(From Data)
上传登录表

开始数据包分析

在上面我们抓了四个数据包,分别是登陆界面包,加密算法包,验证码包,登陆包。现在进行详细分析。

登陆界面包

登陆界面包的请求地址请求方式
登陆界面包的请求地址和请求方式
请求头
请求头
请求头里重要的参数有CookieRefererUser-Agent,其它参数可加可不加。
我们的最终目标就是要获取一个已登陆的Cookie
Referer是一个服务器需要验证的参数,如果没有,服务器将返回“系统出错”等。
User-Agent是为了降低被后台识别为爬虫的几率。

加密算法包

根据登陆界面代码里的具体加密方法调用逻辑来使用。

验证码包

请求地址请求方式
验证码
请求头
验证码请求头

登陆包

请求地址请求方式,可以注意到登陆包和登陆界面包的请求地址是一样的,但请求方式不同
登陆包
请求头
登陆包请求头
Form Data
Form Data
结合登陆界面的代码分析可得下表

参数名 参数值来源
__VIEWSTATE 登陆界面代码中匹配,会变化
__VIEWSTATEGENERATOR 登陆界面代码中匹配,会变化
pcInfo 直接复制包数据即可
txt_mm_expression 字符串空值""
txt_mm_length 字符串空值""
txt_mm_userzh 字符串空值""
typeName 点击From Data旁的view URL encoded可得值"%D1%A7%C9%FA" ,使用gb2312进行UrlDecode解码可得知该值实际为"学生"
dsdsdsdsdxcxdfgfg 加密后的密码,具体加密方式可以在登陆界面代码中看到,使用的加密算法在首页抓包中的md5.js中
fgfggfdgtyuuyyuuckjg 加密后的验证码,具体加密方式可以在登陆界面代码中看到,使用的加密算法在首页抓包中的md5.js中
Sel_Type 可以从登陆界面代码的登录表得知有多个值可选,一般为STU
txt_asmcdefsddsd 学号
txt_pewerwedsdfsdff 字符串空值""
txt_psasas 同typeName可得值为“请输入密码”
txt_sdertfgsadscxcadsads 字符串空值""

代码实现

接下来是具体的代码实现,我选择使用Java和Jsoup来构造。模拟登陆实质是模拟数据包发送接收和处理,使用哪种语言看个人爱好。

    public static Map<String, String> cookies = null;//用来存放Cookie
    public static final String validateCodeUrl = "http://xk.csust.edu.cn/sys/ValidateCode.aspx";//验证码请求地址
    public static final String pcinfo = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36undefined5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 SN:NULL";
    public static final String loginPanelUrl = "http://xk.csust.edu.cn/_data/login_home.aspx";//登陆界面请求地址
    public static Map<String, String> datas = new HashMap<String, String>();//要Post的数据

密码加密

    public static String getPassword(String username, String password) {
   
   
    	ScriptEngineManager manager = new ScriptEngineManager();//Java自带可以解析Js文件的类
    	ScriptEngine engine = manager.getEngineByName("javascript");
    	try {
   
   
    		File file = new File("E:/jee-2019-032/work-space/hhh/src/hhh/md5.js");
    		// 读取js
    		FileReader fileReader = new FileReader(file);
    		// 执行指定脚本
    		engine.eval(fileReader);
    		if (engine instanceof Invocable) {
   
   
    			Invocable in = (Invocable) engine;
    			return (in.invokeFunction("md5", username
    					+ in.invokeFunction("md5", password).toString().substring(0, 30).toUpperCase() + "10536")
    					.toString().substring(0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值