`
momotea
  • 浏览: 1964 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MSN Messenger 协议分析——MSN Messenger Protocol概述(转)

阅读更多
From:http://hi.baidu.com/kitandi/blog/item/31845c3a4b8525e215cecb3d.html/cmtid/3f98b6515fed5d501038c290

一.What is the MSNP (MSN Messenger Protocol)?      

    MSN消息协议由一系列的在客户端和服务器之间传送的命令组成。例如,你的一个好友下线了,服务器就会发送一条消息:FLN example@hotmail.com 到你的客户端。你的客户端就会将这个好友标记为下线状态。FLN就是一个在服务器和客户端传送的命令,它带有参数example@hotmail.com ,这个参数是客户端的Email 地址,也是用户名。MSN消息协议就靠在客户端和服务器之间传送这样一些带参数的命令来交流信息。      
    MSN的协议到目前已有多个版本,微软的服务器支持客户端使用:MSNP8,MSNP9,MSNP10,MSNP11,MSNP12,MSNP13,MSNP14,MSNP15这些协议版本。      
    MSN消息协议建立在TCP/IP上,除了显示图片,自定义表情,文件传输与语音视频聊天是p2p外,其它都通过服务器来进行。

二.MSN Messeger ServersMSN聊天用到的消息服务器有三大类: 
    
1、Dispatch Server,派遣服务器,简称DS,客户端最初连接的服务器,负责给客户端分配合适的通知服务器。有固定的域名与端口。完成派遣任务后切断TCP连接。(在高版本中已不用)      
2、Notification Server,通知服务器,简称NS,客户端需要一直保持连接的服务器,很多任务都在这个会话内完成,但其不负责传输与消息实体相关的数据。
3、Switchboard Server,接线服务器,简称SB,客户端之间聊天使用的中转服务器,每开一个聊天窗口,客户端和服务器就建立一个TCP会话。开始聊天前,发起方必须先申请并连接这个服务器。

三.MSN消息协议传送的命令

1.Logon/Dispatch server
下面这些命令在连接到Dispatch服务器或Notification服务器时被发送和接收:

VER - Protocol version
CVR - Sends version information
USR - Authentication command
XFR - Redirection to Notification server

2.Notification Server
下面这些命令在请求联机以后,通过Dispatch服务器或Notification服务器被发送和接收。

联系人列表/设置/初始化同步命令:
BLP - Initial settings download
BPR - Initial settings download
GTC - Initial contact list/settings download
ILN - Initial contact presence notification
LSG - Initial contact list download - Groups
LST - Initial contact list download - Contacts
MSG - Initial profile download
PRP - Initial settings download - Mobile settings and display name

标准的发送/接收命令
ADL - Add users to your contact lists
ADC - Add users to your contact lists (deprecated as of MSNP13)
ADD - Add users to your contact lists (deprecated as of MSNP11)
ADG - Create groups
CHG - Change client’s online status
GCF - Unknown OUT - Gracefully logout
PNG - Client ping
QNG - Server response to PNG QRY - Response to CHL by client
SBS - Unknown
SYN - Begin synchronization/download contact list
REA - Change display name
REG - Rename groups
REM - Remove contacts
RMG - Remove groups
XFR - Opens new chat session on switchboard server
UBX - Inform you with a user PSM/Media

异步命令:
CHL - Client challenge (see MSNP8:Challenges)
FLN - Principal signed off
NLN - Principal changed presence/signed on
RNG - Client invited to chat session

3.Switchboard Server
通过Notification服务器请求一个连接到Switchboard服务器的会话后,下面的这些命令将会被发送和接收:
ANS - Log in to switchboard chat session using invitation
IRO - Defines which principals are in the current chat session
USR - Log in to switchboard chat session after requesting session from NS
CAL - Invite a user to a chat session
JOI - Response to CAL, when user connected successfully
MSG - Used to send and receive messages in the chat session
BYE - Contact has left conversation
OUT - Gracefully leave switchboard chat session

命令详细内容查询网址:http://msnpiki.msnfanatic.com/index.php/Reference:Commands

四. MSN Client Protocol

随着MSN Messenger 6版本的发布,MSN在进行P2P消息发送时,应用层使用基于SIP[2](Session Initiation Protocol)协议的MSNSLP协议。MSNSLP协议与SIP协议大部分相同,但他比SIP协议使用更少的request方法。MSNLP仅使用INVITE 和BYE 方法。

MSNSLP消息遵循如下结构:
start line\r\n
message-header-1: header value 1\r\n
message-header-2: header value 2\r\n

message-header-n: header value n\r\n
\r\n
message body of zero or more bytes
NUL ()

1)start line
如果是一个request,此行将是一个请求行,数据包格式如下:
method SPACE MSNMSGR:buddy@mail.com SPACE MSNSLP-Version \r\n

method:
客户端仅仅使用两个方法:“INVITE”和 “BYE”,INVITE方法开始一个会话,BYE结束一个会话。如果你在一个会话中收到另外一个INVITE消息,这常常会改变会话的参数,如果没什么问题,你可以接受这个消息。

SPACE:
表示空格。

MSNSLP-Version:
对于MSNSLP v1.0,这一部分的值为:MSNSLP/1.0

如果不是一个请求,此行是一个将是一个状态行,数据包格式如下:
version SPACE status-code SPACE reason-phrase \r\n

version:
协议版本status-code和reason-phrase:status-code是一个三位的整形数字的状态码,用于指名对请求的理解和满足的结果。reason-phrase表示这个状态码所代表的意思。客户端必须读取这个状态码来确定它是表示OK 的200还是表示像找不到的404。

例如:MSNSLP/1.0 200 OK \r\n

2)Message Header
消息头部的数据格式按下面的顺序包含值:
“To”, “From”, “Via”, “CSeq”, “Call-ID”, “Max-Forwards”, “Content-Type” and “Content-Length”.
当你收到一条incoming消息,你需要检查上面这几个部分是否是正确的值,如果有错,就需要给发送方反回一个错误信息。

“To” 和“From”包含接受端和发送端的Email地址,格式如下:<msnmsgr:mail@hotmail.com>

Msnmsgr 表示用户使用的是MSN
Messengermail@hotmail.com表示某个人的Email地址。

“Via”指明这个请求应该采取什么样的路径,其格式总是为:“MSNSLP/1.0/TLP ;branch={BranchUID}”

“MSNSLP/1.0″是所使用的协议和版本,
“{BranchUID}”是这条消息的唯一标示符。
“CSeq”是Command Sequence的简称,大部分时候,其值为0。但当接收到一条INVITE消息时,你就应该回复一条在CSeq部分加1的消息。
即:接收到的INVITE消息的“CSeq”部分是N,则回复消息的CSeq部分应为N+1。

“Call-ID”单独识别一个特定的邀请,对于此用户的所有其他的请求和回应,Call-ID都应该有相同的值。
“Max-Forwards”为最大转发数。
“Content-Type”具体说明内容的类型是哪一种,对于request,它的值是“application/x-msnmsgr-sessionreqbody”或者“application/x-msnmsgr-transreqbody”, 对于Response,它的值是“application/x-msnmsgr-sessionreqbody” 或者“application/x-msnmsgr-transrespbody”。

3)Message Body
“message-body”消息的内容依赖于所请求数据的类型,但消息体必须总是以0×00结束。Message Body的内容格式将在音视频部分说明。

下面是一个INVITE消息的例子:
INVITE MSNMSGR:xiongchuanbo1@hotmail.com MSNSLP/1.0
To: <msnmsgr:xiongchuanbo1@hotmail.com>
From: <msnmsgr:aarone@yahoo.cn>
Via: MSNSLP/1.0/TLP ;branch={F560153A-5BF1-40DC-A526-13BED4DFE30A}CSeq: 0
Call-ID: {3B0DFFDD-48B9-48EF-8BAC-9C073DE413F0}
Max-Forwards: 0
Content-Type: application/x-msnmsgr-transreqbody
Content-Length: 263

//以上部分是消息头,以下部分到结束是消息体
Bridges: TRUDPv1 TCPv1 SBBridge TURNv1
NetID: -1904420899
Conn-Type: Symmetric-NAT
TCP-Conn-Type: Symmetric-NAT
UPnPNat: false
ICF: false
Hashed-Nonce: {1B77505F-D164-58EF-754C-47DC72FBAE39}
SessionID: 40889363
SChannelState: 0
Capabilities-Flags: 1      

参考文档:
1.SIP协议解析与实现(c和c++使用osip) 1—概述
http://blog.csdn.net/liutaoxwl/archive/2006/10/11/1330277.aspx
2.SIP协议解析与实现(c和c++使用osip) 2—SIP协议的结构
http://blog.csdn.net/liutaoxwl/archive/2006/10/11/1330410.aspx
3.SIP协议解析与实现(c和c++使用osip) 3—SIP消息http://blog.csdn.net/liutaoxwl/archive/2007/11/08/1873393.aspx
4.SIP协议解析与实现(c和c++使用osip) 4—消息体http://blog.csdn.net/liutaoxwl/archive/2007/11/13/1881912.aspx
5.SIP协议解析与实现(c和c++使用osip) 5—一般用户代理行为http://blog.csdn.net/liutaoxwl/archive/2007/11/16/1888267.aspx
6.MSNPiKi (专门分析MSN Messenger protocol的网站,已分析的MSN协议版本:MSNP8到MSNP15)http://msnpiki.msnfanatic.com/index.php/
7.MSNSLP and P2P
http://zoronax.bot2k3.net/msn6/
8.MSN Messenger protocol(MSNP9,MSNP10)http://www.hypothetic.org/docs/msn/index.php
9.NOKIA SIPapplication development
http://forum.nokia.com.cn/doc/SIP/application/development_v2_ch_release.pdf10.SIP消息之逐项讲解http://www.cstnet.net.cn/scml/20070207100306479.ppt
分享到:
评论

相关推荐

    MSN Messenger协议详解

    MSN Messenger协议详解,讲的比较详细

    MSN Messenger协议简介.doc

    1999年,Microsoft首次向IETF提交了“MSN Messenger Service 1.0 Protocol”草案,标志着MSN Messenger协议的正式亮相。然而,随着时间的推移,微软并未继续公开发布关于MSN Messenger协议的具体升级和修改细节。这...

    MSN Messenger协议

    MSNP(MSN Messenger Protocol)是一个不断演进的协议,随着软件版本的更新,协议也在逐步改进。在本文中,我们将重点讨论MSNP9和MSNP10这两个版本。 1. **基本协议分析** MSNP10作为MSN Messenger 6.1版本所使用...

    [协议分析]MSN协议分析资料

    ### MSN Messenger协议分析 #### 一、MSN Messenger概述 ##### 1.1 什么是MSN Messenger “MSN Messenger”这一术语由微软公司提出,并涵盖了多种通信解决方案。通过“MSN Messenger网络”可以进行在线聊天,而...

    MSN Protocol Analysis (MSN协议分析)

    ### MSN协议分析 #### MSN Messenger网络 MSN Messenger网络是由微软公司提供的即时通讯与状态显示服务网络。用户可以通过此网络进行即时消息传递、在线状态更新等操作。MSN Messenger网络的核心部分包括.NET ...

    MSN协议简单分析

    MSN Messenger协议包含了MSN Client协议和MSN Server协议两个部分。Client协议主要用于客户端之间的信息传递,而Server协议则涉及到客户端与服务器之间的交互。 在MSN协议的工作模式中,首先,客户端需要连接到通知...

    MSN Messenger

    MSN 全称 MICROSOFT SERVICE NETWORK 微软网络服务...你通过"MSN Messenger 网络"聊天,用来连接MSN Messenger 网络的最流行的程序是"MSN Messenger",而程序在MSN Messenger 网络中使用的语言则是"MSN Messenger 协议"。

    MSN QQ协议分析

    【MSN协议分析】 MSN Messenger,曾经流行的即时通讯软件,依赖特定的协议进行通信。...虽然MSN Messenger现在已经不再使用,但其协议分析对于理解即时通讯软件的设计原理,以及网络安全和数据通信仍然具有教育价值。

    用JAVA实现MSN Messenger的功能

    2. **选择通信协议**:MSN Messenger使用了专有的协议,但实现时可以选择标准的XMPP(Extensible Messaging and Presence Protocol),它被广泛用于即时通讯系统。 3. **创建客户端**:使用Java Swing或JavaFX构建...

    MSN Messenger 的源码.zip_delphi messenger_msn_msn delphi

    通过分析和研究MSN Messenger的源码,开发者可以深入了解其工作原理,包括消息传递机制、用户认证流程、网络通信协议等方面的知识。 Delphi Messenger部分涉及的关键技术点可能包括: 1. **网络编程**:MSN ...

    用JAVA实现MSN Messenger的功能.doc

    本文将探讨如何使用Java语言实现MSN Messenger的功能,主要涉及的知识点包括Java编程、即时通讯协议(IM)、JML库以及相关的第三方库。 **JML库介绍** JML(Java Messenger Library)是专为Java开发者设计的一个库...

    building msn messenger activity applications

    MSN Messenger Activity 应用开发 MSN Messenger Activity API 是一种允许开发者构建基于 MSN Messenger 的交互式应用程序的接口。这些应用程序,通常称为活动应用,利用了 MSN Messenger 的通信基础设施,让两个...

    MSN Messenger模仿界面源代码

    【MSN Messenger模仿界面源代码】是一个编程项目,旨在重现经典的MSN Messenger即时通讯软件的用户界面。这个项目对于学习和理解GUI(图形用户界面)设计、Windows应用程序开发以及.NET框架下的编程技术具有很高的...

    MSN8.0 Install_Messenger MSN8.0 Install_Messenger

    【MSN8.0 Install_Messenger】是针对MSN8.0版本的安装程序,这是一款曾经非常流行的即时通讯软件,由微软公司开发。MSN Messenger,简称为MSN,是2000年代初期全球用户广泛使用的互联网通信工具,允许用户进行文本...

    msn.rar_messenger_msn

    在MSN Messenger中,IDL文件用于定义服务端和客户端之间的通信协议。通过IDL,开发者可以定义数据类型、接口、模块和异常,这些定义将被编译成不同平台可以理解的代码,如C++或Java,以便在不同的系统间进行跨平台...

    MSN Messenger模仿界面

    【MSN Messenger模仿界面】 在IT领域,特别是软件开发中,模仿流行应用的界面设计是一种常见的学习方式。"MSN Messenger模仿界面"就是一个实例,它提供了一种通过Visual C++(简称VC)来实现类似MSN Messenger登录...

    获取MSN Messenger的联系人列表 C++源代码

    MSN Messenger使用了专有的实时通信协议,称为“简单对象访问协议”(Simple Object Access Protocol, SOAP)以及“XML数据交换格式”(eXtensible Markup Language, XML)。这些协议定义了客户端和服务器之间的交互方式...

Global site tag (gtag.js) - Google Analytics