zoukankan      html  css  js  c++  java
  • 抓包获得东北大学的课程表,考试成绩

    假期本想要尝试做一些不同的事,却一直荒废,偶然看到了幕课,顿时后悔,再借我一个假期,一定在幕课上认真学习。比自己看书效率高很多啊!

    于是反正无聊,用了一个晚上了解了一下python(仅限于了解),总想做点啥有意思的,想来想去还是和抓包联系上了。

    鉴于Wireshark我是真不怎么会用,这次抓包用的软件为Charles。

    Charles是Mac上比较好用的抓包软件,操作真的是十分简单,妈妈再也不用担心我不会抓包了。同时手机上的流量也是可以抓取的,将手机与电脑连在同一局域网,手动设置Wi-Fi代理,地址为电脑的内网IP,端口8888。太爱了!

    上面啊就是地址了,能看出只是提交了 用户名,md5加密的密码 以及 时间。

    首先先写一个md5加密的函数来

    1 def md5(str):  
    2     import hashlib  
    3     m = hashlib.md5()  
    4     m.update(str)  
    5     return m.hexdigest() 

    我不会说我都是百度来的。。。

    然后是提交时间,也就是那个token,就我目前的水准来看(准小白),这个只是用来区分用户的,所以我果断的取了随机数,不过为了显得像正经的链接一点,还是把时间加在了前头。

     1 def ran():  
     2     import random  
     3     return str(random.randint(1000000000000000000, 2999999999999999999))  
     4   
     5 def tim():  
     6     import time  
     7     day = time.strftime("%Y%m%d")  
     8     now = time.strftime("%H%M%S")  
     9     return  day+now  
    10 userName = '20150000'  
    11 passwd = md5('20150000')  
    12 token = tim()+ran()
    13 url = "http://202.118.31.241:8080/api/v1/login?userName="+userName+"&passwd="+passwd+"&token"+token

    这样提交的链接就弄好了。下面是进行网络操作,引用了urllib2。

    1 def WebView(urls):  
    2     import urllib2  
    3     request=urllib2.Request(urls)  
    4     web=urllib2.urlopen(request)  
    5     return web.read().decode('gbk').encode('utf-8')  

    同样被我写成了函数的形式。

    根据后来操作的抓包来看,系统会返回一个时间的字符串以后的请求都是根据它来进行的。

    1 Login = WebView(url)

    先把咱们“制作”出来的链接在登陆函数里运行一下,得到返回值。

    {"success":"0","errCode":"","errMsg":"","data":{"token":"201602291749112430008019436","userName":"20150000","realName":"路人甲","isTeacher":"0"}} 
    

    上面就是返回的Login了。

    我们要获得那个token后面的数字,这个获得的东西呢是json格式的,我们进行解析就能得到token的值。

    1 import json  
    2 JsonLogin = json.loads(Login)  
    3 token = JsonLogin['data']['token']  
    4 UrlKeBiao = "http://202.118.31.241:8080/api/v1/courseSchedule2?token="+token  

    当解析过后,JsonLogin就变成了dict类型,而JsonLogin['data']是dict中的dict,最终用获取的token值我们就能进行各种访问了。

    比如,UrlKeBiao = "http://202.118.31.241:8080/api/v1/courseSchedule2?token="+token 这是请求课表的地址

    UrlKeBiao = "http://202.118.31.241:8080/api/v1/courseSchedule1?token="+token 这是成绩查询的地址

    还有什么空教室,创新学分,等等都可以查看了,这些内容都是json格式的,进行解析过后就能够流畅阅读

    比如我写的解析课程表的代码:

     1 KeBiao = WebView(UrlKeBiao)  
     2 JsonKeBiao = json.loads(KeBiao)  
     3 print type(JsonKeBiao['data'])  
     4 print type(JsonKeBiao['data'][0])  
     5 k=0  
     6 r=0  
     7 while r!=6:  
     8     print "%-25.20s"%(JsonKeBiao['data'][k+r]['name']),  
     9     k+=6  
    10     if k==42:  
    11         k=0  
    12         r=r+1  
    13         print '
    '  

    为了能正常显示汉语,还需要加上下面这四行。

    # -*- coding: utf-8 -*  
    import sys  
    reload(sys)  
    sys.setdefaultencoding( "utf-8" ) 
  • 相关阅读:
    How to print GETDATE() in SQL Server with milliseconds in time?
    StarLink卫星网络如何工作
    Chinasat16
    天线增益计算
    Schemachine
    源代码之整洁代码
    关于进程内缓存与分布式缓存
    IOT物联网时代测试演化
    互联网大促运维实践案例
    Kubernetes应用场景
  • 原文地址:https://www.cnblogs.com/xfangs/p/5234451.html
Copyright © 2011-2022 走看看