【转贴收藏】MSN协议中文释义(Zz)

本文详细解析了MSN协议的工作机制,包括认证阶段与即时通讯阶段。介绍了客户端如何与服务器交互完成登录、好友列表获取、状态更新及消息传递等功能。


MSN协议中文释义(Zz)
我们可以把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$$
现在我们登陆上了服务器,但是我们的状态仍然是离线.为了能够发送和接受信息,我们需要把我们的状态改成在线.客户端通过如下命令完成这步:
CHG 7 NLN
服务器则向客户端发送回在线的好友及其相应的状态.
ILN 7 NLN btxxxe@hotmail.com nick (NLN:Now online 即当前在线)
ILN 7 AWY wmxxe@hotmail.com mike (AWY:Away 即离开)
ILN 7 BSY tehpxxp@hotmail.com jerry (BSY:Busy 即忙碌)
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

向服务器发送的下一个命令是和当前使用的客户端的版本相关的.客户端向服务器发送它的版本号和所在机器的信息像*作系统和其配置等
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 venky_dude@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

*一旦有好友上线时,服务器(NS)将向我们发送如下命令
NLN 10 NLN deaxxx@hotmail.com Venkatesh
相反,如果有好友下线时,服务器将向我们发送如下命令
FLN 10 FLN deaxxx@hotmail.com Venkatesh
在MSNP7中,MSN引入了一个新的口令认证机制.MSN服务器向用户发送一个口令钥,用户必须正确的认证此口令钥才能使此过程继续进行下去.
CHL 0 20881396011366812350

客户端必须向服务器发送一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的通讯协议继续进行补充,增添一些附加的功能比如增加/删除拥护,重命名,文件传输及语音聊天。



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=321198

无需解压码,可以使用! ========================================== SimpleIM 即时通讯工具 SimpleIM 安装说明 1. 三个目录 本压缩包包括三个目录, 分别为 src (源程序), res (资源), bin (可执行文件)。 2. src src 目录下包括四个目录, 分别为 Client (客户端), Server (服务端), Common (公用代码), Asp (网页)。 客户端 vbp: /src/Client/Client.vbp (目前版本: Beta 4) 服务端 vbp: /src/Server/Server.vbp 将上述两个文件用 Visual Basic 6.0 (Service Pack 6) 打开即可修改、编译。 asp 下包括 register.asp (注册页面), changepwd.asp (修改密码页面), conn.asp 和 md5.vbs。 3. bin bin 下为最终发行所需的二进制文件, 其中 SimpleIM.exe 为客户端程序, Simple IM Server.exe 为服务端程序。 修改源代码以后需要重新编译这两个文件。 MSWINSCK.OCX 为 Microsoft Winsock Control 6.0 (SP6), 为客户端和服务端需要; MSCOMCTL.OCX 为 Microsoft Windows Common Control 6.0 (SP6), 为客户端需要。 说明: 由于 Windows 98 以上版本 Windows 操作系统包含 MSVBVM60.DLL 等 VB6 运行时文件, 本压缩包中省略。 4. res res 下为图片、css、xsl 和数据库文件。 5. 安装 客户端需要准备的文件: SimpleIM.exe MSWINSCK.OCX MSCOMCTL.OCX 直接这将三个文件打包 (加上说明文档) 即可发布。 服务端需要准备的文件: Simple IM Server.exe MSWINSCK.OCX ServerDb.mdb register.asp changepwd.asp conn.asp md5.vbs 首先在服务器上安装 IIS, 将 register.asp, changepwd.asp, conn.asp, md5.vbs 放在一个支持 asp 的目录下, 然后在这个目录下创建一个目录 (目录名需要保密), 将 conn.asp 中 Const SecretDir = "SecretDir" 引号中的 内容改为这个目录的目录名, 然后将 Simple IM Server.exe, MSWINSCK.OCX, ServerDb.mdb 拷贝到这个目录下, 最后建立主页, 即可投入使用。 6. 兼容性 本程序仅在 Microsoft Windows XP SP2 下测试通过, 不保证在非 WinNT 5.x 内核上的兼容性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值