智能手机黄牛产业链剖析

2018-05-14 • 业界评论

2014年底,父亲给我发消息说原来的手机不行了,看我一直用魅族,质量、易用性方面都不错就也想买一台,但是抢不到想让我试试能不能抢到。确实,这个时候魅族的手机太难抢了,试了两次都没抢到。但是听闻黄牛渠道货源充足,于是便通过QQ搜索“魅族”“抢购”等关键词找黄牛群并潜入其中一探究竟,看看黄牛是怎么抢的。2015年节假日,略有闲暇,不妨将我潜入其中看到的黄牛世界的样子分享给大家,权当拓宽眼界罢了。

黄牛产业分工明确,涉及普通抢手、抢购软件研发、黄牛运营、渠道销售、快递以及背后提供资金支持的真正操盘手(下称大Boss),还有边缘参与者包括云计算服务商、万能的淘宝、支付等等。

黄牛运营负责黄牛群管理、抢购任务发布、抢购软件点卡销售、抢购账号销售、资金垫付。普通抢手从黄牛运营那里购买点卡和账号、获取抢购任务信息、进行抢购,最后从黄牛运营那里获得佣金。软件研发人员根据抢购店铺或商城的最新抢购方式变化在每次抢购前发布新版本的抢购软件。

抢手图利加入黄牛群,这些抢手什么背景的都有,有的是学生,有的是工作比较闲的人,总之各行各业都有。但要想抢到手机并不是简简单单拼人头就行的,毕竟黄牛人数和广大真正的需求者仍差距甚远,所以重要的是手中掌握有大量的预约账号或社区账号并且在软件的帮助下伪造大量的并发请求,而这些资源都是由黄牛运营提供的。在事前注册账号由和黄牛合作的专门账号售卖网站来完成,然后在抢购前卖给抢手,由于很多账号会被系统识别为黄牛且一旦抢成功以后就不能再用,所以每次或者每两三次抢购抢手就得向卖账号的网站购买账号,通过银联或者支付宝来结算,购买数量大约每人几十个。此外抢购软件也不是免费提供给抢手用的,而是采用点卡形式提供,在淘宝公开售卖,点数在抢购成功后按既定点数扣减。验证码也是一个大问题,可以选择手工输入,但一般抢手会购买验证码识别服务(如打码兔),抢购软件自己提供识别功能或者提供几家知名验证码识别服务的接口,用户只需要输入打码服务的账号和密码就可以直接使用。

黄牛运营发布的抢购任务通常包括以下信息:指定规则的随机收货地址、指定规则的随机收货人电话号码、收购手机型号、新版本软件网盘下载地址等。任务发布后,抢手买账号和点卡,提前几分钟启动软件发起多账号的并发请求,之后就是等结果或者对于系统识别不了的验证码手动输入结果。一旦抢到手机,若是在淘宝天猫一般是抢手自己付款,在官网商城不允许改信息的一般由黄牛垫付。对抢手而言,有的就是用自己的PC在抢,有的则租用云服务器。就我渗入的那个群的情况是,有的抢手就买了阿里云的服务器,还有用工作单位的机器来抢购的,里面还有一个人说自己是超算中心的研究生但是不太敢用那里的机器来抢购,可见抢手构成之复杂。

黄牛收到货之后,交给一线渠道(实体店或淘宝店)去销售,一般比原始售价高200~400元。那么地址和电话号码随机,黄牛是怎么收到货的呢?其实这些地址和电话号码看似随机但都是有规则的,分到相应区域快递点会被识别出来送到相应的地址去,根本也不需要打电话通知,也就是说快递也已被收买。黄牛收货后另一个操作就是给抢手返佣,如果之前由黄牛垫付的那么仅返佣金,一般为40~60元一台,如果是自己垫付的那么则返原价和佣金,佣金会比黄牛垫付的要高大约5元钱,但是风险比较大,毕竟钱是你出的但是手机已经到了别人的手里。

