假期本想要嘗試做一些不同的事,卻一直荒廢,偶然看到了幕課,頓時後悔,再借我一個假期,一定在幕課上認真學習。比自己看書效率高很多啊! 於是反正無聊,用了一個晚上瞭解了一下python(僅限於瞭解),總想做點啥有意思的,想來想去還是和抓包聯繫上了。 鑒於Wireshark我是真不怎麼會用,這次抓包用的軟
假期本想要嘗試做一些不同的事,卻一直荒廢,偶然看到了幕課,頓時後悔,再借我一個假期,一定在幕課上認真學習。比自己看書效率高很多啊!
於是反正無聊,用了一個晚上瞭解了一下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 '\n'
為了能正常顯示漢語,還需要加上下麵這四行。
# -*- coding: utf-8 -* import sys reload(sys) sys.setdefaultencoding( "utf-8" )