一、开发环境及工具准备

1、IE浏览器(其它浏览器均可,个人比较喜欢IE浏览器的开发人员工具)

2、程序开发工具(编程语言不限)

二、了解HTTP协议

HTTP协议有很多个请求方法,这里主要了解GET请求与POST请求即可

不懂HTTP协议的同学可以看看这篇博客:https://blog.csdn.net/weixin_38087538/article/details/82838762

简而言之:

GET请求一般用来获取网页不同资源页面等等。

POST请求一般用来提交数据,如账号登录信息、提交选课信息等等。

三、抢课程序原理

了解完HTTP协议内容之后就需要进行抓包,因为我们用程序进行抢课的本质就是用自己的程序模拟浏览器与服务器进行通讯。浏览器其实算一个代码解释器,浏览器一般通过GET请求向服务器请求资源,服务器返回网页源代码,然后浏览器对其进行解释,从而渲染出各种界面。对网页进行操作的同时,浏览器会执行网页前端代码,将各种操作变成一个一个的数据包发送到服务器,然后服务器会进行处理。

而我们要做的就是通过抓包分析出在我们对网页进行某个操作时,浏览器向服务器到底发出了什么数据包,这样我们才能用自己的程序将这个数据包向服务器发出,从而模拟抢课操作。

四、网页抓包

首先我们打开一个网页,按下F12,可以看到弹出了开发人员工具

然后我们点击开发人员工具上面的“清除缓存”、“清除cookie”,“清除浏览项”,接着输入一个错误的学号、密码、验证码点击登录。

可以看到我们向login_home.aspx发送了一个POST请求,也就是说我们的账号密码验证码等数据全部被发送到了这个网页,我们进行模拟登录请求就需要往这个网页发送数据包。

接着查看数据包内容

附加协议头可以视情况选择性添加,发送的数据包中必须携带cookie。

如果不懂cookie的同学可以到百度查询。

接着是POST请求发送的参数也就是“请求正文”,在模拟发包的时候我们必须搞懂每一个参数的来源和含义,弄懂参数的来源和含义有很多种方法,比如在右上角搜索参数名、多次尝试发送不同数据进行对比等操作。

而“响应正文”就是POST操作之后服务器返回的数据。

前端代码一般会对账号密码等数据进行加密操作,防止网页访问被恶意拦截导致安全问题,所以我们在发送账号和密码的时候也要先进行加密操作再发送到服务器。

我们搜索代表密码或者账号的变量名即可发现加密代码,分析加密代码的原理,我们就可以实现加密。

可以看到下面这段代码

function chkpwd(obj)
{  if(obj.value!='')  {                                  var s=md5(document.all.txt_asmcdefsddsd.value+md5(obj.value).substring(0,30).toUpperCase()+'113    42').substring(0,30).toUpperCase();   document.all.dsdsdsdsdxcxdfgfg.value=s;} else { document.all.dsdsdsdsdxcxdfgfg.value=obj.value;}
}
function chkyzm(obj)
{  if(obj.value!='') {   var s=md5(md5(obj.value.toUpperCase()).substring(0,30).toUpperCase()+'11342').substring(0,30).toUpperCase();   document.all.fgfggfdgtyuuyyuuckjg.value=s;} else {    document.all.fgfggfdgtyuuyyuuckjg.value=obj.value.toUpperCase();}
}

可以通过百度查询内部函数的名字可以知道函数的功能,如md5、substring、toUpperCase等函数的功能,其中MD5是一种很常用的加密方式,不可逆且一一映射的特点让它使用的非常普遍。或者右上角查询函数名即可查出在哪定义的。所以我们可以看到chkpwd将账号和密码混合加密,而chkyzm是将验证码加密。如果实在不能分析出函数的作用我们也可以使用浏览器的调试工具,通过下断点观察变量内容可以猜出函数作用。

POST数据包原文,每个变量之间用&隔开

__VIEWSTATE=%2FwEPDwUKMTAzNTIzMjg1NWRkCiKyz%2BDh1fIIC%2BEs1uq878poKaZtnnb0TRWb1oPaCbU%3D
&__VIEWSTATEGENERATOR=BA28A9C8
&__EVENTVALIDATION=%2FwEdAAJoEstBiTF7Y%2FUadsShywEbZ5IuKWa4Qm28BhxLxh2oFH3yjuiK8Sutd8Tp%2BER%2Fvqy6uFkquhcxd88rY7h49y7o
&pcInfo=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F77.0.3865.120+Safari%2F537.36undefined5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F77.0.3865.120+Safari%2F537.36+SN%3ANULL
&txt_mm_expression=
&txt_mm_length=
&txt_mm_userzh=
&typeName=%D1%A7%C9%FA&dsdsdsdsdxcxdfgfg=51F692FC6E8DE4F24B7A9821995577
&fgfggfdgtyuuyyuuckjg=1F17F7BFAB49A5865B81E1E151714D
&Sel_Type=STU
&txt_asmcdefsddsd=000000000000
&txt_pewerwedsdfsdff=
&txt_psasas=%C7%EB%CA%E4%C8%EB%C3%DC%C2%EB
&txt_sdertfgsadscxcadsads=

五、代码编写

其他网页操作同理,这里就不贴出我的代码了。

