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

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
一.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 表示用户使用的是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:
From:
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.pdf
10.SIP消息之逐项讲解 http://www.cstnet.net.cn/scml/20070207100306479.ppt

MSN Messenger协议 原作:bhw98 前 言MSN Messenger 是Microsoft开发的聊天工具,目前在国内拥有很大的用户群。使用MSN Messenger可以与他人进行文字聊天,语音对话,视频会议等即时交流,还可以通过此软件来查看联系人是否联机等。该软件的最新版本是6.1。1999年,Microsoft向IETF提交了一份"MSN Messenger Service 1.0 Protocol"草案,这是最初版本的MSN M 阅读详情

相关推荐

从光缆中断事件看XMPP协议与高可用通信系统设计

在网络通信领域,协议设计与系统架构直接决定了服务的可靠性与韧性。以XMPP(可扩展消息与存在协议)为例,其基于XML的开放式标准和去中心化的联邦架构,为系统提供了强大的容错与互联能力。这种设计通过支持服务器间路由、状态缓存和健壮的连接保持机制,能够在网络链路故障时维持服务的部分可用性,其技术价值在于为分布式系统提供了应对物理层中断的弹性。在嵌入式与物联网应用场景中,借鉴此类协议思想,采用多路径故障移、智能心跳检测及本地状态缓存等工程实践,是构建抗中断通信系统的关键。本文通过一次真实的光缆中断事件,剖析了G

weixin_30628077的博客 369

MSN协议分析(1)— MSG消息分析

分析msn协议,我是用msn7.0,msn在登录完成后,与他人传送信息及控制命令全部是通过服务器。我发送到服务器的命令格式为:MSG 22 U 93                                 (我发送的控制命令)MIME-Version: 1.0                          (版本)   Content-Type: text/x-msmsgscont

dankes 2457

MSN Messenger协议简介.doc

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

MSN 协议分析

MSN 协议分析一、概要介绍 msn messenger通常使用端口1863进行通信(在实际中用sniff跟踪发现msn通信都是用1863端口进行通信的)。在msn messenger工作中,本机客户端与三种服务器通过协议进行通信和数据交换。(dispatch服务器、notification服务器tchboard服务器)。在本机客户端和各服务器之间主要通过两种形式的进行通信

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 5482

MSN 握手协议和信息交换(3)

MSN 握手协议和信息交换(3)9.同步本地联系人列表           客户端向服务器发送本地保存的联系人列表版本号:                      SYN 8 0/r/n                      第二个参数就是当前的联系人列表的版本号,0 表示本地没有任何联系人的信息服务器回应客户端服务器上联系人列表的版本号:                      SY

jiljil的专栏 883

MSN Messenger Protocol

MSN Messenger Protocol

pcangel的专栏 503

MSN Message协议分析

自:http://www.cnblogs.com/happyhotty/articles/1900206.html 一.What is the MSNP (MSN Messenger Protocol)? MSN消息协议由一系列的在客户端和服务器之间传送的命令组成。例如,你的一个好友下线了,服务器就会发送一条消息:FLN example@hotmail.com 到你的客户端。你的客户端就会

qinggebuyao的专栏 3180

MSN Messenger Service 1.0 Protocol

Instant Messaging and Presence Protocol                        R. MovvaInternet Draft                                                MicrosoftCategory: Informational                                   

ProgSoft 2234

msn messenger protocol详细分析

网址:http://www.hypothetic.org/docs/msn/index.php另外, locale 编号: http://krafft.com/scripts/deluxe-calendar/lcid_chart.htm

1140

MSNP10协议分析 00.基本 [by progsoft]

1999年,Microsoft向IETF提交了一份"MSN Messenger Service 1.0 Protocol"草案,这是最初版本的MSN Messenger协议。    现在MSN版本为6.2,协议版本为MSNP10,本文着重介绍MSNP10的基本情况。    文章以作者分析研究体会为主,同时参考他人资料完成。    MSN协议都是基于TCP,除P2P的文件传输和语音对话等,所有

jiljil的专栏 692

http://www.anyliz.com/blog/article/Software/favorites-software-official-download-url.htm

Windows CE相关公开下载资源http://hi.baidu.com/tombkeeper/blog/item/f4dfc2131271a9075baf537e.htmlIE7 For Windows 2003http://download.microsoft.com/download/8/8/d/88dc5518-0a4d-4912-a8a3-a0fcb6fb657f/IE7-Window

y599920的专栏 9368

局域网文件传输与设备协同:LocalSend与飞秋实战对比

局域网文件传输是设备协同的基础能力,其核心在于让同一网络内的设备自动发现、快速传输并稳定交互。相比云盘中和U盘拷贝,局域网传输具有速度高、隐私可控、不依赖外网等优势,尤其适合办公室和家庭多设备场景。理解设备协同的三个层次——发现层、传输层、交互层,是选择工具的关键。LocalSend作为新一代开源跨平台方案,基于局域网广播自动发现设备,支持TLS加密和高速传输,适配Windows、macOS、Linux、Android、iOS全平台;而飞秋作为老牌企业工具,凭借IPMSG协议的广播机制和断点续传、远程协助

weixin_33826609的博客 317

MSN Messenger协议概况

P.bhw98{ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0px 5px; LINE-HEIGHT: normal; PADDING-TOP: 0px; FONT-FAMIL

3518

MSN协议

 1.         声明原文请见http://www.hypothetic.org/docs/msn/index.php,翻译中有改删,仅作学习用途。本人英文水平较差,只是凭着一腔热忱及毅力,勉强算翻译完毕,其中有若干意义描述模糊,不清楚之处请见原文。不喜请不要责怪,请当垃圾删除。我是MSN的初学者,欢迎上MSN与我交流,地址为Room3rd@hotmail.com。2. 

dtdn的专栏 6万+

MSN Messenger 协议分析

MSN Messenger 协议分析一 2007年11月21日 星期三 作者: 熊传波 <!--google_ad_client = "pub-4075792327756511";google_ad_width = 200;google_ad_height = 200;google_ad_format = "200x200_as";google_ad_type =

jiljil的专栏 1337

Wireshark应用

1. 过滤IP,如来源IP或者目标IP等于某个IP 例子: ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107 或者 ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP 2. 过滤端口 例子: tcp.port eq 80 // 不管端口是来源的还是目标的都显示 tcp.port == 80

00's Blog 3241

MSNP8 原文翻译 (Zz)

 MSNP8 原文翻译 (Zz) 1.         声明原文请见http://www.hypothetic.org/docs/msn/index.php,翻译中有改删,仅作学习用途。2.         概述2.1.        什么是MSN MessengerMSN Messenger”这个说法并不十分明确,微软使用这个术语涉及到了若干不同通讯解决方案。你可以通过“MSN Messeng

昆仑 4万+
上一篇: top命令的load average是什么意思?
下一篇: CodeIgniter 1.7.1 on PHP 5.3
多鱼的夏天
博客等级 码龄25年 1989粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多鱼的夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值