`
isiqi
  • 浏览: 16753220 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

MSN Messenger协议概况

阅读更多

前 言

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) - 客户端最初连接的服务器。负责给客户端分配合适的通知服务器。域名是messenger.hotmail.com,标准服务端口是1863。完成派遣任务后,切断TCP连接。
  • 通知服务器(Notification Server, NS) - 客户端需要一直保持连接的服务器。很多任务要在这个会话内完成,包括登录、改变状态、获取用户列表、修改用户信息、发起聊天、接受呼叫、邮件通知、退出等等。服务端口由派遣服务器指定,通常也是1863。
  • 接线服务器(Switchboard Server, SS) - 客户端之间聊天使用的中转服务器。每开一个聊天窗口,客户端和服务器就建立一个TCP会话。当客户端之间需要进行文件传输或语音聊天时,发送系统消息,建立"点对点"会话通道(可能转为使用UDP)。服务端口通常也是1863。"点对点" 通信使用的端口由客户端自动协商决定,如文件传输通常使用6891端口。

    2. 命 令

    MSN Messenger命令使用纯ASCII码。对非ASCII码字符使用URL编码。命令的语法是

    XXX[<SP>TrID<SP>PARAM1<SP>PARAM2…]<CRLF>

    其中,<SP>是空白字符,<CRLF>是回车换行,XXX是一个3字符的命令串,TrID是一个流水号,PARAMx是参数,[ ]内是可选项。最简单的命令没有流水号和参数。为了方便起见,下面讨论时用" "代表<SP>,"\r\n"代表<CRLF>,"\x??"代表一个值为0x??字节。红色表示由客户端发出,蓝色表示由服务器发出。一个MSN Messenger命令的例子如下:

    USR 18 TWN I example@hotmail.com\r\n

    3. 错 误

    无论是由于客户端发出的命令无效,参数无效,还是其他什么原因,服务器可以返回一个错误。格式为

    XXX[<SP>TrID]<CRLF>

    其中,XXX是一个3位数字的串。如

    ADD 21 AL non_existent@passport.com non_existent@passport.com\r\n
    205 21\r\n

    上例中,non_existent@passport.com是一个不存在的账号。

    4. 消 息

    MSN Messenger消息符合MIME 1.0标准,由消息头与消息体组成。通常使用UTF-8编码,消息头中也需要URL编码格式,消息体则直接用二进制数据。

    一个MSN Messenger消息的例子如下:

    MIME-Version: 1.0\r\n
    Content-Type: text/plain; charset=UTF-8\r\n
    X-MMS-IM-Format: FN=%E5%AE%8B%E4%BD%93; EF=; CO=0; CS=86; PF=0\r\n
    \r\n
    bhw98\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x81

    经简单分析可知,"%E5%AE%8B%E4%BD%93"是"宋体"的UTF-8加URL编码,而"bhw98\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x81"是"bhw98你好!"的UTF-8编码。

    〖相关资源〗

  • URL编码:RFC 1738
  • UTF-8编码:RFC 2279
  • MIME 1.0:RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049
  • Blobsy开源站点:www.maldivianunderground.net/blobsy/
  • Mike Mintz等研究MSN的站点:www.hypothetic.org/docs/msn/
  • MSN Messenger官方网站:messenger.msn.com
  • 科脑工作室(Kernel Studio):www.kernelstudio.com
  • 分享到:
    评论

    相关推荐

      MSN Messenger协议

      MSN Messenger协议是微软开发的一种即时通讯协议,它用于支持MSN Messenger客户端进行聊天、语音对话、视频会议等实时通信功能。MSNP(MSN Messenger Protocol)是一个不断演进的协议,随着软件版本的更新,协议也在...

      通信协议之MSN协议分析

      MSN协议是微软提供的一种即时通讯协议,用于实现MSN Messenger网络中的即时通讯。MSN Messenger网络是一个大型的即时通讯网络,由微软提供,成立于1999年,用户数众多。基于MSN Messenger网络的程序可以分为两个部分...

      MSN Messenger

      MSN 全称 MICROSOFT SERVICE NETWORK 微软网络服务...你通过"MSN Messenger 网络"聊天,用来连接MSN Messenger 网络的最流行的程序是"MSN Messenger",而程序在MSN Messenger 网络中使用的语言则是"MSN Messenger 协议"。

      [协议分析]MSN协议分析资料

      ### MSN Messenger协议分析 #### 一、MSN Messenger概述 ##### 1.1 什么是MSN Messenger “MSN Messenger”这一术语由微软公司提出,并涵盖了多种通信解决方案。通过“MSN Messenger网络”可以进行在线聊天,而...

      MSN协议简单分析

      MSN协议是实现MSN Messenger客户端与服务器之间通信的关键。协议定义了客户端如何连接到服务器,如何发送和接收信息,以及如何处理各种事件,如用户状态的变化。MSN Messenger协议包含了MSN Client协议和MSN Server...

      building msn messenger activity applications

      MSN Messenger Activity 应用开发 MSN Messenger Activity API 是一种允许开发者构建基于 MSN Messenger 的交互式应用程序的接口。这些应用程序,通常称为活动应用,利用了 MSN Messenger 的通信基础设施,让两个...

      msn协议详细实现分析

      MSN协议还支持文件传输功能,允许用户之间传输文件。文件传输是通过客户端和服务器之间的通信来实现的。 7. 群聊 MSN 协议还支持群聊功能,允许多个用户参与群聊。群聊是通过客户端和服务器之间的通信来实现的。 8...

      MSN Messenger 的源码.zip_delphi messenger_msn_msn delphi

      5. **加密与安全**:为了保护用户数据,MSN Messenger可能会使用SSL/TLS协议进行数据传输,源码中可能包含相关的加密算法实现。 6. **文件传输**:即时通讯软件常有文件分享功能,源码会包含文件上传、下载的逻辑。 ...

      用JAVA实现MSN Messenger的功能.doc

      本文将探讨如何使用Java语言实现MSN Messenger的功能,主要涉及的知识点包括Java编程、即时通讯协议(IM)、JML库以及相关的第三方库。 **JML库介绍** JML(Java Messenger Library)是专为Java开发者设计的一个库...

      用JAVA实现MSN Messenger的功能

      10. **协议实现**:MSN Messenger使用了专有的协议,开发者需要深入理解这个协议并实现它的Java版本。这可能涉及到解析和构造特定的网络报文。 总结来说,用Java实现MSN Messenger的功能是一项复杂的任务,需要掌握...

      MSN Messenger模仿界面

      【MSN Messenger模仿界面】 在IT领域,特别是软件开发中,模仿流行应用的界面设计是一种常见的学习方式。"MSN Messenger模仿界面"就是一个实例,它提供了一种通过Visual C++(简称VC)来实现类似MSN Messenger登录...

      MSN Messenger模仿界面源代码

      【MSN Messenger模仿界面源代码】是一个编程项目,旨在重现经典的MSN Messenger即时通讯软件的用户界面。这个项目对于学习和理解GUI(图形用户界面)设计、Windows应用程序开发以及.NET框架下的编程技术具有很高的...

      msn协议 中文版,非常好用

      1. **协议概述**:MSN协议基于TCP/IP,其主要目的是在互联网上实现用户间的实时通信。这个协议包括了消息交换、状态通知、文件传输等多个子协议。 2. **消息交换**:MSN协议的核心部分是消息传递,它允许用户发送...

      msn.rar_messenger_msn

      在MSN Messenger中,IDL文件用于定义服务端和客户端之间的通信协议。通过IDL,开发者可以定义数据类型、接口、模块和异常,这些定义将被编译成不同平台可以理解的代码,如C++或Java,以便在不同的系统间进行跨平台...

      MSN8.0 Install_Messenger MSN8.0 Install_Messenger

      【MSN8.0 Install_Messenger】是针对MSN8.0版本的安装程序,这是一款曾经非常流行的即时通讯软件,由微软公司开发。MSN Messenger,简称为MSN,是2000年代初期全球用户广泛使用的互联网通信工具,允许用户进行文本...

      MSNMessenger的完整克隆

      【标题】"MSNMessenger的完整克隆"指的是一个软件项目,它旨在模仿或复制微软的MSN Messenger服务的功能和用户体验。MSN Messenger是微软在互联网早期推出的一款即时通讯软件,允许用户进行文字聊天、语音通话、视频...

    Global site tag (gtag.js) - Google Analytics