admin管理员组

文章数量:1533913

2024年5月3日发(作者:)

三、通信与协作,如QQ,ICQ,SKYPE等,重点描述QQ,SKYPE

纯点对点网络没有客户端或服务器的概念,只有平等的同级节点,同时对网络上的其

它节点充当客户端和服务器。这种网络设计模型不同于客户端-服务器模型,在客户端-服

务器模型中通信通常来往于一个中央服务器。P2P网络的一个重要的目标就是让所有的客

户端都能提供资源,包括带宽,存储空间和计算能力。因此,当有节点加入且对系统请求

增多,整个系统的容量也增大。

3.1 QQ通信协议介绍

QQ的通信协议是一套基于二进制数据的自己开发的应用层网络协议.其中使用一些公

司的加密算法.QQ基本通信协议支持udp和tcp两种基本协议方式.

3.1.1 QQ的登录过程

首先QQ客户端向服务器发送一个请求登录令牌的数据包.服务器返回登录令牌.这个

令牌是在服务器端生成的.和客户端的IP地址,版本信息等数据相关.以后会用到这个令牌去

进行其他操作.在QQ客户端得到登录令牌之后.就会向服务器发送一个包含登录信息的登

录请求.要求登录.服务器会首先看看客户端的号码.IP地址和版本是否可以在本服务器上进

行登录.如果可以的话,就验证客户端的登录信息是否与服务器上保存的登录信息进行比较.

匹配的就向客户端返回一个登录成功的数据包.不匹配返回登录失败.因为QQ的服务器有

很多台.可能要分管不同的QQ版本.IP等.所以如果客户端的号码.IP地址和版本无法在本服

务器进行登录.服务器就返回一个重定向包.让客户端去另外一台服务器登录.其实整个QQ

登录过程就是这么简单的两个步骤.

QQ登录过程的数据包分为头部.内容和尾部三个部分.其中头的格式固定为:0x02客户

端版本 命令 序列号 QQ号码. 其中0x02是1个字节的标志;客户端版本2个字节.用于表

示QQ客户端的版本;命令2个字节.表示要发送的命令类型.例如请求登录令牌登录请求等;

序列号是一个2字节的随机数,在一次QQ会话中通过它来确认回应包是否对应请求包.QQ

客户端默认每次加1;QQ号码就是4字节的QQ号.对于服务器来说是每个字段是无所谓

的.QQ登录过程数据包的尾部固定为0x03.

请求登录令牌包

包内容就是对一次命令的具体信息,对于第一次发送的请求登录令牌包来说,包命令是

0x0062,而服务器返回包则相对复杂一些,其中0x18表示登录令牌的长度,现在QQ默认的

登录令牌长度是0x18.这个令牌是在服务器端生成的.

登录包.

在这里包含了和QQ密码相关的信息. 其中初始密钥是一个16字节的随机数,用于本

身的加密.这里最重要的就是密码密钥加密的一个空字符串.

所谓密码密钥就是用QQ口令进行两次MD5加密后得到的密文,然后以这个密文作为

密钥去加密一个空字符串,这次加密使用了反馈的TEA算法,加密结果放在QQ登录包里,让

服务器去验证,由于QQ的加密算法使用特殊的填充机制使用QQ服务器可以验证出用户密

码是否正确,这个会在后面进行详细的解释.QQ登录包里面还有一些诸如登录状态,登录令

版和很多未知的内容。

需要特别提到的是,前面的请求登录令牌包是不加密的,而这个登录包除了初始密钥本

身以外的部分都要用初始密钥进行加密,加密算法同样是反馈的TEA.

QQ服务器在收到这个登录包之后,首先要用初始密钥解密登录包后面的部分,如果解

密成功,就会用保存在服务器上的密信息去解密密码密钥加密的那个空字符串密文,如果用

户提交的密码是正确的.才可以解密成功.否则解密函数会返回空,认证就失败了.当验证QQ

客户端密码准确无误后.就返回一个登录成功包.

3.1.2 QQ的加密算法

TEA是Tiny Encrypt Arithmetic的缩写.顾名思义就是一种比较简单的小型加密算法.

它用一个16字节的密钥去加密一个8字节的明文.得到一个8字节的密文.也可以反向从密

本文标签: 登录客户端服务器加密请求