腾讯QQ申请步骤分析
引子:自动腾讯的QQ号码改为从网页上申请以后,各种批量申请工具雨后春笋般的涌现出来,此起彼伏,经久不息。足见腾讯在即时聊天市场的强大魅力。这几日先来也分析了一下腾讯QQ的申请流程,现在简要记录如下:
首先,我们看一下手工从腾讯主页申请的流程:
1、在腾讯主页右上角点击“申请QQ号”链接,打开http://im.qq.com/qq/reg_freeqq.shtml
2、http://im.qq.com/qq/reg_freeqq.shtml自动重定位到http://freeqq2.qq.com/1.shtml,显示同意条款
3、点击“我同意”后进入http://freeqq2.qq.com/2.shtml,同时在其中显示验证码(),要求用户输入基本注册信息以及验证码
4、输入完毕后,点击“下一步”,出现选填详细资料界面http://freeqq2.qq.com/3.shtml
5、填写完成后,点击下一步,调用http://freeqq.qq.com/getqqnum申请QQ号码
6、http://freeqq.qq.com/getqqnum调用完成后,根据不同情况重定位到显示QQ号码、验证码错误、申请繁忙、当前IP申请人数过多等页面。
好,下面我们就结合这几步来分析每一步都做了什么。这里我们使用了http调试工具来跟踪网页发送、接收的数据。整理后摘出扼要信息如下(这里没有明确区分Http头和Http内容):
1、点击http://im.qq.com/qq/reg_freeqq.shtml
发送信息:
>>GET /qq/reg_freeqq.shtml HTTP/1.1
接收信息:
>>window.location="http://freeqq2.qq.com/1.shtml"
结论:本步骤没有进行任何其他设置,所以可忽略。
2、直接进入http://freeqq2.qq.com/1.shtml,或者由第一步点击进入
发送信息:
>>GET /1.shtml HTTP/1.1
接收信息:
>>Set-Cookie: PCCOCKIE2=677ddf5fb941fe930c653ccf750b106e00573e7446ff0ee3;PATH=/;DOMAIN=qq.com;
结论:这里设置了名字为PCCOCKIE2的Cookie。所以此步骤必须
3.1、在http://freeqq2.qq.com/1.shtml页面点击“我同意”,打开http://freeqq2.qq.com/2.shtml
发送信息:
>>GET /2.shtml HTTP/1.1
>>Referer: http://freeqq2.qq.com/1.shtml
>>cookie: PCCOCKIE2=677ddf5fb941fe930c653ccf750b106e00573e7446ff0ee3;
接收信息:
>>Set-Cookie: PCCOCKIE2=fe57a3187aa269725e9475588a3e87a1693799b7cc6c582b;PATH=/;DOMAIN=qq.com;
结论:这里将步骤2的cookie发送回去后,又接收到了同样的cookie,即刷新了PCCOCKIE2的数值。
3.2、在http://freeqq2.qq.com/2.shtml页面显示验证码图像http://freeqq3.qq.com/getimage?0.37246850717480795
发送信息:
>>GET /getimage?0.37246850717480795 HTTP/1.1
>>Referer: http://freeqq2.qq.com/2.shtml
>>cookie: PCCOCKIE2=fe57a3187aa269725e9475588a3e87a1693799b7cc6c582b;
接收信息:
>>Set-Cookie: getqqsession=4cac02be65041f0500aff1a67e71da0635b259980a20bad8b6102cb301e8e26b; PATH=/; DOMAIN=qq.com;
>>Set-Cookie: PCCOCKIE=3c1501e874cd9411427f2d5169b61aef05e1f6de68b5e335; PATH=/; expires=Mon, 31-Jan-2005 00:00:00 GMT;DOMAIN=qq.com;
结论:这里,申请图片的同时传入的数值为使用javascript生成的随机数,同时接收图片的过程中还设置了getqqsession和PCCOCKIE两个Cookie
4、填写完基本信息和验证码后,点击下一步,进入选填信息界面http://freeqq2.qq.com/3.shtml
发送信息
>>POST /3.shtml HTTP/1.1
>>Referer: http://freeqq2.qq.com/2.shtml
>>cookie: getqqsession=4cac02be65041f0500aff1a67e71da0635b259980a20bad8b6102cb301e8e26b;PCCOCKIE2=fe57a3187aa269725e9475588a3e87a1693799b7cc6c582b;PCCOCKIE=3c1501e874cd9411427f2d5169b61aef05e1f6de68b5e335;
>>RegisterType=1&Nickname=qKuuyyy4zk&Age=36&Sex=%C5%AE&Passwd=jrrh8wF&Passwd1=jrrh8wF&Validatecode=5PWL&sltCountry=0&Country=%D6%D0%BB%AA%C8%CB%C3%F1%B9%B2%BA%CD%B9%FA&sltProvinceId=%CE%F7%B2%D8&Province=%CE%F7%B2%D8&sltAllLocId=%C0%AD%C8%F8&CityNo=%C0%AD%C8%F8&imageField.x=25&imageField.y=12
接收信息:
>>Set-Cookie: PCCOCKIE2=987833d2489ec027d47463b908b274fcbb84a7e3afdeb8b0;PATH=/;DOMAIN=qq.com;
>>Set-Cookie: getqqsession=4cac02be65041f0500aff1a67e71da0635b259980a20bad8b6102cb301e8e26b;PATH=/;DOMAIN=qq.com;
>>Set-Cookie: PCCOCKIE=3c1501e874cd9411427f2d5169b61aef05e1f6de68b5e335;PATH=/;DOMAIN=qq.com;
>><input type=hidden name=Validatecode value=k5r4>
>><input type=hidden name=Age value=28>
>><input type=hidden name=Nickname value=落伍者>
>><input type=hidden name=Passwd value=im286.com>
>><input type=hidden name=Country value=中华人民共和国>
>><input type=hidden name=CityNo value=北京>
>><input type=hidden name=Province value=北京>
>><input type=hidden name=Sex value=男>
>><input type=hidden name=RegisterType value=1>
结论:这里将我们基本信息以Post方式发送给服务器,服务器重新设置了PCCOCKIE2、getqqsession和PCCOCKIE的Cookie值,同时以表单方式将刚才输入的信息保存在返回页面中。
5、填写完成后,点击下一步,调用http://freeqq.qq.com/getqqnum
发送信息:
>>POST /getqqnum HTTP/1.1
>>Referer: http://freeqq2.qq.com/3.shtml
>>cookie: getqqsession=4cac02be65041f0500aff1a67e71da0635b259980a20bad8b6102cb301e8e26b;PCCOCKIE2=987833d2489ec027d47463b908b274fcbb84a7e3afdeb8b0;PCCOCKIE=3c1501e874cd9411427f2d5169b61aef05e1f6de68b5e335;
>>Validatecode=5PWL&Age=36&Nickname=qKuuyyy4zk&Passwd=jrrh8wF&Country=%D6%D0%BB%AA%C8%CB%C3%F1%B9%B2%BA%CD%B9%FA&CityNo=%C0%AD%C8%F8&Province=%CE%F7%B2%D8&Sex=%C5%AE&RegisterType=1&Email=&Address=&Postcode=&Phone=&Gsm=&public=0&Realname=&ShengXiao=0&College2=&BloodType=0&employment2=&Constellation=0&Homepage=&PerInfo=&imageField.x=36&imageField.y=26
接收信息:
(1) window.location="http://freeqq2.qq.com/4.shtml?qq=88888&sex=1";
结论:申请成功,qq号码为88888
(2) window.location="http://freeqq2.qq.com/page_fail.htm"或window.location="http://freeqq2.qq.com/fail.shtml?qq=$qqnum$&sex=$sex$"
结论:申请失败,重新定位显示申请繁忙信息
(3) window.location="http://freeqq2.qq.com/page_fail2.htm"
结论:申请失败,原因是因为验证码填写错误
(4) 此ip申请qq号码过多,请稍后再试!!
结论: 这个IP过一会再申请吧
因此,如果我们编写批量申请软件,那么需要做的就是不断重复步骤2~5来不断的获取数据。
再稍微深入一步,我们会发现这个申请使用了im.qq.com、freeqq.qq.com、freeqq2.qq.com、freeqq3.qq.com,这又是为什么呢?
使用nslookup查看,我们会发现如下地址对应关系。
im.qq.com 219.133.40.138, 219.133.40.139, 219.133.40.187, 219.133.41.10, 219.133.38.13, 219.133.40.108
freeqq.qq.com 218.18.95.193
freeqq2.qq.com 219.133.40.40, 218.18.95.192
freeqq3.qq.com 219.133.40.241
也就是说,这里腾讯很巧妙的实现了负载均衡。
im.qq.com是腾讯的门户网站,所以使用了多个IP(多台计算机)
freeqq3.qq.com是专门用来生成各种验证码的,功能单一,所以一台计算机足够
freeqq2.qq.com是让用户填写基本信息和详细资料的,负载相对大一些,所以使用2个IP
freeqq.qq.com是专门用来生成QQ号码的,只需要校验用户输入正确,验证码合格,然后就产生号码,所以一台计算机也足够了。
OK,就写这些吧。本贴由负翁首发于落伍者论坛(www.im286.com),转载请注明出处 |