<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dream☆Wing &#187; msn</title>
	<atom:link href="http://www.dreamwing.org/tag/msn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dreamwing.org</link>
	<description></description>
	<lastBuildDate>Sat, 05 Nov 2011 17:23:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MSN Messenger协议 原作：bhw98</title>
		<link>http://www.dreamwing.org/web/msn_messenger_protocol.html</link>
		<comments>http://www.dreamwing.org/web/msn_messenger_protocol.html#comments</comments>
		<pubDate>Thu, 05 Mar 2009 04:19:58 +0000</pubDate>
		<dc:creator>Dream☆Wing</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[msn]]></category>

		<guid isPermaLink="false">http://www.dreamwing.org/?p=567</guid>
		<description><![CDATA[前 言
MSN Messenger 是Microsoft开发的聊天工具，目前在国内拥有很大的用户群。使用MSN  Messenger可以与他人进行文字聊天，语音对话，视频会议等即时交流，还可以通过此软件来查看联系人是否联机等。该软件的最新版本是6.1。
1999年，Microsoft向IETF提交了一份”MSN Messenger Service 1.0 Protocol”草案，这是最初版本的MSN Messenger协议。在以后几年，该公司不再公开有关MSN Messenger协议的升级、修改细节的官方文档。但无论是开发第三方的聊天客户端软件(如Gaim, MyIM等)，还是做协议分析，必须对其通信协议有深入了解。正因为如此，有一些民间人士对这些协议开展了研究(见本文的”相关资源“一节)。
当我们还在感叹”这世界，变化快”的时候，MSN Messenger的协议已经到了第10版，简称MSNP10，对应于MSN Messenger 6.1。MSN Messenger 6.0则使用MSNP9。现在Microsoft强迫MSN Messenger用户升级到6.0或6.1版，因为服务器对MSNP8以下的版本不再支持。本文及后续文章所描述的MSN Messenger协议主要针对MSNP9/MSNP10。
1. 连 接
MSN Messenger协议建立在TCP/IP之上。除了文件传输和语音聊天是直接的”点对点”通信之外，其它所有的情形全部通过服务器进行。
在逻辑上，一共有三种类型的服务器，各司其职：
 
派遣服务器(Dispatch Server, DS) &#8211;  客户端最初连接的服务器。负责给客户端分配合适的通知服务器。域名是messenger.hotmail.com，标准服务端口是1863。完成派遣任务后，切断TCP连接。
通知服务器(Notification Server, NS) &#8211;  客户端需要一直保持连接的服务器。很多任务要在这个会话内完成，包括登录、改变状态、获取用户列表、修改用户信息、发起聊天、接受呼叫、邮件通知、退出等等。服务端口由派遣服务器指定，通常也是1863。
接线服务器(Switchboard Server, SS) &#8211; 客户端之间聊天使用的中转服务器。每开一个聊天窗口，客户端和服务器就建立一个TCP会话。当客户端之间需要进行文件传输或语音聊天时，发送系统消息，建 立”点对点”会话通道(可能转为使用UDP)。服务端口通常也是1863。”点对点” 通信使用的端口由客户端自动协商决定，如文件传输通常使用6891端口。2. 命 令MSN Messenger命令使用纯ASCII码。对非ASCII码字符使用URL编码。命令的语法是
XXX[&#60;SP&#62;TrID&#60;SP&#62;PARAM1&#60;SP&#62;PARAM2…]&#60;CRLF&#62;
其中，&#60;SP&#62;是空白字符，&#60;CRLF&#62;是回车换行，XXX是一个3字符的命令串，TrID是一个流水号，PARAMx是 参数，[ ]内是可选项。最简单的命令没有流水号和参数。为了方便起见，下面讨论时用” “代表&#60;SP&#62;，”\r\n”代表&#60;CRLF&#62;，”\x??”代表一个值为0x??字节。红色表示由客户端发出，蓝色表示由服务 器发出。一个MSN Messenger命令的例子如下：
USR 18 TWN I example@hotmail.com\r\n
3. 错 误
无论是由于客户端发出的命令无效，参数无效，还是其他什么原因，服务器可以返回一个错误。格式为
XXX[&#60;SP&#62;TrID]&#60;CRLF&#62;
其中，XXX是一个3位数字的串。如
ADD 21 AL [...]]]></description>
		<wfw:commentRss>http://www.dreamwing.org/web/msn_messenger_protocol.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

