Tengs

Design & Develop

  • 言论自由
  • 技术文档
  • 日常琐事
  • 其它东西

刷票

基于批处理和油猴脚本的轻量级网页刷票实现(二)

2015年11月18日 / Leave a Comment

去年写过一篇《基于批处理和油猴脚本的轻量级网页刷票实现》,结果不少朋友满怀希望地给我发来各种微信投票链接,却由于部分投票采用了较为严格的验证机制,上述办法完全行不通,搞得我自己也很不好意思。吃一堑长一智,这里必须提前声明,下面的文字仍然不涉及需要关注后才能投票的微信刷票实现,有此需求的同志请自动绕过!

言归正传,在《基于批处理和油猴脚本的轻量级网页刷票实现》中,我忘记了老毛同志“没有调查就没有发言权”的忠告,未经测试便信口胡言“只要将你的电脑直接连接到调制解调器,当你每次执行ipconfig/release和ipconfig/renew后,你会得到一个新的IP地址,这时候就能开始新一轮的投票”,结果前阵子为了要给某比赛刷票,兴冲冲借回一个“猫”(家里是路由和调制解调器一体机,当时买的时候真没考虑到不能刷票的问题),才发现问题没有想象中那么简单,猜想是不同厂商的产品配置会有所不同,所以执行ipconfig/release和ipconfig/renew后,不见得都会更新ip地址,由于借不到更多的“猫”测试,这个猜想也仅仅停留在猜想阶段,有兴趣的朋友不妨探索下。还好天无绝人之路,ipconfig/release+ipconfig/renew不行,还可以使用rasdial命令断开重连网络,代码是这么写的:


set /a n=0
:cont
rasdial entryname username password
ping -n 5 127.0.1>nul
rasdial /DISCONNECT
ping -n 1 127.0.1>nul
set /a n=n+1
echo %n%
goto :cont

entryname是连接的网络名,可以在控制面板网络设置里变更;username是营运商给你用户名,有可能是一个电话号码,也有可能是一串很长的字符;password是用户名对应的密码。ping -n 5 127.0.1>nul 表示ping自己的主机5次,间隔大概4、5秒,也就是说联网后4、5秒又断网,再连便获得了一个新的ip地址,所以这个参数可以根据自己的网络带宽等实际情况调整。上面这段代码经过测试,可以实现更改ip的目的,但偶尔会出现多次断开重连获得的ip地址一直是同一个的情况,猜想可能是服务商的ip地址池分配问题,同样未能深入探究,有高手不妨留言给我讲解下。

除了上述方案外,还可以使用代理服务器进行刷票。经过不懈的搜寻,本人发现了一个名为“无界”的代理服务软件,该软件使用十分简便,下载后直接打开即可。猜想这东西后面有一个十分庞大的代理服务器群支撑,而且每次服务请求并不固定由哪一个服务器提供代理,这一点对于刷票者来说,简直就是福音。有意尝试的朋友可以直接百度下载。当然,这个方案也存在缺陷,因为毕竟代理服务器的数量是有限的,换句话说,IP地址也是有限的,这直接限制了能够刷到的票数(在我这边的测试环境下,用“无界”能刷到300多票,当然,假如每个ip每天都能投一次票的话,隔天还是能再刷300多票的)。

上述方案针对Internet,在内网情况下基本行不通,这时候可以尝试通过netsh更改内网ip地址,代码大概是这样的:


netsh interface ip set address name="本地连接" source=static addr=10.10.10.10 mask=255.255.255.0 gateway=10.10.10.1

其中,name参数是连接名称,基本是“本地连接”啊、“本地连接 2”啊之类的,通过控制面板网络连接可以查看,记得加英文双引号””;addr是希望获得的ip地址,mask是子网掩码,gateway是网关,这三个要根据你所处局域网的实际情况填写,可以通过ipconfig找到当前的网关和子网掩码,照搬上去,然后通过子网掩码和当前ip地址确定addr可以选择的范围,比如上述命令中,“addr=10.10.10.10 mask=255.255.255.0”这意味着你可以选择的ip地址范围是“10.10.10.2-10.10.10.254”,想了解为什么,可以百度ip地址分配相关内容。

搞定这个前期工作之后,可以尝试通过变量为addr赋值,这样就能实现ip地址定时更换了。

需要注意的是,当你要变更的ip地址被占用(这种情况很常见),会出现地址冲突,产生各种各样的后果,所以,最好是等到夜深人静你的同事都下班关电脑了,再更改ip进行刷票。


分类: 技术文档 标签: 刷票

基于批处理和油猴脚本的轻量级网页刷票实现

2014年10月15日 / Leave a Comment

由于某种需要,在浪费了整整一天搜寻免费刷票软件无果后,毅然决定自己动手做一套。在度娘的大力支持下,经过一天的艰难探索,加之以牺牲一批脑细胞为代价,终于用“批处理+油猴脚本”实现了邪恶的刷票目标。

实验证明,这一解决方案适用于通过IP限制投票数量的投票系统。遗憾的是,由于无暇研究验证码识别机制,该套方案暂时应付不了有验证码机制的投票系统。下面,本人将详细介绍这种刷票应用的实现,有兴趣的小伙伴可以自己随我搭建一套爽爽。

