转自: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

MSN Message协议分析相关推荐

  1. MSN Media协议分析

    整理记录 版本 时间 内容 整理人 V1.0 2008-04-09 MSN Media协议分析初稿 彭令鹏 MSN Media协议分析 第1章.     文档说明 本文档建立在另一篇文章--<M ...

  2. MMS(Manufacturing Message Specification)协议分析

    1.简介 MMS(Manufacturing Message Specification)中文翻译为制造报文规范,在介绍MMS之前我们先简单科普一下IEC61850标准. IEC61850是电力系统自 ...

  3. MSN协议分析以及Java实现MSN登陆

    一.MSN协议分析部分 1.1 基本介绍 MSN是微软推出的IM工具,他的通信协议是微软自己提出的MSNP(即MSN Protocol).当前MSN协议最高版本为MSNP18,但可获取的资料很少.这里 ...

  4. MSN Messenger协议 原作:bhw98

    前 言 MSN Messenger 是Microsoft开发的聊天工具,目前在国内拥有很大的用户群.使用MSN Messenger可以与他人进行文字聊天,语音对话,视频会议等即时交流,还可以通过此软件 ...

  5. 飞信的协议分析(转)

      飞信的协议分析 转自:http://hi.baidu.com/nathan2007/blog/category/%B7%C9%D0%C5%D0%AD%D2%E9%B7%D6%CE%F6 作者:na ...

  6. RTSP再学习 -- RTSP协议分析(转载)

    最近一直在看 RTSP,但是RTSP协议是个啥?还没有搞清楚. 首先流媒体百度百科上有这样一段,从基本的名字上或多或少可以理解一下这些传输协议的区别.这很重要!! 传输协议 1.RSVP:资源预留协议 ...

  7. webqq2协议分析和qq聊天机器人简单实现(转)

    webqq2协议分析和qq聊天机器人简单实现 转之http://hfutxf.javaeye.com/blog/800866 通过webqq接口,可以实现发送qq消息接收qq消息等,这样,想实现一个q ...

  8. 邮件服务器之POP3协议分析

    第1章. POP3概述 POP3全称为Post Office Protocol version3,即邮局协议第3版.它被用户代理用来邮件服务器取得邮件.POP3采用的也是C/S通信 模型,对应的RFC ...

  9. NS2相关学习——可靠的MANET应用程序的Gossip协议分析

    好久不写,应该努力啦!老师把这篇论文给了我,现在还不知道它在讲什么,来边翻译边学习吧! 文章链接:https://www.researchgate.net/publication/316844643_ ...

  10. WCDMA的短消息业务协议分析

    2019独角兽企业重金招聘Python工程师标准>>> 基于WCDMA的短消息业务协议分析 2009年06月22日 09:08 来源:本站整理 作者:佚名 我要评论(0) 摘 要:  ...

最新文章

  1. linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
  2. Spring Boot如何实现在线预览?这个开源项目可以学习一下,支持99%常用文件!...
  3. U盘启动盘制作方法 2种绝招轻松搞定
  4. 正负样本不平衡处理方法总结
  5. ECharts整合HT#160;for#160;Web的网络拓扑图应用
  6. tomcat 启动编码设置
  7. java log4j日志级别配置详解
  8. [精品书单]3D打印机课程设计
  9. linux金山打字通游戏版,金山打字游戏2010电脑版-金山打字游戏(最全大集合安装)下载V8.1.0.1官方版-西西软件下载...
  10. 移动支付变巨头掘金地,银盒子手握SaaS成新宠
  11. Python之动态检测编码chardet
  12. C语言论坛系统课程设计
  13. Modern C++ JSON nlohmann::json 使用详解
  14. MySQL 是如何保证一致性、原子性和持久性的!
  15. [SPRD] Q 版本开机 logo 显示原理
  16. 计算机毕业后的打算英语作文,毕业后规划英语作文
  17. 大端模式与小端模式的详解分析
  18. 关于融云聊天室KV 值的正确使用
  19. smart700iev3 程序下载设置_Smart 700 IE 如何用以太网下载程序
  20. Python实现http基本认证(BASIC AUTHENTICATION)

热门文章

  1. 小白教程系列——MultiDesk连接服务器
  2. 2022天府杯国际赛数学建模题目和思路
  3. PMP第五章:项目范围管理
  4. 泰迪杯数据挖掘挑战赛—数据预处理(二)
  5. 拉普拉斯平滑处理介绍
  6. 直方图匹配的数学原理
  7. visio UML图 视频学习
  8. 【Linux operation 18】 - SUSE 12 SP5在线安装Docker
  9. 转fatfs 文件系统选择
  10. 考勤表生成工具介绍及使用说明