雅虎通无法登陆:libyahoo2使用说明(一)YMSG协议

1. 雅虎通---报文结构

Yahoo! 在TCP/IP协议的基础上构建了自己的应用层即时消息协议(YMSG)。 YMSG报文头由20bytes组成, 其头4个字节为"YMSG", 其他部分分别为:YMSG version, message length, service type, status, session ID。如下图所示:

 libyahoo2使用说明(一)YMSG协议

Yahoo!报文数据部分紧紧跟随在session ID后面,数据的格式为:FIELD ID, FIELD SEPERATOR, FIELD DATA, FIELD SEPERATOR,......。 field ID采用ASCII字符串标识,Yahoo!的数据分割符为:0XC080。如下图所示:
 libyahoo2使用说明(一)YMSG协议

最后以一个更形象的图来标识雅虎通的报文结构:
 libyahoo2使用说明(一)YMSG协议
关于field ID, service type, status的具体定义可以参考http://blog.chinaunix.net/u2/71303/showart_1083533.html

 

2. 雅虎通---登陆过程
登陆过程如下图所示, 其中“*”标注的为可选步骤
 libyahoo2使用说明(一)YMSG协议

第一步:发送认证报文到雅虎通服务器,认证报文结构如下:
 libyahoo2使用说明(一)YMSG协议

 libyahoo2使用说明(一)YMSG协议

第二步:发送Yahoo_Auth报文,这个报文含有用户名信息。服务器返回一个具有挑战性的session ID。 session ID将担任后续所有报文的身份标志。具体如下图示:
 libyahoo2使用说明(一)YMSG协议
 libyahoo2使用说明(一)YMSG协议

第三步: 当客户端收到session ID这个挑战串后,将密码追加到该串后,并计算MD5的HASH值。这个HASH值被分成两个数据域: 6和96。跟随密码HASH后面的是其他的一些系统数据,如客户端版本等。具体如下图所示:
 libyahoo2使用说明(一)YMSG协议

第四步:服务端接收到密码的hash报文后,就表示登陆已经完成了。通常情况下,还会发送AuthResp报文来请求好友列表信息。好友列表信息存在于Yahoo_List报文中。

好友列表报文可能会有多个Yahoo_List报文组成,其主要依赖于好友和黑名单的数量,其中最重要的数据域是87(好友列表)和88(黑名单列表)。具体如下图所示:
 libyahoo2使用说明(一)YMSG协议

在收到好友列表报文后,随后会收到Yahoo_Ping报文。 Yahoo_Ping报文信息表示哪些好友在线。就像Yahoo_List报文一样, Yahoo_Ping报文也可能分多次收到。

在登陆过程的最后部分,服务器可能会发送一些非关键的信息。如客户端皮肤的类型信息,天气预报,yahoo在线信息等。

相关推荐

相关文章