Shell's Home

Jan 19, 2013 - 1 minute read - Comments

封抢票插件究竟封的谁

12306抢票插件被工信部封杀的事情相信大家都听说了,具体我就不细说了。

首先说明一下我的立场。我不需要春节回老家,用不着。所以我也不抢火车票。你们不用质疑我吃不着葡萄说葡萄酸,也不用骂我仗着技术欺负你们。我只是把我看到的和想到的说出来,仅此而已。

我先简单说一下,抢票插件的工作机理。需要说明的是,由于我自己不用,封杀后也比较难找到渠道弄一份来。我是通过作者叙述反推和猜测工作机制的。如果有问题,请联系我,我尽量修改。

此事合不合理

个人认为,12306抢票工具,主要简化了铁道部系统登录,刷票,购票的过程,使这个过程更加简洁。就我个人理解而言,抢票插件是针对铁道部的12306定制的一个http工具组。他的主要功能,就是在铁道部不合理的UI上,加了一层包装,方便用户使用,仅此而已。

为什么这么说?我们反过来看,站在程序员的角度,如果要恶意抢票,有什么办法?

  1. 使用phantomjs。phantomjs是一个headless browser,每个phantomjs实例大约是20M内存,可以模拟一个独立的浏览器。如果网络撑的住的话,一台8G内存的机器,最多可以开启400个会话,模拟400个浏览器同时登录。由于12306没有限制一个IP可以登录几个人,因此在phantomjs上面写抢票插件,可以做到400个浏览器同时刷票的效果。
  2. 使用python开发定制化爬虫。这个是我的专长领域,我用这种技术对多个网站做过爬虫,抓上面的内容。采用这种技术的情况下,每个实例大约消耗8M内存。因此上面的机器可以支撑1000个浏览器。
  3. 把程序改用go写,并且将程序并行化。我没这么做过,不过大致估算了一下,租个4G内存的云主机,大约可以支持2000个以上的会话,相当于2000人同时抢票的效果。按照盛大云的价格来算,租个10天用来抢票只要160块,即使是个人也可以轻易租上百台,相当于20W个人同时抢票。

以上估算有两个问题,一个是校验码,一个是支付。

  • 校验码通常使用OCR可以解决,铁道部的校验码本身重码率就很高,内容识别出来就等于知道答案。而OCR,对于有经验的程序员来说,只是成功率问题而已。
  • 退一步说,OCR不解决也不是什么问题。OCR和支付让人工来做,其余事情系统自动处理。这样的系统也不是没有。

好吧,你们想象一下看看,以上一个系统,是怎么样一个存在?20W人同时抢票,你觉得自己胜算几何?

当然,你会反驳说花个近2W租服务器写程序有什么了不起的。是没什么了不起的,不过如果你抢不到票,花10块帮你抢票你做不做?一天只要抢200张票就够服务器开销哦。只要抢个400张票就可以满足开发成本哦。你觉得20W人连续不断抢票,一天抢不到1000张么?你太天真了。

这才是真正不合理的事情。 这些事情,抢票插件都没做。

封的住么?

我很怀疑这件事。别人不说,我专长就是写python爬虫。所以很明白,你要封掉爬虫,从技术上很难,得从业务上下手才行。至于行政手段,脑子进水了吧。

为什么?拿前几天的一个小事来说吧。我想看小说,某个网站允许看,但是只有会员才能下。没办法,我拿chromium调试了一下,然后写了个python脚本爬下来50多M的小说。加起来总共也没花10分钟。然后我去网络上问了一下谁有兴趣,把程序传给他们,就不管了。

看,爬虫就是这么简单的一件事情。

而且还有github在。如果要联合几个朋友写个爬虫,每人一个页面,我估计也是几个小时内可以完工的。

行政手段?那最多只能让普通用户找不到可用的插件,却不会让程序员写不出可用的代码,更不会让心存恶意的人止步。

密码学常说,不能指望对方不了解你的机制来保护安全(术语称为黑盒机制)。必须让所有人都能够看到过程。在这种情况下,你的信息仍然是安全的,那才是真正的安全。

当你的网站不安全,抓几个用漏洞的人来处分掉就假装网站安全了?你的改进呢?你的补丁呢?你是鸵鸟么?

铁道部的网站,就是这么个黑盒。明明大部分程序员都可以很容易的爬来爬去,却禁止让一般民众接触到这个事实,假装这件事情不存在。

事情的后果

也许有人说了,既然都写的出,你为什么不写一个?上面说了,我没必要抢火车票。再说,大部分抢火车票的程序员有好用的插件,为什么还要自己写一个?

现在,我假定普通人再也不能通过简简单单的装个插件抢火车票了。你们没发现这意味着什么么?这意味着有知识和能力者,和普通人,被彻底的分开了。尽管以前,有技术的翻墙,没技术的被墙。我们仍然可以假装这个事情和我们没有关系,可以假装这个世界仍然很美好。但是今天,有技术有知识有资本的仍然可以凭借技术弄票,没技术的就只能干瞪眼。

这是更大的不公,而且可以产生恶意的寻租。

原本程序员写个刷票程序是没什么好处的。虽然刷票快,但是普通民众也可以装个刷票工具来刷票。你那20W刷票大军碰到全国的刷票机器,恐怕也得缩着。既然普通人不能使用插件了,只能用浏览器慢慢的刷。那么,允许我大胆的猜一下——职业刷票者的黄金时代到了。

租个云主机,然后用专用的程序帮别人刷票。通过淘宝先交易,付定金,拿身份证,刷票卖。整个流程链太成熟了。现在唯一的麻烦——普通人自己有刷票工具——都不存在了,真完美。

别以为做技术的多清高,真清高就不会有做木马的了。

封掉插件便宜了谁

在讨论抢票插件前,先弄明白,谁在用抢票插件?是大多数不会技术的普通民众。谁在消费抢票插件?是各大浏览器厂商。这本就是不应存在的东西,你见过有刷秒杀的工具,你见过刷淘宝的工具么?

浏览器厂商为什么拿抢票插件当卖点?因为那玩意做的烂,你还不能不用。

封掉抢票插件便宜了谁?我不知道,反正不是每个买不到票的人。

此事不合理和不合法

而且,此事开了一个很不好的先河。网络不是法外之地,要封人也要讲一个合理合法。先不说抢票插件的合理性,单从合法性而言就显然不对。工业和信息化部作为行业管理部门,主要是管规划、管政策、管标准,指导行业发展,但不干预企业生产经营活动。你什么时候见过一家公司做了个产品,工薪部上去指手画脚的?

除非这个产品影响了整个行业生态。就像当初的QQ和360。

抢票插件哪里影响到计算机行业生态了?他只是影响了12306这一家网站的稳定性吧。如果因为网站的稳定性就可以让工信部出手约谈的话,那搜狗爬虫乱爬我网站,我写了robots.txt他也不管,这事工信部管不管啊?电信给我访问里插广告,这事情工信部又管不管啊?