转:MSN 协议分析

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

原文:http://hi.baidu.com/todaygoodhujun/blog/item/4e84cc1382121c23dd540118.html


MSN 协议分析


一、概要介绍 
msn messenger通常使用端口1863进行通信(在实际中用sniff跟踪发现msn通信都是用1863端口进行通信的)。在msn messenger工作中,本机客户端与三种服务器通过协议进行通信和数据交换。(dispatch服务器、notification服务器tchboard服务器)。在本机客户端和各服务器之间主要通过两种形式的进行通信,一种是命令,另一种是消息。 
dispatch服务器主要用于初始化连接服务器。用户首先利用地址messenger.hotmail.com 和端口 1863连接dispatch服务器,然后根据再返回的ip地址和端口来连接notification服务器。 
notification服务器是msn messenger的主工作区,几乎所有的操作都要与notification服务器进行连接和信息交换,包括用户的状态改变、聊天请求以及来信通知。实际在工作中notification服务器的ip地址和端口固定为64.4.13.195:1863。 command:多数数据是以标准的命令格式发送的。标准的命令格式主要由三部分组成,以命令标识符开始,然后是参数,以换行为结束。参数之间以空格区分。 
message:是一种独特的命令方式。它以msg开头,每个消息的第一行的末尾以一个数字来表示消以下部分息的字节数(包括mime头和主体部分)。第二行为mime的头,一般形式为mime-version: 1.0,以换行结束。下一行所代表的是要发送消息的类型,定义的格式为content-type: */*; charset=utf-8,其中*/*代表消息类型,charset=utf-8是完全可选的,与是否使用该参数与定义的消息类型有关。随后mime头以两个换行结束,用于区分消息主体。 
transaction id:在客户端向服务器端发送的每个命令和消息中都包含一个transaction id。其位于命令标识符和msg后面,服务器端收到客户端的相应命令和消息后,回应客户端时把对应的transaction id返回给客户端,客户端根据transaction id来判断服务器回应的是哪个请求。每次客户端向服务器发送一次命令或消息后,transaction id自动加1。

二、启动msn 
初始化连接 
(1) 连接的第一步是连接dispatch服务器。打开一个tcp socket,通过ip地址messenger.hotmail.com和1863端口连接dispatch服务器。 
(2) 当连接dispatch服务器成功后,本机客户端向dispatch服务器发送一个ver命令,以msnp7 msnp6 msnp5 msnp4 cvr0(协议版本)作为参数。服务器收到请求后,同样返回ver命令,如果参数为0,表示协商失败。 
(3) 本机客户端收到回复后,向服务器发送一个无参数的inf请求,请求一个认证算法。当dispatch服务器收到后返回md5。 
(4) 本机客户端根据返回的参数向服务器发送usr命令,其中传入两个参数,第一个为服务器返回的md5,第二个参数为客户申请登陆的电子邮件地址。服务器根据收到的请求返回一个xfr命令,把notification服务器的ip地址和端口作为参数返回给客户端。 
(5) 最后客户端根据ip地址和端口去连接notification服务器。以下是客户端和dispatch服务器的实际通信过程。 
connect: messenger.hotmail.com 1863 
>>> ver 0 msnp7 msnp6 msnp5 msnp4 cvr0 
<<< ver 0 msnp7 msnp6 msnp5 msnp4 cvr0 
>>> inf 1 
<<< inf 1 md5 
>>> usr 2 md5 i [email]example@passport.com[/email] 
<<< xfr 2 ns 64.4.12.132:1863 0 
disconnect

