作者姓名:杨忠勋
作者简介:专业:
计算机软件开发与应用
个人网站:http://zhongxunyang.yeah.net
Email:zhongxunyang@yahoo.com.cn
Oicq:171704474
调试环境:VB6.0
你用VB已经有很长时间了,一直疑惑MSN是如何工作的。现在你不用再为这个
问题苦恼了,这篇文章不仅告诉你MSN是如何工作的,甚至还告诉你如何用VB编出你自己的MSN即时通讯软件。
我们可以把MSN的工作机制分成两个阶段:
认证阶段
认证阶段包括登陆到MSN即时通的服务器并且取得好友列表
即时通讯阶段
即时通讯阶段包括发送/接受进入即时通讯阶段的请求和发送/接受消息。
MSN即时通讯软件的协议是基于ASCII码的协议,用其他话来讲就是所有的命令都必
须是英文的!第一个阶段包括连接到MSN即时通软件的服务器。在这个阶段我们应该连接
到服务器“messenger.hotmail.com”的1863端口(MSN即时通讯软件通过1863端口进行工作)。一旦连接上以后,我们就应该开始登陆过程了。此过程的第一步是验证MSN的版本。在此步中,客户端(即你的MSN软件)列出及向服务器发送它可以支持的版本,然后等待服务器的回应。
VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVRO
在MSN协议中,伴随着每个命令都有一个“试验ID”被发送。此实验ID从0开始,并且当每次服务器成功的对客户端的命令做回应时,都会增加。
服务器的回应如下
VER 0 MSNP7 MSNP6 MSNP5 MSNP4
现在客户端(MSN)和服务器之间确定了它们之间将要进行通讯的版本。
下一步客户端(MSN)向服务器发送一个请求,要求服务器提供它所支持的认证时需要的安全包的名字。
INF 1
不像ahoo,Rediff和其它的一些即时通讯软件,MSN在发送密码时会将密码加密,保证如有人监控你的端口时,密码不会轻易的泄露。
服务器的回应如下
INF 1 MD5 (MD5在这里是服务器当前支持的安全包的名字)
下一步客户端(MSN)将向服务器发送用户ID
USR 2 MD5 I venky_dude@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 venky_dude@hotmail.com
现在我们连接上的服务器有了此尝试登陆的用户的信息.服务器回应如下:
USR 5 MD5 S 989048851.185113730
服务器发送的此字符串是“MD5 杂乱信息”.此杂乱信息由服务器创建并且在认证过程中使用.客户端然后向服务器发送使用MD5运算法加密后的密码.实际上客户端向服务器发送的是一个独一无二的MD5字符串,此字符串等价于此“MD5杂乱信息”(即989048851.185113730)+密码.结果如下
3b7926d277068ec49576a0c40598ff21
USR 6 MD5 S 3b7926d277068ec49576a0c40598ff21
如果密码正确,服务器将做如下回应:
USR 6 OK venky_dude@hotmail.com venkat
此处“venkat”是用户的呢称.
在此协议的最新版本中,服务器将发送一些附加的数据,像用户的信息和一个认证码(类似于一个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:venky_dude@hotmail.com
Country:IN
PostalCode:
Gender:M
Kid
Age:22
Sid:517
Kv:2
MSPAuth:2AAAAAAAADU0p4uxxxJtDJozJS1UTS0i7YpwnCoPUHRv56YKxxxCTWmg$
现在我们登陆上了服务器,但是我们的状态仍然是离线.为了能够发送和接受信息,我们需要把我们的