关键词为 “QQ” 的文章
KJava QQ 2005 1.6.1 分析
by trac on 8月 16, 2008
在阅读本文之前,我很想让您明白几件事。
第一,我这分析极不完整,也极不专业。仅仅是作为兴趣,写一写,消磨消磨时间。
第二,我并不想抢腾讯的饭碗。说实在的,如果让我设计一款 IM,特别是用在手机上的,我决不会使用 HTTP 协议,也决不会将所有的消息以明文发送。用户密码是 MD5 过的,但您听说过山东大学那位受人尊敬的王小云教授吗,她破解了 MD5。HTTP 的头部也太大,浪费流量。
第三,请您自重。计算机网络通讯协议分析,这本来就属于法律的灰色地带,搞得好那么你可以学习学习,设计出更优秀的协议,搞不好是什么下场我就不细说了。我可不希望看见谁谁谁收到一份包装精美的来自腾讯的律师函。
好了,客气话说完,我下面就不客气了,说说腾讯 KJava QQ 2005 版协议的几个特点:
1、使用 HTTP 1.1;
2、每个 Request / Response 都需要标明 Content-Length。很显然,HTTP 1.1 的 RFC 也要求我们这么做(小道消息,没验证过,我只知道 1.1 的协议要求 Host,这个是为虚拟主机设计的);
3、客户发送请求的时候,都是用 POST 方法,所有的参数都包含在 POST 数据里;
4、可以用代理,但最终必须是从中国移动/中国联通的 IP 访问登录服务器;
5、密码采用 MD5 加密;
6、每一次和服务器交换信息,都使用短连接,也就是说,在交换完了之后立即关闭连接(Connection: close);
7、全部采用 UTF-8 编码(String mystring(“this is it”, “UTF-8”););
8、每隔一段时间执行一次 GetMsgEx 命令;再隔一定时间执行 Query_Stat。