连接notification服务器 
连接notification服务器成功后,前三步执行的操作与dispatch服务器相同。 
(6) 同样本机客户端根据返回的参数向notification服务器发送usr命令,其中传入两个参数,第一个为notification服务器返回的md5,第二个参数为客户登陆的电子邮件地址。服务器收到请求后返回usr ,包含两个参数 md5 s #.#。 #.# 为 md5 hash。 
(7) 客户端根据收到的答复后再次发送一个usr,参数为md5 s #。其中#为上次服务器返回的md5 hash的小写16进制。服务器收到后返回usr,参数为okuser@host name 1。user@host为用户登陆的电子邮件地址,name为用户的映射名。 
(8) 当用户成功登陆msn后,客户端向服务器发送一个chg请求,请求服务器修改新登陆用户的状态,参数为nln。参数nln表示在线,这是每个用户登陆后需要做的第一步初始化用户状态。以下为notification服务器与客户端之间的通信过程。 
connect: 64.4.12.132 1863 
>>> ver 3 msnp7 msnp6 msnp5 msnp4 cvr0 
<<< ver 3 msnp7 msnp6 msnp5 msnp4 cvr0 
>>> inf 4 
<<< inf 4 md5 
>>> usr 5 md5 i [email]example@passport.com[/email] 
<<< usr 5 md5 s 1013928519.693957190 
>>> usr 6 md5 s 23e54a439a6a17d15025f4c6cbd0f6b5 
<<< usr 6 ok [email]example@passport.com[/email] my%20screen%20name 1 
>>> chg 7 nln 
<<< chg 7 nln 
continue session . . .


三、语音对话 
通信过程 
(1) 本机客户端向notification服务器(64.4.13.195:1863)请求两个新tchboard服务器地址,其中一个用于发送请求,另一个用于接受回复。如下面表格所示:

secondary connection port range protocol type direction info 
6891-6900 tcp inbound sending 
6891-6900 tcp outbound receiving

客户端通过tcp向服务器发送xfr命令,参数为sb。notification服务器收到请求后,同样以xfr命令返回,参数中包tchboard服务器的ip地址和端口以tchboard服务器的登陆序号。如下例所示: 
>>> xfr 10 sb 
<<< xfr 10 sb 64.4.12.193:1863 cki 16925950.1016955577.17693 
(2) 客户端根据返回的ip地址和端口好,通过tcp协议连接两tchboard服务器。 
(3) 连接成功后,客户端分别向两tchboard服务器发送usr命令,第一个参数为实际连接的电子邮件地址,第二个参数为第二步骤返回tchboard服务器登陆序号。如果发送成功,tchboard服务器返回usr命令,第一个参数为ok。如下例所示: 
>>> usr 1 [email]example@passport.com[/email] 16925950.1016955577.17693 
<<< usr 1 ok [email]example@passport.com[/email] mike 
(4) 当邀请对方对话时,把对方的注册的电子邮件地址作为参数传递到cal命令中,然后发送tchboard服务器,收到该请求后,服务器返回一个id号。同时服务器又向客户端发送joi命令,把被请求方的电子邮件地址作为第一个参数。如下例所示: 
>>> cal 2 [email]name_123@hotmail.com[/email] 
<<< cal 2 ringing 11752099 
<<< joi [email]name_123@hotmail.com[/email] name_123 
以上步骤都是本机客户端与两tchboard服务器之间同时进行,都执行了以上所有的步骤。 
(5) 当客户要进行语音对话时,本机客户端向发送请求tchboard服务器发送一个请求(假设tchboard服务器的ip地址:64.4.12.192,端口:1863)。该请求的格式如下例所示: 
msg 4 n 277 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
application-name: 请求服务类型 
application-guid: {5d3e02ab-6190-11d3-bbbb-00c04f795683} 
session-protocol:sm1 
context-data: 
requested:sip_a; capabilities: sip_a,sip_v 
invitation-command: invite 
………… 
(6) 服务器64.4.12.192收到该请求后,回复ack,表示确定已收到该请求。 
(7) 当被请求方接受你的语音对话邀请后,回复tchboard服务器(假设为ip地址:64.4.12.159,端口:1863)向本机客户端发送回复,其回复格式如下: 
msg [email]name_123@hotmail.com[/email] name_123 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
invitation-command: accept 
………… 
ip-address:返回被请求方的ip地址 
(8) 当本机收到该回复后,向服务器64.4.12.159发送一个消息,其格式如下: 
msg 4 a 237 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
invitation-command: accept 
………… 
ip-address:本机的ip地址和端口 
(9) 服务器64.4.12.159收到该消息后,返回一个ack命令,表示确认已收到。 
(10) 然后由被请求方根据本机客户端的ip地址和端口进行udp连接,进行数据传递。 
四、发送文件 
通信过程 
(1) 文件操作的通信过程与语音对话前四步相同,但发送文件操作只申请一tchboard服务器(假设ip地址:64.4.12.164,端口:1863)。 
(2) 当客户要进行文件发送时,本机客户端向服务器64.4.12.164发送一个请求,其格式如下: 
msg 4 n 277 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
application-name: file transfer 
application-guid: {5d3e02ab-6190-11d3-bbbb-00c04f795683} 
invitation-command: invite 
invitation-cookie: 33267 
application-file: readme.txt 
application-filesize: 60904 
(3) 服务器64.4.12.164收到该请求后,等被请求方用户接受该请求后返回给本机客户端一个答复,其格式如下: 
msg [email]example@passport.com[/email] tim 179 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
invitation-command: accept 
invitation-cookie: 33267 
launch-application: false 
request-data: ip-address: 
注意:其中最后一行包含了对本机ip地址和端口号的请求。 
(4) 本机收到该回复后,立刻向服务器64.4.12.164发送一个消息,其格式如下: 
msg 4 n 238 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
invitation-command: accept 
invitation-cookie: 33267 
ip-address: 10.44.102.65 
port: 6891 
authcookie: 93301 
launch-application: false 
request-data: ip-address: 
注意:该消息中包含了本机的ip地址和端口。 
(5) 然后由被请求方根据本机客户端的ip地址和端口进行tcp连接,进行文件发送。 
五、视频对话 
通信过程 
视频对话的通信过程与语音对话相同,同样申请两tchboard服务器,最后通过udp进行连接,进行数据传送。 
六、发送即时消息 
发即时消息 
发送即时消息的通信过程与语音对话前四步相同,但只申请一tchboard服务器(假设ip地址:64.4.12.174,端口:1863)。完成上述四步操作,完成对服务器64.4.12.174的连接后,如果本机客户端要向另一个客户端发送即时消息,就会向服务器64.4.12.174发送一个消息,消息中附带要发送的内容,其格式如下: 
msg 3 a 157 
mime-version: 1.0 
content-type: text/plain; charset=utf-8 
x-mms-im-format: fn=microsoft%20sans%20serif; ef=i; co=000000; cs=0; pf=22