从我渗入的黄牛组织来看,他们大约有50多个群,每个群人数接近2000。抢手有的颗粒无收,有的运气好能一场拿下好几台,其实并不保证每个人都能抢到即使是用了软件并且买了账号。按实际参与者抢到平均一台,每台售价1500元来算,那么黄牛需要每场抢购垫付的资金量就非常之大,所以不是几个管理群的人就能承受得起的,这后面还有真正来管理这些黄牛运营者的背后大Boss。有的时候抢购需要垫付的资金超出预期,黄牛运营需要先与大Boss沟通是否垫付或者放弃不要(他们叫做“烂单”)。而垫付资金的周转周期大约为10天,10天里魅族、小米、华为一共大约会有三四场抢购,每场垫付资金再乘以场数,大Boss到底手里有多少资金在运作,就大概能有个数了。抢手其实很亏,点卡得买,账号得买,打码服务得买,然而抢不抢得到还是保证不了,每台的佣金其实也并没有多少,只能算是挣点零花钱。刨去返佣之后,黄牛组织还是可以每台有两三百元的收益,黄牛运营、软件开发到底能分到多少钱这个我不太清楚,但这个整个组织的收益规模大家可以自己算算,相当惊人。

黄牛组织并非只有一个,有很多人看到了这其中有利可图,便创造了诸多的黄牛组织。黄牛组织背后的大Boss会有哪些人不能确定,但必定实力雄厚。据我所了解,其中一种身份就是众多实体数码店(品牌加盟商)的拥有者,如经常看到的某某数码,大概就是这样的公司。

那么抢购软件是怎样的存在呢?有Java的,有Qt/C++的,有Python的,百花齐放。抢购软件通常包括联系信息生成规则管理、抢购型号优先级管理、点卡授权体系、打码接口还有最核心的抢购模块。软件制作者的身份不得而知,而且开发难度也并不大,但是需要不断根据抢购网站的变化来更新跟进。

黄牛群里还偶有骗子混进去,比如发布一条消息“我这里有一台某某型号手机,只加价几十块钱就转”,如果你给他打了钱,然后就没有然后了。在群里看到不少人上当受骗。

黄牛的问题差不多说清楚了,那么问题来了,我最后到底买到手机没有呢?感谢万能的淘宝,有一家魅族加盟店参加了淘宝的年终大促,魅族售价只比官方贵20块钱而且送手机壳、贴膜等等配件还顺丰包邮,相当于没有怎么加价,我核对了这家店铺的淘宝认证资料和魅族官方公布的加盟店列表中的信息,发现是一致的,于是就下了单顺利拿到了手机。

文章最后再吐槽魅族抢购页面的一个小把戏。进入魅族抢购页面后,分析页面上的JS脚本会发现:页面会定时循环产生一个0~1之间的随机小数,只有当这个数大于0.6的时候才会去后端去拿一个token也就是进入真正抢购页面的令牌,然而去拿token这个操作在魅族系统压力比较大的时候并不是总能拿得到的,所以有时候会一直在几只熊猫排队的页面等到抢购结束也进不去。So,直接高并发请求去拿token就好了,所谓排队是骗人的。

原力的黑暗面

2018-01-01 • 个人情感

在经典电影《星球大战》中,极具武士天赋的天行者因为在绝地长老院快速提升地位的不顺、寄希望于黑暗原力能够拯救自己的爱人而倒向了黑暗原力,最终毁了自己本可能辉煌的绝地武士生涯。

我们在工作和生活中,可能因为他人的原因而有诸多这样那样的不顺而产生非常大的情绪,情绪一旦释放,伤人亦伤己,伤人一时心中快,伤己形象被破坏。

在这个社会中,形形色色的人一起组成了团队和集体,我们无法强求每个人把事情都做得尽善尽美,对别人的不足要持多容忍的态度,即使心中非常不快或者不满意也要对人保持尊重、保持耐心,团结所有可能的力量,才能组成一个成功而有战斗力的团队,才有可能成为领导团队的人。

