1
如何编写一个自动投票程序
我经常去网站抓些东西,有时也做一些自动填写表单的事情。最近接手了一个投票的任
务,
也即需要编写一个程序自动投票,
从而也引发了如何编写自动投票程序和如何编写投票
程序(投票程序怎么样防止自动投票)的话题。正所谓道高一尺、魔高一丈。自动投票和投
票程序本身就是一种对弈状态。
如何编写投票程序,大致分为这么几步:
1
:手动投票,分析中间出现的每一个页面的代码,找出投票规律。
2
:捕获提交页面的时候所
post
的信息。
3
:编程模拟这个手动过程。
我以我刚写的这个自动投票程序为例。在此我不会给出网址链接(保密)
,也不会给出真实
数据和截图。
首先手动投票,
是一个多选投票,
点击投票按钮后,
会弹出一个网页,
这个网页会问你是确
认还是放弃,
点击确认后,
返回投票成功的提示。
当在此点击投票按钮的时候提示已经投过
一票,不能重复投票。关闭所有浏览器窗口,打开一个新窗口,投票,仍然可以投票成功。
根据如下行为,可以得出如下结论:
1
:投票需要有两次和服务器的交互,第一次向服务器提交投票结果,第二次交互向服务器
提交是否确认此结果。
2
:此两页面之间的
session
是有联系的,也即同一个
session
下不能投两次票。当关闭浏览
器,重新开启刘拉尼后,因为相当于新开了一个
session
,所以仍然会投票成功。
知道了这个后,就开始抓去两次交互的
HTTP
头信息(
Header
信息)
第一次交互的信息如下(点击投票按钮)
:
从
网
页
源
代
码
中
可
以
分
析
出
来
,
数
据
是
post
上
去
的
,
post
的
数
据
为
"checkvalue=32&bbb=%CD%B6%C6%B1&ilc=0&kkk=22"
,其中
checkvalue=32
即为投票选
中的复选框的值,
bbb
为投票按钮的名称,
"%CD%B6%C6%B1"
为
"
投票
"
两个汉字的转码。
ilc=0
和
kkk=22
是两个隐藏域中信息,作用还不明确。
然后接收到的
Header
如下:
可以看到里面有一个关键的地方
Set-Cookie
:
ilc
=
22
,也即设置了一个
cookie,
这个
cookie
值为
22
,也即
post
上去的
kkk
的值,猜测这是此次投票的编码。