msn message(MSN Message协议分析「建议收藏」)

发布时间:2025-12-10 19:26:38 浏览次数:7

MSN Message协议分析「建议收藏」-

MSN Message协议分析「建议收藏」转自:http://www.cnblogs.com/happyhotty/articles/1900206.html一.WhatistheMSNP(MSNMessengerProtocol)?MSN消息协议由一系列的在客户端和服务器之间传送的命令组成。例如,你的一个好友下线了,服务器就会发送一条消息:FLNexample@hotmail.com到你的客户端。你的客户端就会

转自:http://www.cnblogs.com/happyhotty/articles/1900206.html 一.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 Servers MSN 聊天用到的消息服务器有三大类: 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 Messenger mail@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
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477