众所周知,投票系统分无限制投票和有限制投票两种类型。对于无限制投票,刷票的方式很简单,比如用javascript编写一个自动点击按钮(或自动发送投票请求)、然后自动刷新页面的脚本,在油猴脚本(Firefox上的一种应用扩展,用于在任意网站上运行自己编写的脚本)上运行,就大功告成了。对于有限制的投票系统(比如每人每天仅能投几票),目前业界通用的技术无非是锁定IP或写入cookie。因此,要实现刷票,也就是要突破IP限制并删除cookie。对于突破IP限制,可以利用代理服务技术,但这种方式的缺点是实现起来比较复杂,而且代理服务器良莠不齐,免费的代理访问起来普遍较慢,用来刷票往往心有余而力不足,所以这种方式不太可取。值得庆幸的是,运营商为提高iP资源的利用率,大多数情况下给我们分配的都是动态IP(静态IP还是有的,比如我周围几条能用的线路都是,这直接导致了我不得不采用效率更低的天翼3G上网卡来刷,这是后话),这种机制给我们的刷票行动带来了很大帮助,你会发现,只要将你的电脑直接连接到调制解调器(就是说不能通过路由),当你每次执行ipconfig/release和ipconfig/renew后,你会得到一个新的IP地址,这时候就能开始新一轮的投票了。在此基础上,利用循环和延时,并将代码存为批处理文件(即*.bat文件),执行起来即可实现定期自动更新IP地址,批处理可以这么写:


set /a n=0
:cont
ping -n 25 127.0.1>nul
rem 上面的25代表25秒延时,可修改为任意值
ipconfig/release
ipconfig/renew
set /a n=n+1
echo %n%
goto :cont

刚才提过,这种方法仅适用于动态分配IP的网络连接,假如你用的宽带是静态IP(像我一样),那么只好找一个3G上网卡了。对于3G上网卡,实现IP更换的机制是断开网络连接并重连,批处理代码可以这么写:


set /a n=0
:cont
netsh interface set interface "更换为自己的宽带连接名" enable
ping -n 25 127.0.1>nul
netsh interface set interface "更换为自己的宽带连接名" disable
set /a n=n+1
echo %n%
goto :cont

实现了IP自动变换,接下来要做的就是实现网页上的自动投票。这里用到了Firefox浏览器和油猴脚本(GreaseMonkey组件),自己编写的javascript脚本如下:


// ==UserScript==
// @name       t
// @namespace  tengs
// @include    http://tengs.info
// @version    1
// @grant      none
// ==/UserScript==
//个人习惯,引入jQuery
var GM_JQ = document.createElement("script");
GM_JQ.src = "http://code.jquery.com/jquery-2.1.0.min.js";
GM_JQ.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(GM_JQ);
//Check if jQuery's loaded
function GM_wait() {
    if(typeof unsafeWindow.jQuery == "undefined") {
    	window.setTimeout(GM_wait,100);
    }
    else {
        $ = unsafeWindow.jQuery;
        letsJQuery();
    }
}
GM_wait();
function letsJQuery() {
    $(function () {
        //下面用AJAX发送投票请求
        $.ajax({
            type: 'POST',//这个是请求方式,有可能是GET
            url: 'http://xxx.com/voted/123456',//投票处理地址要根据实际填
            //data: data,要根据实际情况确定是否有发送数据
            success: function(){location.reload();},
            dataType: 'json'
        });
    })
}

对于AJAX里面的参数,可以通过FireBug(也是Firefox的一个插件)监控一次真实的投票过程,从发送、接收的数据包中获取。

值得一提的是,刷票的过程中,由于网络是自动断开重连的,有可能出现网页正在请求数据却刚好断网的情况,这时候会出现网页假死,而且这种情况下由于页面未加载完成,油猴脚本不能执行,所以不能通过javascript来刷新。这时候,刷票也就停止了。解决的办法是应用Firefox的Reload Every插件(好吧,又是插件),设定一定时间间隔自动刷新页面即可。

好了,愉快的开发之旅已经结束,接下来就享受一下刷票的乐趣吧!

说了这么多,现在问题来了,我是不是应该开个淘宝承接刷票业务,赚点小钱还房贷呢?!


分类: 技术文档 标签: 刷票

标签

315 360 ASP ASP.NET bug CentOS CSS CSS 3.0 CSS HACK Google Google图片搜索 Hadoop host文件 HTML5 ie6 IPV6 javascript JDK js osql photoshop php phpMyAdmin 中庸 主流 交易 人生 人类劣根 刷票 哲学 大学 感想 文学 文言文 期末 狂想 现代诗 琐事 科学 箴言 经济 网络安全 视频广告 诗歌 霸位

近期评论

  • 壮敏发表在《讨贼檄文》
  • 黄祺发表在《顿悟》
  • 西班牙超模发表在《致加西亚》
  • 西班牙超模发表在《致加西亚》
  • 糗事百科发表在《IE6 去除 input border》

Copyright © 2023 Tengs.

WordPress Theme by themehall.com

粤ICP备12053888号