基于批处理和油猴脚本的轻量级网页刷票实现(二)
去年写过一篇《基于批处理和油猴脚本的轻量级网页刷票实现》,结果不少朋友满怀希望地给我发来各种微信投票链接,却由于部分投票采用了较为严格的验证机制,上述办法完全行不通,搞得我自己也很不好意思。吃一堑长一智,这里必须提前声明,下面的文字仍然不涉及需要关注后才能投票的微信刷票实现,有此需求的同志请自动绕过!
言归正传,在《基于批处理和油猴脚本的轻量级网页刷票实现》中,我忘记了老毛同志“没有调查就没有发言权”的忠告,未经测试便信口胡言“只要将你的电脑直接连接到调制解调器,当你每次执行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进行刷票。
关于“五毛钱不要”的一点思考
傍晚去菜市场买洋葱,称了一颗,菜贩曰:“3块5。”
当我十分高兴地以为终于可以花掉钱包里很占空间的几张毛票时,直接遭到了卖菜老妇的鄙视:“给我3块就好了,一毛钱的不要,现在谁还用一毛钱……”
这话在令当时情景有点难堪的同时,也让我十分惊异。突然联想起几个星期前回家帮忙看化肥铺,老爸告诉我:“尿素1斤1块3,买1斤的话直接称到1块5,现在没人会找两毛钱。”——当时还不以为然,今天领教了卖菜老妇的“5毛钱不要”,才知确有此事。
难道国人真的富足到了“5毛钱不要”的地步?
假如上述问题的答案是肯定的,那倒是一件十分值得欣慰的好事。但我的脑海中却不由自主地闪过“津巴布韦币、日元、国民政府时期扛着一袋钞票去买菜的老笑话、物价上涨、通货膨胀”等等关键语。
联想到前阵子小道消息传言XX部门正组织探讨发行500元面值人民币,虽然相关计划目前并未有见推行,但似乎又和“5毛钱不要”有着千丝万缕的关系。
我不是经济学家,甚至连买了两三年的《经济学原理》都没翻完,自然没有资格探讨中国经济。但作为老百姓,一个很直观的感觉就是,“5毛钱不要”是个很不好的开头,或许目前对我们的生活并没有造成多大影响,但当这种形势不断持续,出现“5块钱不要”乃至“50块不要”甚至“500块不要”时,情况将变得十分糟糕,或许你那时候的资产终于如愿数以亿计,但随着人均国民收入也达到相应数量级,这将成为一个彻头彻底的悲剧。姑且不论进出口贸易与第二产业兴衰等等高级命题,就个人家庭生活而言,你每月的收支账单莫名其妙要多处理N个零,不得不说是一件很令人烦心的坏事。
基于批处理和油猴脚本的轻量级网页刷票实现
由于某种需要,在浪费了整整一天搜寻免费刷票软件无果后,毅然决定自己动手做一套。在度娘的大力支持下,经过一天的艰难探索,加之以牺牲一批脑细胞为代价,终于用“批处理+油猴脚本”实现了邪恶的刷票目标。
实验证明,这一解决方案适用于通过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插件(好吧,又是插件),设定一定时间间隔自动刷新页面即可。
好了,愉快的开发之旅已经结束,接下来就享受一下刷票的乐趣吧!
说了这么多,现在问题来了,我是不是应该开个淘宝承接刷票业务,赚点小钱还房贷呢?!
由好莱坞女星艳照泄漏引发的信息安全思考
日前,国内外大小媒体纷纷报道了“黑客利用苹果手机iCloud漏洞窃取曝光好莱坞女星艳照”事件,这可谓是继陈冠希和李宗瑞两位仁兄“大作”消沉许久之后又一网友们喜闻乐见的“网上资源”。
当然,话分两头讲,艳照当事人可就不见得那么好受了——作为一个从小就被灌输以“礼义廉耻”价值观念、习惯在公众面前衣冠楚楚的正常人来讲,自己私底下一些见不得人的照片突然之间曝光在大众面前,终究是件很令人难堪的事情。倘是脸薄害羞之人,或许伤害要更加严重,从此一蹶不振甚至于厌世轻生也是常有的事,影响之恶劣,不得不引起看客诸君的注意。这是实话,毕竟喜欢自拍而又缺乏信息安全理念的读者朋友并不在少数,在此,本人发扬了一下雷锋精神,整理一点建议,供参考!
从本质上讲,冠希老兄和本次事件中的众好莱坞女星都犯了一个相同的错误:让自己那些“见不得人”的私密东西失去了掌控。区别在于,一个是贸贸然把存有“资源”的电脑交给了他人,另一个是贸贸然把“资源”上传到了网络上。这个世界上从来就没有绝对安全这种说法,事实上不难想象,假如当事人虽然进行过那些“见不得人”的活动,但当时并没有拍摄这些照片视频,自然也就不会有后来的这许多麻烦——这个道理浅显易懂,却是信息安全的最高境界:根本没有涉密信息,自然谈不上信息不安全。当然,人总是怀旧的,对于一些有“纪念意义”的活动,拍照摄影作为日后回忆的素材,也属情有可原,在这种情况下,就不得不多留个心眼,免得后患无穷。其实说到底也就一句话,要提高安全意识。
那么,何谓安全意识呢?个人认为,一方面是不要相信任何人,另一方面是不要相信任何技术。
诸君大概早有耳闻——某某人因打开了谁谁发过来的链接或安装了某个不明来源应用,导致QQ、银行卡账号被盗——之类的事情,这都是过于轻信他人的苦果。笔者始终有一个观念:不能将现实中的熟人的各类网络账号等同于该熟人本人,因为任何账号都有被盗号的风险,这也是各类盗号诈骗者常用的伎俩——盗用熟人的账号和你套近乎,伺机让你汇款,或者让你安装某木马,或者直接要你给他远程控制……因此,即使是和再熟悉的熟人通过网络联系,当涉及到敏感话题时,必须先通过一些比较私人的问答确认对方身份。此外,不要轻易将存有隐私信息的存储介质(如U盘、硬盘、光盘等)交给他人,这个道理应该是人都懂。
至于安全技术漏洞引发的问题,我认为很多情况下是由于当事人缺乏相关技术背景知识而蒙受忽悠。如同本次事件,相信苹果在推广其iCloud应用时,一定曾天花乱坠地吹嘘过其云存储如何如何安全,但事实终究是事实,再安全的云存储,也有泄密的一天。这个故事也再一次警戒我们,安全始终是相对而言的,一种安全技术获得公认,仅仅是因为它还没被攻破而已,更何况还有一种情况,假如软件的开发者本身有意窃取你的隐私,随便留个后门,简直不费吹灰之力(别觉得不可能,看看小米在台湾出的丑闻)。从这点上讲,把秘密放到U盘然后锁进柜子里,不见得不比放到云储存上来得安全。
这是玩笑话,不过的确有些道理。那么,到底应该怎样保护私密信息呢?归结起来讲,首先是要让它离开网络,不要上传到任何网盘、云存储、服务器什么的上面,不要放在能上网的电脑上面,相信我,这是杜绝信息遭受黑客窃取的最有效途径;其次是混淆私密信息,高级点的可以找一些文件加密软件,对文件进行加密(事实上任何电子文件本质上都是一堆二进制数字,加密的原理就是改变这些数字的排列,致使文件的本义发生改变,这的确是防止信息泄露的有效方法,举个简单的例子,在一个私密文件的数据中每隔10位增加一个0,得到的将是一个完全不同甚至毫无意义的文件,即使这个文件被窃取,意图破解者必须猜测,我到底是每隔10位还是每隔9位、是加了一个数据还是抽掉了一个数据),简单点的可以弄一堆杂七杂八的文件放一起(曹操的疑冢就是这个道理),当然,私密文件的文件名要起得一眼看上去完全不留意。之后可以把文件存到一张普通光盘、一个普通U盘等介质上,然后不要忘记和其他普通的光盘或U盘扔在一起,事实上锁进保险柜或者其他什么柜子里的确是个很不错的主意。
顿悟
很多时候钱未能解决问题,深究原因,主要是因为钱还不够多……
最毒贩子心
前几天经过菜市场,顺手买了几个橙子,每天晚上下班回来就吃一个。
之前几个晚上的橙子,感觉还可以,今晚拿出最后一个,却吃得索然无味。看那橙子,硕大无比,不料掰开,确是皮厚汁少,啖之如水,瓜瓤成絮状,整个下肚,发现喉咙都没湿透。
突然想起,最大的这个是水果贩子给我挑的,当时还一个劲鼓吹曰:个大甜……
霎时有点恶心。这厮也太过分,我看她傍晚7、8点还在摆摊,料想生活不易,也不问价,也不挑货,随手拿起中等大小的就往袋里装,如此善良的顾客,她居然还有脸面骗我“个大甜”,真可谓世态炎凉。毫无疑问,一看她那装扮,绝对资深水果贩子,几乎可以排除她也看错橙子的可能。
当然,过完称算价钱绝对是个整数——比如,10块。这一点在市场上几乎是常态,却也一直最令我反感,当时还想,是不是我多拿一个或者少拿一个也一样是10块钱。老实说,比起去市场买菜,我宁愿去超市,价钱且别论,享受的是严格的斤两和总价,一毛是一毛,一分是一分,从来不会告诉你,整10块——这让我不会每次买完后就有蒙受欺诈的不快感。
哎,何苦呢?做生意诚信第一,别老是一看“咿,后生仔,穿这么整齐,没生活经验好欺负……”就真的欺负了,当然,作为穿得整齐没生活经验的后生仔,的确不会当场和你争论一块几毛钱,但从此你注定少了一个顾客。
我真的再也没有到那些整10块的摊位买过任何东西……
恍然醒悟
端午假期之后,就没回过家了。
从上星期开始尝试有别于以往的周末生活:早上八点半带着牛奶面包出门,下午四点半背着笔记本回宿舍。一整天待在办公室,关上门,一个人静静地看书、做项目。仿佛又回到了大学生活,虽然图书馆换成了办公室,但不变的是心境——每天都过得很充实,知道自己在进步。即使明知辛勤钻研、思考的很多东西,到最后99%都是白折腾,但起码还能自我安慰:我已经尽力了,做出来的东西没能拯救世界、没能改变我的人生,仅仅是运气问题而已。一个人的运气可以很差很差,但不会总是很差很差,再小的概率也终究会有发生的一天,我要做的,仅仅是坚持,再坚持。
其实这样挺好,不像以往的周末浑浑噩噩,没任务的话便窝在宿舍一整天不知所为,然后夜里睡下满是摆不脱的罪恶感。现在过得挺阳光,看书累了随便从手机通讯录或QQ好友列表中找一个亲戚朋友,聊上两句,知道彼此还活着,也没忘记对方,然后说拜拜,有空再聊,接着继续做项目。肚子饿了回宿舍路过菜市场还能顺便买菜自己煮,夜里天气好还能回局打打球……
突然想起一句话:这才是生活。
而我却虚度了将近一年才恍然醒悟。
负存在感
找不到罗盘,
丢失了动力。
愈加深层的茫然,
步步逼近的负存在感。
权威难以反驳,
世俗无法战胜。
思想的灵魂,
在体制寒风中颤抖。
于无所事事中消亡,
在不知所措下堕落。
少年的梦啊,
魔鬼正在掠走!