情绪管理和原力是一样的,皆有两面。情绪管理做得好可能促使你成为众人敬仰的一代绝地武士,做得不好滑落到黑暗面则可能成为众矢之的寸步难行难成大事。

从云计算发展路径看人工智能的短期发展

2017-10-02 • 业界评论

近来,人工智能技术越来越多地应用到我们的常见生活场景,逐渐成为当下最热门最受关注的技术。不少人的想象无边无际,认为人工智能可能产生达到甚至远远超过人类认知和智慧水平的机器。在遥远的未来,人工智能能够发展到怎样的水平仅作预言或预测无可厚非但现在还难以下结论。当下,最重要的还是要看清人工智能短期发展的趋势和前景。

我们不妨回顾下从云计算的提出到现在云计算行业发展的情况。在2010年的IT领袖峰会上,BAT三家的李马马三人对云计算分别发表了个人的看法,这段视频时常被人拿出来在社交媒体上发一发。李彦宏认为云计算是新瓶装旧酒,本质是客户端和服务端间关系的变化,对于某些大规模的分布式的网络应用更加适宜,传统应用上云并不是理想的选择,要改变的东西太多不太现实。马化腾认为很多应用服务像水电一样要通过云的方式来实现为时过早,大概还需要千百年才行。马云则认为在自己业务发展过程中有很多值得分享给他人的东西,能够促进别人的发展,相信云计算能够做这样的事情,并且可能是爆发性的变革。很多人对三人观点的看法是马云的观点领先于李彦宏和马化腾,但我并不这么看。李彦宏看的是云计算发展最初期的样子,卖网络服务器做托管没什么价值,云上卖服务又让人难以接受。马化腾看的是云计算中长期的发展,像水电一样即取即用,现在来看还太远。马云则仅仅是从理论层面上认为云计算的一些价值值得挖掘。李彦宏和马化腾二人都是从技术的角度看问题,其实观点都没有错,只是二人没看清云计算的整个发展路线,忽略了云计算所能带来的好处。今天阿里云的发展大家有目共睹,但是真可以说是发展到水电煤一样的水平,不仅仅对B同样对C也可以实现计算能力和衍生服务的共享了吗?其实仍然没有完全实现,所以马化腾当时认为短期实现不了是没错的,现在还是远没达到如我们理想预期中那样的水平。最初,也还不是先做弹性服务器托管,后来数据存储、中间件、安全才逐渐在云上服务于客户,慢慢地更多的具体性的行业性的服务才通过云来提供。云计算发展到今天,我们就可以看到,云计算所提供的是集约化的专业化的服务,提升效率,降低成本,价值体现出来,人们对云计算逐渐认可了,业绩也就自然而然有了。云计算的发展远还没有到头,现在依然还只能说是云计算的初级阶段,也许正在发展中级阶段,对B业务的大发展阶段,未来更通用更广谱更便利的应用依然还没有到来。