hello! how are you? 
注:最后一行为发送的内容。 
收即时消息 
如果有一个客户端向你本机发送即时消息,则通过服务器64.4.12.174,即连接本机客户端tchboard服务器发送一个消息,其消息格式如下: 
msg [email]example@passport.com[/email] mike 157 
mime-version: 1.0 
content-type: text/plain; charset=utf-8 
x-mms-im-format: fn=microsoft%20sans%20serif; ef=i; co=000000; cs=0; pf=22

hello! how are you? 
注:第一行msg命令后的参数为对方客户端的电子邮件地址,最后一行为发送内容。 
七、启动白板 
通信原理 
(1)其通信原理与语音对话通信原理前几步骤基本一致,但在第8步的时候有所不同,本机向服务器(64 .4.12.160:1863)发送的消息中并不包括本机的端口号,只返回了一个ip地址,其结构所示如下: 
msg 4 a 237 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
invitation-command: accept 
………… 
ip-address:本机的ip地址 
(2)随后服务器64 .4.12.160回复ack。 
(3)本机客户端向notification服务器(64.4.13.195:1863)发送一个qry请求,确定是否保持和服务器64.4.13.195的连接。 
(4)服务器64.4.13.195返回一个无参数的命令qry,表示确定。 
(5)然后由服务器64 .4.12.160发送一个消息,其结构如下所示: 
msg [email]name_123@hotmail.com[/email] name_123 
mime-version: 1.0 
content-type: text/x-msmsgsinvite; charset=utf-8 
invitation-command: context 
context-data:10.1.1.211:13374 
………… 
注:在context-data选项中包含了被请求方的ip地址和端口号 
(6) 本机向被请求方进行tcp连接,随后进行数据交换。 
八、启用应用程序共享 
其通信过程与启用白板相同。 
九、发现问题 
由于通过上网查找的有关msn文档和资料相对有点早,与现在所用的版本有差别,所以在一些细节方面还是有所不同的,比如在实践中用sniff跟踪数据包发现先行版本的msn在启动的时候并没有进行初始化连接dispatch服务器,而是直接与notification服务器进行连接。notification服务器的ip地址和端口也不是由dispatch服务器返回的,而是已经实际指定了(64.4.13.195:1863)。 
十、解决方法 
获取ip地址和端口 
(1)首先根据notification服务器(64.4.13.195:1863),本机客户端与服务器64.4.13.195:1863之间会建立一条连接。 
(2)用户新开一个窗口进行操作时,本机客户端会向服务器64.4.13.195:1863请tchboard服务器的ip地址和端口,然后根据返回tchboard服务器的ip地址和端口建立一条连接。我们可以根据服务器64.4.13.195:1863返回的数据包获取请求tchboard服务器的ip地址和端口。服务器以命令形式返回,其格式如下:xfr 10 sb 64.4.12.193:1863 cki 16925950.1016955577.17693。我们可以根据命令行关键字xfr来截取这个包,然后解tchboard服务器的ip地址和端口。 
(3)tchboard服务器与客户端连接成功后,在操作之前本机客户端会tchboard服务器发送一个消息,邀请另一方加入。如果对方接受你的邀请,则会tchboard服务器向你发送一个消息,接受你的邀请。在消息中会有一个关键字ip-address,其可能会包含着对方的ip地址和端口或只有ip地址。如果包含端口号则用“:”区分。如果在选项ip-address中没有包含端口,则需查找另一个关键字port,其可能存在端口号(发送文件返回的消息中存在这个关键字,其余的操作中好象没有发现)。 
(4)当本机客户端收tchboard服务器的回复后,再次回复一个消息。其中同样可能包含着本机的ip地址和端口,因此需要向上述步骤3一样进行分析,获取本机的ip地址和端口。启用白板功能例外,本机客户端返回的ip地址和端口存放在消息的context-data选项中。最后由本机和被邀请方之间建立一条连接。在msn通信过程中所有的消息都是由msg开头的。截获数据包后先分析第一行是否以msg开头,然后再从消息中查找关键字ip-address、port和context-data,从中获取要建立连接的ip地址和端口。 
区分建立的连接是tcp还是udp 
在msn中只有语音对话和视频对话的连接是udp的。首先客户端会向服务器发送一个操作请求数据包,包中存在一项数据指明了请求的操作类型,其关键字以application-name开头,随后为相关数据以ascii 码表示。语音对话和视频对话ascii 码相同,都为3a 20 e8 af ad e9 9f b3 e5 af b9 e8 af 9d 0d 0a,其中3a 20为冒号和空格,0d 0a为回车和换行。只要截取这段数据就能获取请求的操作类型。application-name只存在一次,只有第一次发请求操作时包含这项,以后就这项数据就不存在了。服务器返回ip地址和端口时为了便于区分到底是哪个操作请求需要建立的连接,因此在数据包中还存在一项为invitation-cookie,其内容为一串随机生成的数字。在服务器返回的数据包中都把这项数据返回给客户端,因此客户端可以根据返回的id区分具体是哪个操作请求的ip地址和端口。根据application-name和invitation-cookie,我们就可以区分随后建立的连接是哪个操作请求的以及建立的连接是tcp还是udp。 
注:此外其它操作类型对应的ascii 码分别为: 
文件传输:3a 20 e6 96 87 e4 bc a0 e8 be 93 0d 0a 
启用白板:3a 20 e7 99 bd e6 9d bf 0d 0a 
寻求远程协助:3a 20 e8 bf 9c e7 a8 8b e5 8d 8f e5 8a a9 0d 0a 
启用应用程序共享:3a 20 e5 ba 94 e7 94 a8 e7 a8 8b e5 ba 8f e5 85 b1 e4 ba ab 0d 0a 
此外发送消息没有该项数据内容。


