程序员版--致青春(一)——facejoking刷票工具(谈刷票原理)

                                               程序员版--致青春(一)——facejoking刷票工具

         之所以取“致青春”这个名,是因为我的大学要结束了。想起之前写了一些小工具,但没写博客,因此现在补上,以此纪念我即将逝去的青春。

         有段时间在关注http://www.facejoking.com/的排名。发现其实排名很不稳定的,我在想真的有那么多人在玩这个么,是因为用户活跃导致排名的不稳定么?于是我在想是不是有什么刷票工具啊。网上搜了一下,没有额。于是自己想弄一个。

         投票规则的猜测。对于每次投票是否算是成功投票,这个很难判断,为什么呢?因为网上没有公布某个人的总票数,只有一个评分,这个评分估计是加权平均算出来的,一次的投票影响不了。因为无从判断每次投票是否成功,所以导致很难揣测投票规则。不过有一点可以肯定的是,我抓包看过每次投票的返回结果,是json格式的,有两种结果,{‘msg’:’error’}和{‘msg’:’success’}。我们暂且认为返回{‘msg’:’success’}算是投票成功。因为不确定服务器那边会不会忽悠我们这种抓包想做刷票工具的人。

         根据这个返回结果,我边用浏览器投票边抓包分析。分析出来的投票规则不是很明确,不过大概就是那样:

         1cookie检验,每次投票要携带一个CSRF_COOKIE字段在cookie中

         2同一ip有投票频率的限制,这个频率具体是多少不明确

         对于规则1,容易解决,具体到这次我是用python写得,每次post分析一下cookie,然后用正则表达式把字段提取出来就可以了。

         对于规则2,有两种思路,一是同一ip间隔发请求,二是伪造ip。前者明显不好,效率不高,而且频率限制目前也无法明确。后者我也想到几种方法。

1 可以用匿名代理服务器。不过网上找的匿名代理服务器都不是很靠谱,很多不能用。因此自己试过先用一个脚本过滤一下服务器列表,把能用的提取出来。不过这样要找很多服务器列表,效果才好。所以这不是一种好方法。因为刷票的效果取决于找到服务器的数量。除非自己写一个爬虫,不断的爬网上的匿名代理服务器的ip。

2 真正伪造ip。是否可以发一个http数据包,里面的地址是伪造的呢?因为我知道底层的socket链接,是可以自己填源ip的。后来发现原来是不可以的。因为http发送请求之前,要建立socket链接,这过程中要三次握手,如果ip是伪造的,这三次握手是不会成功的。不过还有一点没有验证过,网上有一些隐藏ip的工具,我找了一些免费的,都不可用的。收费的也试过。不知道所谓隐藏ip是什么意思,也不知道是否能真正的隐藏ip。还是这些工具只是通过连接代理服务器上网,这样达到隐藏ip的目的?

3 刷动态ip。因为电信或者是联通的宽带是动态分配ip的,因此可以写一个脚本自动断线自动重连,就可以获得无限的ip。这个自己没实现,不过应该也不难。怕的是会不会被运营商给加入黑名单啊。如果不会,这是最有效的方法,相信大多数的刷票工具都是用这种方法。

最终我实现的只是用匿名代理服务器投票,虽然效果不是很好。但写这工具的确学到了不少知识。因为想真正模拟真实的请求,对http头部的了解了不少,比如user-agent,x-forworded,referer等。还有,了解了刷票的原理,自己也推测了一下反刷票的措施:cookie校验,http头部校验,ip限制。对用动态刷ip地址的方法,我想应该是没有什么好的防范措施。

 

我的技术博客:http://linger.devhub.com/blog/1911559--facejoking/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值