再回头来看人工智能,其并非全新的概念,只是最近伴随着机器学习尤其是深度学习的热潮,AI又来了新的一波,而且更多地应用在常见场景中了。关于人工智能,我认为可以分为近的和远的两个目标,近的是希望借鉴人类的智能行为研制更好的工具以减轻人类智力劳动,要实现弱人工智能或者称之为服务型人工智能,远的这是希望研制出达到甚至超越人类智慧水平的人造物,具有自我认知和学习能力,要实现强人工智能。国内的人工智能领域权威周志华老师认为主流人工智能学界的努力和目前所取得的成果都是朝向弱人工智能,强人工智能没有可靠的研究路径和扎实的研究而且我们也不应该去研究它。而未来学家雷·库兹韦尔则认为逆向人脑也许是可能的,未来可能出现人机结合的更高级物种,更强的人工智能。无论理论界如何争论,大众观点靠谱与否,这都不影响我们对短期发展趋势的判断。和云计算的发展一样,罗马非一日可建成,人工智能也是不可能在短期内就实现彻底的突破的,尤其是在强人工智能领域,一切都会循序渐进。现今在实现相对高级的人工智能技术之前,我们应该理性而简单地看待人工智能技术的发展。现在人工智能技术的突破仍然是在特定类型的行为上,比如在图像识别、语音识别、机器翻译、自动推理、游戏等等方面,人工智能或者说机器学习都取得了不错的成果,未来这种特定领域的技术还会不断演进,产品化做得越来越好,带动某些领域产生不错的商业产品和企业。人工智能技术的工程化、平台化和通用化将是其发展水平的一个重要里程碑,将人工智能所使用的算法、模型等抽象工程化,将自然语言处理、图像识别等特定领域技术标准化和接口化,能够供非人工智能领域的专业技术人员在平台上方便地基于云使用某种技术来完成某种功能,越来越多的人具备基本的人工智能技术应用水平,才能让人工智能给我们的生活、商业领域带来真正广泛的价值。未来几年,相信无论是学者还是工程师,都会继续在这样的思路和短期愿景下,本着严谨的态度继续改进我们的人工智能技术。同时,非人工智能专业科研和工程人员也应该关注和学习基本的人工智能技术,将人工智能作为工具广泛地应用在各类业务场景来取得更好的商业业绩会是以后对人员基本素质的要求。另外,从最近的招聘情况来看,很多刚刚了解机器学习一点基本概念的学生就敢于积极申请人工智能的职位,这是不太正确的态度,想要从事专业的人工智能技术还是需要比较深入的研究和基础的,就像申请普通业务功能研发职位一样也要求与之相匹配的能力,不分青红皂白就一拥而上在一定程度上反映了很多人的浮躁。

无论对哪种新出现的技术潮流,保持客观理性看待,顺势而为,才是正确的态度。

JavaWeb开发中的字符编码问题的直截了当解决方案

2017-01-11 • 技术文章

解决方案

从容器字符编码配置、响应头设置、Meta字符集设置全部统一为UTF-8,不要通过自己写代码做层层转码。

容器:URI_ENCODING=UTF-8,USE_BODY_ENCODING_FOR_QUERY_STRING=true

ContentType:text/html; charset=UTF-8

Meta:charset=UTF-8

当然,对于用户可以手动拼参数的场景,比如定制百度搜索,那么应该具备自动探测编码的能力,而不是仅固定支持,百度可以自动识别queryString的编码是个很好的范例。

备注

HttpServletRequest.setCharacterEncoding方法仅仅只适用于设置POST提交的RequestBody部分的数据的编码而不是设置GET提交的queryString的编码。

HttpServletRequest.getPathInfo和getParameter返回的结果是由Servlet服务器解码过的。

HttpServletRequest.getRequestURI返回的字符串没有被Servlet服务器解码过。

编码随谈:加号与空格

URI把允许出现的字符分为保留未保留。百分号编码一个保留字符,其实是在这个字符的16进制ASCII值前面加上转义字符%,未保留字符不需要被百分号编码。对于那些不在保留字符和未保留字符范围内的字符,先转换为UTF-8字节序列,然后对其字节值使用百分号编码。在正常的编码解码流程中,编码的时候先把加号替换为%2B,然后把空格替换为加号;解码的时候先把加号替换为空格,再把%2B替换为加号,就是正常的。但是在已经urlencoded的内容中如果使用这二者不慎,就很有可能造成编解码不正确的问题了。

SSH会话保持基本设置

2016-03-27 • 技术文章

配置文件

1
2
/etc/ssh/ssh_config(Linux)
~/.ssh/config(MacOS)

新窗口连接同一服务器免重登

1
2
3
host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

最后一行表示在指定目录下生成sock文件,保存会话记录。

避免SSH连接断开

为避免packet_write_wait: Connection to [IP]: Broken pipe连接断开的情况,可通过以下配置。

1. 客户端实现(其中55代表定时向SSH Server发送心跳的间隔秒数,下同):

1
2
host *
ServerAliveInterval 55

2. 命令实现:

1
ssh -o ServerAliveInterval=55 user@sshserver

3. 也可以在服务端sshd_config中配置,避免客户端单独配置:

1
ClientAliveInterval 55