MSN Media协议分析 整理记录 版本 时间 内容 整理人 阅读详情

相关推荐

MSN Messenger协议 原作:bhw98

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

【反思—FANCC】的专栏 3329

MSN协议简单分析

能给同学们很好的找到自己想要的MSN设计的资源信息,给即将毕业的学生一个很好的利用资源

MSN与FTT协议:网络通信技术详解与监控实践

本文还有配套的精品资源,点击获取 简介:MSN和FTT是网络通信中常用的协议,各自在不同场景下发挥重要作用。MSN协议是微软的一项综合服务,主要提供即时通讯功能,并且其背后技术对即时通讯领域有深远影响。FTT协议设计用于提高P2P网络中的文件共享效率。本文将详细介绍这两种协议的基本概念、工作原理,并结合网络监控知识,探讨如何通过网络包捕获和分析来深入理解协议细节和优化网络性...

weixin_42518334的博客 2085

MSN 协议

msn协议,html文档

MSN 协议分析

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

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

MSN协议中文释义(Zz)

我们可以把MSN工作机制分成两个阶段:认证阶段认证阶段包括登陆到MSN即时通的服务器并且取得好友列表即时通讯阶段即时通讯阶段包括发送/接受进入即时通讯阶段的请求和发送/接受消息。MSN即时通讯软件的协议是基于ASCII码的协议,用其他话来讲就是所有的命令都必须是英文的!第一个阶段包括连接到MSN即时通软件的服务器。在这个阶段我们应该连接到服务器“messenger.hotmail.com”的18

