QQ协议概述
最后修改: 2003年10月3日
QQ的版本:
QQ的版本升级比较频繁,而且与多数的软件不同的是,它客户端的升级往往伴随着协议相应的改变。
目前,对研究QQ协议版本比较重要的是:
QQ2000c 。它对应的客户端协议版本是08xx,目前对这个版本的研究比较多。
QQ2003 (0808) 这是腾讯最新公布的QQ版本,目前发现它对应的客户端协议版本是0A 1D。目前对这个版本的研究才刚刚开始,此版本对协议做了比较大的改动。
协议类型:
我们尝试把QQ的协议进行分类:
文字聊天协议族(TCPF, Text Chatting Protocol Family):它主要支持与其它QQ客户端进行文字聊天。TCPF是建立在UDP协议之上。UDP数据包中的第一个字符02为这个协议族的标识。TCPF的服务器使用8000号端口,腾讯的QQ客户端软件一般从4000号端口开始尝试使用,但实际上,对客户端使用的端口号并没有限制。目前的研究集中在TCPF上。
其它未知可能存在的协议族:
我们观察到QQ除了与TCPF服务器通信以外,还有与其它的服务器使用UDP进行通信。目前我们观察到的服务器为 218.17.217.111 : 8000。客户端使用与TCPF不同的端口。目前观察到的从客户端发出的包以06开头,而服务器返回的包则以01开头。目前其具体作用未知。我们注意到一个有趣的现象是,如果选择离线后重新上线,那么在发出登录包之前,这个通讯已经开始。我们暂时把它命名为数据传输协议族(DTPF,Data Transfer Protocol Family)。最新的研究发现,它传递的是QQ Show的图片数据。
语音、视频聊天:目前还没有开始分析,尚未知道是使用UDP还是TCP协议。
聊天室:没有分析,应该是TCP协议。
随着对这些协议分析的开始,我们会给它们更精细的划分和恰当的命名。
TCPF:
TCPF是建立在UDP协议上的协议族,主要支持文字聊天功能。TCPF是以请求-响应模式工作的。也就是说,客户端发出一个请求,服务器端会给出一个相应的响应;服务器向客户端发送信息,客户端也会给服务器相应的响应。请求和响应通过相同的序列号来进行配对(请求代码也应该相同)。而且每种请求的发起方都是相同的。目前,已知的请求包括:
0x0001 注销登录
0x0002 心跳信息
0x0004 更新用户信息
0x0005 搜索用户
0x0006 获取用户信息
0x0009 不需认证方式添加好友
0x000a 删除好友
0x000b 需要认证的方式添加好友
0x000d 设置隐身、示忙等状态
0x0012 确认收到系统消息
0x0016 发送消息
0x0017 收到消息(服务器发起)
0x001a 未知作用。
0x001c 在对方好友列表上删除自己
0x001d 未知作用。
0x0022 登录
0x0026 获取好友清单
0x0027 获取在线好友
0x0030 群操作指令
0x0080 收到系统消息(服务器发起)
0x0081 收到好友状态改变消息(服务器发起)
修订历史:
2003年10月3日 jeff_yecn增加群操作的定义
2003年8月30日 jeff_yecn增加对DTPF的命名
2003年8月29日 jeff_yecn创建