抢课与爬虫类似,感兴趣的同学可以自己去研究,可以选择去B站观看爬虫教程等。。。

C++实现:https://blog.csdn.net/MASILEJFOAISEGJIAE/article/details/60575892

在实践的过程中我也遇到了很多问题

比如,因为抢课人数过多而导致服务器可能会响应各种错误,需要我们考虑到所有可能产生的问题,并且进行相应的处理,如果考虑不周到就可能错失抢课时机等等,需要很多经验才能写出能用可靠的软件。

本博客仅供技术交流,对于由此产生的其它问题本人概不负责。

由于本人技术有限,不足之处欢迎大家多多指正。

END

教务系统抢课程序原理相关推荐

  1. 教务系统抢课程序的思路

      最近在学习Python爬虫处理表单登录的知识,就想到了拿学校的教务系统来试手.经过调查发现学校的教务系统登录有如下特点: 有两个登录页面,一个页面是需要输入账号密码以及四位字符验证码,另一个页面只 ...

  2. ZUCC 正方教务系统 抢课脚本 抢课流程实现

    ZUCC 正方教务系统 抢课脚本 抢课流程实现 新版ZUCC正方教务系统抢课脚本的流程分析与实现,文章结尾有完整项目的所有代码. 个人博客文章链接 流程分析 账号登录进入首页 模拟请求进入计划内选课界 ...

  3. 用 Python 实现模拟登录正方教务系统抢课

    (点击上方蓝字,快速关注我们) 作者:小苏打 https://vhyz.me/2018/06/12/用Python实现模拟登录正方教务系统抢课/ 最近学校开始选课,但是如果选课时间与自己的事情冲突,这 ...

  4. 女朋友教务系统抢课老抢不上怎么办,写个代码解决这个问题

    写了一个自动登录的程序,用来每天微信提醒上课以及成绩推送. 功能 已实现: 破解登录密码加密,实现自动登录. 可实现: 获取课表,每日推送. 抢课快人一步. 成绩推送. 方正教务系统各个功能都有api ...

  5. python模拟登录教务系统_用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

  6. 用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

  7. asp 退出登录修改cookie能进入后台_用Python实现模拟登录正方教务系统抢课

    6月23日更新:由于国内高校正方教务系统或多或少都会有所不同,所以细节地方还是需要自己修改的,我这个过程也只是一个案例,但这其中的本质上是不变的,即是抓包分析. 如果有什么不懂的,可以在评论区评论,或 ...

  8. 用Python模拟登录学校教务系统抢课

    --  Illustrations by Vladislav Solovjov -- ♚ 作者:小苏打 博客地址:https://vhyz.me GitHub地址:github.com/vhyz/ZF ...

  9. 抢课不再凭手速和运气,Python模拟登录学校教务系统抢课

    前言: 最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,不用再担心手速跟不上,抢啥中啥.不用再承受抢不中想去的课,最后被调剂到各种"灭绝师太&q ...

最新文章

  1. R语言使用haven包的read_spss函数读取spss格式数据、使用haven包的read_sas函数读取SAS格式数据、使用haven包的read_dta函数读取Stata格式数据
  2. python代码需要背吗-Python代码需要缩进吗
  3. C语言 下标运算符和指针运算符
  4. C | 构成和编码规范
  5. jQuery基础之核心函数,jQuery对象及伪数组 静态方法和实例方法的定义,各种静态方法(each,map,holdRedady,trim,isWindow,isArray,isFunction)
  6. php unid,微信扫码登陆/微信公交号 登录PHP 自适应 UnionID统一用户
  7. java多线程Thread.sleep方法用法详解
  8. Unity 脚本入门教程
  9. 你知道怎么下载矢量图标吗——Iconfont
  10. 2022年上半年软件设计师下午真题及答案解析
  11. html 多余的字省略号,html中把多余文字转化为省略号
  12. Iterative Deep Learning论文简读
  13. Python实现圆通快递单号查询官方接口教程
  14. 新上线APP如何推广提升排名
  15. OpenCV实践之路——方形图片对角线切割
  16. ResponseEntity进行下载
  17. 树莓派+阿里云轻松智能家居DIY-app
  18. 秋招Android常见笔试题合集--Binrry(冰蕊)
  19. MySQL填坑系列--Linux平台下MySQL区分大小写问题
  20. 实现免密登录,设置只允许student1, student2用户登录,get和post的区别,HTTP状态码,HTTP请求报文和响应报文,HTTP是如何保持连接状态的

热门文章

  1. FIN_WAIT2状态的弊端以及TIME_WAIT状态分析及作用
  2. TIME WAIT 和CLOSE WAIT的区别
  3. 《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.2 SEO技术及其重要性...
  4. 隆重推荐:疯狂实验史
  5. 骡马视频,神马视频,带TV,带影院。不用数据库的搭建教程
  6. javaweb基于JSP+Servlet开发在线网上药店购药系统+论文+PPT+答辩视频 毕业设计 课程设计
  7. PAT(甲级)2019春季考试(Python实现)
  8. 亚马逊aws服务取消_亚马逊网络服务(AWS)
  9. linux expect循环用法,Linux expect用法介绍
  10. Excel 查找某值第一次出现和最后一次出现的所在的行,以及对应的某列的值