用Java编写简易刷票机
文/图 海啸天鸣(Ansty)[华南农业大学 李海鸣]
最近学校各个社团组织搞了很多投票活动,用到了网络投票,于是乎,我的一些朋友就找上了我,叫我去帮他们刷票,于是就有了本文。现在活动也搞完了,部分组织的投票系统也公开了出来供我们下载,这里我就随便拿一套来做个演示了,如图1所示。
图1
我们现在来分析一下这套系统的投票流程。首页勾选支持的候选人,然后提交,投票成功后会转到投票结果页面。这套系统验证投票的有效性只有一个地方,也就是Cookie验证。要绕过这样的验证很简单,就是每次投票完了将Cookie清理掉,就可以继续投票了。但咱们是学黑的,就要学会自己写工具来方便自己。
对付这种只验证Cookie的投票系统,编写刷票机很简单,核心代码只有区区几行。
public void vote(String url, int sum) {
//循环Sum次进行刷票
for (int i = 0; i < sum; i++) {
try {
vote = new URL(url); //建立一个新的URL连接
vote.openConnection(); //打开连接
vote.getContent(); //连接到对应的网址并获得数据
} catch (Exception e) {
e.printStackTrace();
}
jbProcess.setText("刷票进度第"+(i+1)+"次");
}
}
我们首先用URL类来指定一个连接,然后获得该URL的连接,再通过调用getContent方法进行连接获得数据。只有通过getContent这个方法才算真正访问了这个URL。
因为上面的这段代码没有用到Cookie,我们每次投票的时候也没有对Cookie进行记录,因此投票系统就无法对Cookie进行判断了,循环这段代码N次后就能实现投票N次的效果了。
我们使用URL这个类创建了一个指定到我们刷票地址的URL对象,这个类有很丰富的构造方法。这里只用到了“URL(String spec)
根据String表示形式创建URL对象”这个构造方法,因为我们有完整的投票地址。
而vote.openConnect()这个方法还有另外一个同构的方法,就是openConnect(Proxy String),看到其中的Proxy没有?我们如果有一份IP代理文件,那么就可以通过使用代理来进行投票了,从而绕过一些投票系统对重复IP投票的过滤。
我编写的刷票机的界面如图2所示,下面我们来具体操作一下,因为这只是一个简易的刷票机,所以刷票前我们还要手工获得刷票地址。
图2
要获得完整的参数提交的URL地址,我们需要用WSockExpert抓包,然后提取地址。先到投票主页上选中要刷票的候选人,就选1号吧。在WSockExpert里选择我们的浏览器,我用的是FireFox,所以我就在FireFox的进程下面选咯,然后点“open”,如图3所示,现在就可以去浏览器下面点提交按钮了,一定要看到投票成功的结果,这样抓到的包才是有效的。
图3
现在回到WSockExpert,即可看到抓到了一堆数据。我们重点关心POST或者GET那些数据,这里是:
POST /source/pointsubmit.asp HTTP/1.1
menberid=149&x=81&y=32
其中POST是接收参数的页面,后面一行就是参数了。由此我们就可以这样构造投票地址“http://www.xxx.com/source/pointsubmit.asp?
menberid=149&x=81&y=32
”了。我这里的测试地址是“http://localhost:81/source/pointsubmit.asp?
menberid=149&x=81&y=32
”。运行刷票机,把上面的地址复制进去,刷一百票测试,如图4所示,注意刷票前后1号的票数变化。呵呵,成功了。
图4
本文只是一个简单的刷票机实现,没涉及到什么强大复杂的功能,让大家见笑了,对于更复杂的投票验证,目前我正在研究算法,有了新的突破,就会再共享给大家的
补充:软件开发 , Java ,