【反思—FANCC】的专栏 4409

MSNP18协议分析(一)--- MSN协议介绍

主要介绍MSNP18协议的发展和基本概念,为这一些列的开篇。

CC的技术专栏 7292

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

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

<p class="MsoNormal" style="margin-left:21.0pt;text-indent:-21.0pt;mso-list:l0 level1 lfo1;tab-stops:list 21.0pt"><span lang="EN-US" style="mso-bidi-font-family:宋体">一、MSN<span style="font-fami

Jaytse的专栏 7546

Msn15 协议分析

发布时间:2007年7月PS:应该把这个小工具发布出来MSN协议分析21:56:  VER 77 MSNP15 MSNP14 MSNP13 CVR0  //-->协商MSN版本请求 21:56:  VER 77 MSNP15 MSNP14 MSNP13 CVR0  //协商MSN版本请求 21:56:  CVR 78 0x0804 winnt 6.0 i386 MS

guagua 8797

MSN Messenger 协议分析

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

jiljil的专栏 1395

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

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

dankes 2457

MSN Messenger协议概况

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

0ffs3t 1527

MSNP15(MSN8.1)协议分析

MSNP15(MSN8.1)协议分析第1章.     MSNP15概述MSN是微软推出的一款聊天工具,它的通信协议是微软自己提出的MSNP(即MSN Protocol)。MSNP目前还不是因特网标准协议,但却发展迅速,被广泛地应用到各种聊天工具的开发中。MSNP更新很快,当前的最新版本为MSNP15(即版本15)。MSN8.1所使用的协议就是MSNP15。MSNP15支持即时消息、文件

彭令鹏(bripengandre)的专栏 7448

MSN Messager协议分析

MSN Messenger 协议分析将分如下几个部分进行:1,MSN Messenger 协议概述2,登陆部分3,文本聊天部分4,音视频聊天部分5,显示图片部分6,文件传输部分第一部分 MSN Messenger Protocol概述一.What is the MSNP (MSN Messenger Protocol)?       MSN消息协议由一系列的在客户端和服务器之间传送的命令组成。

红梅花儿开 2083

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

一.What is the MSNP (MSN Messenger Protocol)?           MSN消息协议由一系列的在客户端和服务器之间传送的命令组成。例如,你的一个好友下线了,服务器就会发送一条消息:FLN example@hotmail.com 到你的客户端。你的客户端就会将这个好友标记为下线状态。FLN就是一个在服务器和客户端传送的命令,它带有参数example@hotm

漫漫人生路 2374

MSN协议分析

MSN各版本协议和命令http://msnpiki.msnfanatic.com/index.php/Main_Page

rainharder的专栏 820

MSN协议

 MSN协议 

tuhuolong的专栏 627
上一篇: [转] GCC 中文手册
下一篇: 转:架构设计:生产者/消费者模式[3]:环形缓冲区
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值