1.2 MSN Messenger协议开发:认证阶段
作者:汪俊杰
电子邮件:unicentre(at)gmail.com
QQ:10402488
MSN的认证阶段包括登录到MSN即时通讯服务器并且取得好友列表。
MSN即时通讯软件的协议是基于ASCII码的协议。第一个阶段包括连接到MSN即时通软件的服务器。在这个阶段我们应该连接到服务器“messenger.hotmail.com”的1863端口(MSN即时通讯软件通过1863端口进行工作)。一旦连接上以后,我们就可以一步步开始登录过程了。
步骤1: 验证MSN的版本。客户端(即我们的MSN软件)列出及向服务器发送它可以支持的版本,然后等待服务器的回应。
>>> VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVRO
在MSN协议中,伴随着每个命令都有一个 “ 试验ID ” 被发送。此实验ID从0开始,并且当每次服务器成功的对客户端的命令做回应时,都会增加。
服务器的回应如下
<<< VER 0 MSNP7 MSNP6 MSNP5 MSNP4
现在客户端(MSN)和服务器之间确定了它们之间将要进行通讯的版本。
步骤2: 客户端(MSN)向服务器发送一个请求,要求服务器提供它所支持的
认证时需要的安全包的名字。
>>> INF 1
MSN在发送密码时会将密码加密,保证如有人监控你的端口时,密码不会轻易的泄露。
服务器的回应如下
<<< INF 1 MD5
MD5在这里是服务器当前支持的安全包的名字。
步骤3: 客户端(MSN)将向服务器发送用户ID
>>> USR 2 MD5 I ideal_wang@hotmail.com
然后服务器将检验它是否包含有验证所需的此用户的所有相关信息。如没有的话,服务器将会发送如下回应:
<<< XFR 2 NS 64.4.13.55:1863 0
意思为客户端(MSN)应该连接到NOTIFICATION服务器,地址和端口分别为64.4.13.55:1863。
我们关闭当前的连接并且在连接到新的服务器64.4.13.55时重复以下步骤
>>> VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVRO
<<< VER 3 MSNP7 MSNP6 MSNP5 MSNP4
>>> INF 4
<<< INF 4 MD5
>>> USR 5 MD5 I ideal_wang@hotmail.com
步骤4: 如果现在我们连接上的服务器有了此登录的用户的信息,服务器回应如下:
<<< USR 5 MD5 S 989048851.185113730
服务器发送的此字符串是“MD5 杂乱信息 ” 。此杂乱信息由服务器创建并且在认证过程中使用。客户端然后向服务器发送使用MD5运算法加密后的密码。实际上客户端向服务器发送的是一个独一无二的MD5字符串,此字符串等价于此 “ MD5杂乱信息 ” (即989048851.185113730)+密码,本例中MD5字符串是3b7926d277068ec49576a0c40598ff21。
>>> USR 6 MD5 S 3b7926d277068ec49576a0c40598ff21
如果密码正确,服务器将做如下回应:
<<< USR 6 OK ideal_wang@hotmail.com Jun Jie
此处“Jun Jie ” 是用户的呢称.
MSN协议的最新版本中,服务器将发送一些附加的数据,像用户的信息和一个认证码(类似于一个cookie,可以用到许多其它的功能中):
<<< MSG Hotmail Hotmail 362
<<< MIME-Version:1.0
<<< Content-Type:text/x-msmsgspro file;charset=UT
<<< Login Time:1011252477
<<< EmailEnabled:1
<<< MemberIDHigh:84736
<<< MemberIDLow:-143472939
<<< Lang_preference:103
<<< PreferredEmail:ideal_wang@hotmail.com
<<< Country:IN
<<< PostalCode:
<<< Gender:M
<<< Kid
<<< Age:22
<<< Sid:517
<<< Kv:2
<<< MSPAuth:2AAAAAAAADU0p4uxxxJtDJozJS1UTS0i7YpwnCoPUHRv56YKxxxCTWmg$$
步骤5: 经过上述步骤我们登录上了服务器,但是我们的状态仍然是离线。为了能够发送和接受信息,我们需要把我们的状态改成在线。客户端通过如下命令完成这步:
>>> CHG 7 NLN
服务器则向客户端发送回在线的好友及其相应的状态:
<<< ILN 7 NLN btxxxe@hotmail.com nick
<<< ILN 7 AWY wmxxe@hotmail.com mike
<<< ILN 7 BSY tehpxxp@hotmail.com jerry
<<< MSG Hotmail Hotmail 223
<<< MIME-Version:1.0
<<< Content-Type:text/x-msmsgsinitialemailnotification;charset=UTF-8
<<< Inbox-Unread:293
<<< Folders-Unread
<<< Inbox-URL:/cgi-bin/HoTMaiL
<<< Folders-URL:/cgi-bin/folders
<<< Post-URL:
http://www.hotmail.com
步骤6: 向服务器发送的下一个命令是和当前使用的客户端的版本相关的,客户端向服务器发送它的版本号和所在机器的信息像操作系统和其配置等:
>>> CVR 8 0x0409 win 4.10 i386 MSMSGS 4.5.0127 MSMSGS
0x0409 win4.10 i386 指出客户端当前的运行环境是win98,使用的是Intel的微处理器;MSMSGS 4.5.0127 MSMSGS 指出msmsgs.exe的版本号。
服务器回应提供下载最新版本及一些其它的信息的地址:
<<< CVR 8 4.5.0127 4.5.0127 1.0.0863
<<<
http://download.microsoft.com/do ... /en-us/mmssetup.exe
<<<
http://messenger.microsoft.com
这个CVR命令的发送并不是必须的,无论此命令是否发送,MSN协议都可以正确的工作.
为了获得我们的好友列表,我们可以发送如下命令
>>> LST 9 RL
服务器将相应发送回“反向列表”,此反向列表为当你在线时,可以看到你并能向你发送即时消息的用户列表。你也可以使用LST 9 FL命令向服务器请求 “ 正向列表 ” ,此正向列表包括你加入到好友列表中的所有好友。服务器所做的回应如下
<<< LST 9 RL 69 1 19 ideal_wang@hotmail.com venkat
<<< LST 9 RL 69 2 19 puxxxxx@hotmail.com puja
<<< LST 9 RL 69 3 19 vancxxxx@hotmail.com ramachandran
<<< LST 9 RL 69 4 19 moxxxxx@hotmail.com chandramouli
<<< LST 9 RL 69 6 19 v_n_xxxx@hotmail.com Narakatesh
<<< ........
<<< LST 9 RL 69 19 19 puneetagarxxx@hotmail.com puneet