客户端必须向服务器发送一MD5,此MD5为以上的“杂乱信息”后附加上字符串“Q1P7W2E4J9R8U3S5”.因此最终向服务器发送的MD5字符串为
20881396011366812350Q1P7W2E4J9R8U3S5
因此客户端的回应如下
QRY 18 msmsgs@msnmsgr.com 32
0212eaad0876afb8505859ca75d21a78
此处18为实验ID,用你的实际实验ID代替18.如果认证正确,服务器将做出如下回应
QRY 18
在MSN里的即时通讯是基于session的。想进行对话的两个人必须在session模式当中。除非我们同其他用户开始一个聊天session,否则我们是不能发送/接受信息的。
基本上有两种途径可以使一个用户处于一个聊天session中
1 用户向另一个用户发送一个聊天session请求
2 用户接收从另一个用户那里发送来的聊天session请求
接下来将分别详细介绍这两种途径
用户向另一个用户发送一个聊天session请求
客户端(用户)向服务器发送一个命令,以获取接线总机(SwitchBoard)服务器的地址.所有的即时通讯交谈都必须通过接线总机服务器实现。
XFR9 SB
此接线总机服务器返回此服务器的ip地址,连接端口,和一个CKI杂列。CKI 是一个安全包,用户必须使用此CKI杂列连接上接线总机服务器。
XFR9 SB 64.4.13.88:1863 CKI1989487642.2070896604
现在这次我们将向接线总机服务器进行一次新的连接。而且我们上次对MSN即时通服务器的连接必须要保持,否则我们将会登出。
在我们连接上接线总机服务器之后,我们将向此接线总机服务器发送以下命令:
USR 1 venky_dude@hotmail.com 989487642.2070896604
如果我们发送的这个CKI杂列正确的话,接线服务器将会返回
USR 1 OK venky_dude@hotmail.com venkat
当以上做完之后,接下来这个用户要做的就是要把另一个用户”叫到”此聊天session中了,这可以通过发送下面的命令完成
CAL 2 deadxxx@hotmail.com
服务器将会向此用户回应一个session号,同时也会将此session号发送给另一个用户。如果另一个用户准备好聊天,并向做出回应时,服务器将向我们发送如下命令
JOI deadlee@hotmail.com Venkatesh
这条命令表示另一个用户加入了聊天当中,我们现在可以接受和发送信息了
用户接收从另一个用户那里发送来的聊天session请求
当我们被一个用户邀请到一个聊天session中时,认证服务器将向我们发送如下的信息.
RNG 11742066 64.4.13.74:1863 CKI 989495494.750408580 deaxxxx@hotmail.com Venkatesh
上面的命令包含了session号,接线服务器的ip地址,端口,CKI杂列及向我们发出交谈请求的用户信息。
现在我们将向接线服务器进行一次新的连接。同样我们上次对MSN即时通服务器的连接必须要保持,否则我们将会登出。
我们连接上接线服务器,并且发送如下命令
ANS 1 venky_dude@hotmail.com 989495494.750408580 11742066
上面的命令包含了我们的登陆名,我们接收到的CKI杂列和session号。
服务器将回应如下信息
IRO 1 1 1 deaxxxx@hotmail.com Venkatesh 和 ANS 1 OK
我们现在就可以发送和接收信息了。
在我们发送和接收信息之前,让我们了解一下信息是如何创建的。
我们发送信息时,将首先建立一个头信息如下所示
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22
然后使用如下的方式发送
MSG2 N137 MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22
hello
其中2是测试号,我们每发送一次信息,此号就会随着增加。137是指我们发送信息的长度。在上面的例子中就是头信息和我们发送的信息”hello”的长度。
我们发送的信息和上面的例子是差不多的。
下面是我们接受到的一个信息的例子
MSG deaxxxx@hotmail.com Venkatesh 137
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22
hello
当另一用户正在输入信息时,我们会收到如下信息
MSG deaxxxx@hotmail.com Venkatesh 100
MIME-Version: 1.0
Content-Type: text/x-msmsgscontrol
TypingUser: deaxxxx@hotmail.com
我猜你们对如何编写出自己的MSN即时通讯软件已经有了大致的了解。我将会在以后对MSN的通讯协议继续进行补充,增添一些附加的功能比如增加/删除拥护,重命名,文件传输及语音聊天。
参考资料
微软发布的MSN的通讯协议
http://www.tlsecurity.net/Textwa ... ger-protocol-00.txt
MD5官方网站
http://userpages.umbc.edu/~mabzug1/cs/md5/md5.htm
