这一篇开始主要介绍MSN登录部分的协议分析,总体来说,登陆这一块是整个MSNP协议的一大块,也是比较复杂的一部分。整个登录的过程主要包括:连接服务器,身份验证,获取用户信息和联系人列表,把联系人列表发送给服务器,发送个人信息和状态,上线通知。我也打算按照登录的顺序去进行介绍。

这里我主要关注的是如何成功的登录,但是因为大多数都是抓包,也没有权威的官方资料参考,所以不能保证完全正确和详细,有些也不能给出合理的解释,但还是尽可能的介绍登录中会出现的各种情况,以及登录中用到的命令。

在使用命令之前,我们需要注意的时,普通命令后面都带有/r/n结尾。而palyload命令是根据数据长度找到结尾。我们在发送时必须注意这一点,如果发送的数据没有结尾标识,服务器会断开连接。另外发送的命令都需要以UTF8格式发送。

 

 

一 连接服务器

 

登录最终的目的是登录到NS服务器,与之建立连接并进行交互。一直到用户退出或注销时,才断开与服务器的连接。在登录到NS服务器之前,我们需要先连接到DS服务,并获得NS服务器的地址。

 

1 连接到DS服务器

 

DS服务器的地址是:messenger.hotmail.com ,端口号是1863在通过Socke连接之前需要对这个域名进行解析,而且解析的IP是不固定的,所以不建议使用固定的IP去连接DS服务器。以下是MSN Live 2009登录时和DS服务器之间的交互数据。

>>>VER 1 MSNP18 MSNP17 CVR0/r/n

<<<VER 1 MSNP18/r/n

>>>CVR 2 0x0804 winnt 5.1 i386 MSNMSGR 14.0.8089.0726 msmsgs test@live.cn/r/n

>>>USR 3 SSO I test@live.cn/r/n

<<<CVR 2 14.0.8089 14.0.8089 14.0.8089 http://msgruser.dlservice.microsoft.com/download/0/9/7/0974F7CD-D082-46FE-922D-806670345793/zh-chs/wlsetup-cvr.exe http://download.live.com/?sku=messenger/r/n

<<<XFR 3 NS 207.46.124.241:1863 U D/r/n

 

VER命令

这是和DS服务器发送的第一条消息,他是告诉服务器客户端支持的MSNP版本。MSNP版本功能在上一篇文章有所介绍,发送的版本号可以是多个版本。发送的版本号是区分大小写的。最后一个参数是CVR0,他实际是(CVQ, VER) 的命令集合,用来设置客户端版本,使得客户端能够升级。但具体作用不详,不发送也是可以的。最后要注意的是最后一个参数结尾要带上”/r/n”。服务器在接受到命令后,会从我们发送的协议版本中选一个他支持的最高本版,如果我们发送的协议版本他不支持,就返回一个0。目前最新的协议支持到了MSNP21。

 

CVR命令

这是是CVR命令的格式CVR trid lcid osName osVersion processorType clientName clientVersion [brandId] [userHandle]。聪从名字就能看出每个参数的作用。 lcid是地区编码,0x804表示的是中国。 clientVersion我们可以根据MSNP对应的官方版本来确定; brandID官方客户端是msmsgs ,最后一个就是登陆用户的账号。服务器会返回给你版本信息,最新的MSN下载地址,这些可以无视,我们又不是用MS的客户端。哈

继续阅读

近一个多月一直在做手机上一个MSN客户端的项目,目前项目也接近尾声。对于MSN的一套协议,有了一个大概的了解。之所以说是大概的了解,是因为文档基本没有,网络上大部分都是比较老的协议。唯一具有参考价值的是一个C#版的开源MSN和一份微软MSNP13的命令文档。更多的还是我们自己抓包进行分析,加上项目紧,没有时间对协议进行深入的分析。基本上是抓到什么用什么,用什么抓什么。呵呵。加之网络上基本上找不到完整的MSPN18协议的介绍,所以就打算写这一个系列,介绍自己了解到的一些东西。

在开始这一系列之前要感谢项目组的同事们,因为很多协议命令需要他们来给我讲解的。哈哈

 

 

一 MSNP

 

 

MSNP是MSN Protocol的缩写。对于聊天软件来说,实际就是用户和用户,用户和服务器之间的数据传输。协议就是数据传输的规则。在使用MSN时,为什么对方上线我们能知道,为什么对方更改头像我们能知道。因为他在进行这些操作时发送了一些数据通知服务器,而服务器接收到这些数据时,广播给他的好友,然后我们就接受到他上线的消息了。

所以微软定义了一套MSN使用的协议,也就是MSNP。MSNP的版本,目前最新的版本已经是MSNP21了,使用在最新的MSN 2011上。而目前使用的最多的客户端还是MSN 2009,他是基于MSNP18协议的。微软的服务器对以前的版本是兼容的,但是微软建议使用MSN8.1以上的版本,而MSN8.1是基于MSNP15协议开发的。

MSNP版本 对应MSN版本 更新概述
MSNP9 MSN Messenger 6.0 协议大多数的改都是了支持MSNC1(也成传输)。使用MSNP9接Messenger 服于MSNP8相差不大
MSNP11   版本协议引入了非常多的改,最重要的做出口令,以及如何排同的、已访问的、已改的和新增的列表。
MSNP12 MSN Messenger 7.5 协议没有太多功能改,除了系人型的概念,使MSNP12比MSNP11更能兼容MSNP13等高版本协议
MSNP13 Windows Live Messenger 8.0 协议基于MSNP12,但系人列表的方式与MSNP12不兼容。 MSNP13在普通服器上工作,地址:messenger.hotmail.com:1863。注意:如果需要做Yahoo!互操作性测试,需要支持MSNP14!MSNP13也引入的对离线消息的完全兼容(上一个版本的client不行)。
MSNP14 Windows Live Messenger 8.0.0792 协议主要改是与Yahoo!的互操作性。
MSNP15 Windows Live Messenger 8.1 协议基于MSNP14,但使用了不同的验证方式RPS(Relying Party Suite)/SSO。TWN(”Tweener”)验证方式用MSNP14及以下版本,RPS方式将使用在MSNP15及以上版本。也就是经历了最始的MD5方式,MSNP8以上的TWN方式后,新的MSN验证方式又出来了。    微软计划为新的验证机制增加更多的属性以支持用的漫游。也就是,用户显示的片,以及以后的【个人状消息】,无里登都是一的。    此外,位置的支持已添加到【个人状消息】功能中。尽管后来功能已从Windows Live Messenger 8.1 的客除。重要明:所有使用09607671-1C32-421F-A6A6-CBFAA51AB5F4用程序id的SOAP求都将返回500错误。因为该 id是来自于旧的beta客端且被微屏蔽了。应该使用来自Windows Live Messenger 8.5的id:CFE80F9D-180F-4399-82AB-413F33A1FA11 ,或者其它有效的SOAP求id。
MSNP16 Windows Live Messenger Beta 2009 14.0 该版本协议主要引入了多点登录机制(MPOP),允许一个用户在不同地点同时登录
MSNP18 Windows Live 2009 (final) 增加MSN群的支持。登录时增加了发送机器的GUID
MSNP19-21 Windows Live 2011 这个版本变动极大,完全改变了通信方式,不在使用SwitchBroad。使用的命令也有大量改

以上是对MSNP9到最新的MSNP21协议变化的一个介绍,这里并不打算详细介绍其中的变化,只需要简单的了解。对于MSNP19-21变动比较大。目前还不了解。

关于MSNP协议:http://www.hypothetic.org/docs/msn/general/overview.php 这里介绍的很详细,虽然协议版本比较老,但是大部分还是使用的,一开始觉得这个比较老,没有太大用处,最后还是老老实实的读了一遍,才发现有不少收获。

继续阅读

说到源码管理,CVS,VSS,SVN,TFS大家在公司可能都用的比较多了。但是在公司的环境基本都是在局域网中或者是专线连结到远程服务器来使用。平时自己在家和朋友一些写一些代码的时候都苦于没有代码管理工具,没有网络环境,而不能不把代码传来传去,很是麻烦。不过Google code提供了免费的SVN空间,主要注册了GMAIL,然后就可以使用SVN进行源码管理,和其他人共同开发了。网上有介绍的,不过我看了都不怎么详细,自己摸索了下,写下来大家分享下。

 

 

一 访问Google code

 

Google code的地址是 http://code.google.com/  ,如果使用cn去访问好像访问不了,我这里是一片空白。管理项目的话可以直接使用http://code.google.com/hosting/ 地址访问。用Gmail登录进去,页面的中间有【Create a new project 】,点击以后就可以创建项目了。

 

 

二 创建自己的项目

 

在创建项目的页面,填写项目名,概要和描述,其中项目名开头要小写,还不能有空格和其他符号。然后就是选择版本管理系统,证书等等,这些我也不懂,随便选吧,反正这有选好了,【Create Project】才可用。这里要注意的是项目名字可能冲突。如果创建成功就可以进入项目管理界面

三 项目管理

 

项目管理中,上方的菜单【Project Home】可以看到项目的概述和描述。点击【Source】就可以进行源码的管理。其中有2个地址,一个是Https开头的,一个是http的,https开头的是带加密的,所以如果要commit新的代码的时候就需要使用这个地址。而如果仅仅是取得代码可以只使用http开头的地址。

使用https的地址的时候需要提供用户名和密码,这里的用户名是Gmail的用户名,而密码是Google给每个项目生成的,而非是Gmail的密码。点击【When prompted, enter your generated googlecode.com password 】后面的蓝色连接可以看到密码。这个密码是你所有项目的密码,而不是每个项目一个密码。

四 用户管理

 

项目建立好以后就可以把其他人加入到项目中,这样就可以共同开发了。首先点击上方的【Administer】,然后点【Project members】,在下面填入要加入的用户Gmail就可以了。有Project owners,Project committers,Project contributors。具体解释右侧都有。点击保存后,其他用户登录后,在右上方的【My Favorite】下就可以看到自己加入的项目了。然后按三中介绍的方法找到密码。

 

 

五 其他管理

 

Google Code还提供了wiki等功能,我没用上,所以不是太了解。

 

 

六 安装客户端和VS插件

 

上面的工作做好后就是上传源码和文档。但是我找了半天也不知道怎么上传。以为是直接网页上上传,原来也要安装SVN客户端。在这里

http://tortoisesvn.net/downloads  可以下载到最新的TortoiseSVN,这个应该是目前用的最多的SVN客户端软件了。E文不好的朋友上面还提供了中文语言包。

安装完客户端后需要重启电脑,然后就可以远程连接到SVN服务器了。其中URL就填写Google 提供的哪个https的URL地址,然后填写用户名(Gmail)和密码(项目密码),保存后就OK了。客户端可以支持连接多个URL,每次启动的时候可以选择要连接到那一个。

 

支持SVN的VS插件我使用的是AnkhSvn,http://ankhsvn.open.collab.net/servlets/ProjectDocumentList?folderID=198 这里可以下载到最新版本。目前可以支持到VS2010,之前使用老版本对VS2008支持不好,文件状态不对,而且不能提交,换到最新版的时候就好了。安装的时候配置VS要比较长时间,不要以为是死掉了。如果只安装AnkhSvn而不安装TortoiseSVN也是可以的,不过你在VS中会发现,操作的功能少了很多,比如分支,合并等等。

 

七 使用VS进行开发和源码管理

 

进入到VS中,打开【工具】–【选项】–【Source Control】,默认应该是已经配置好了为AnkhSvn。然后可以点击【文件】-【Subvwrsion】打开服务器上的源码。和其他工具一样,要选择一个本地路径来保存。

 

1:文件状态介绍

蓝色小勾:Check out状态;橙色小勾:文件被修改状态;橙色小方块:文件修改被保存;加号:新添加文件。

 

2:SNV版本控制

和VSS不同的时,VSS默认是锁住的状态,需要手动Check Out,而SVN是自动Check Out。那么这样不是会有冲突吗,其实这个和VSS允许多人牵出是一样的。在你Commit的时候,会检查版本,会自动合并或提示冲突或是版本过期等等。

  • 获取最新代码:这个不用说了就是从服务器上拿最新代码,但是如果你修改了文件,然后拉最新代码,这个时候系统会自动吧你修改的不部分和最新代码进行合并,如果有冲突会提示,要修修改冲突。
  • 获取指定版本代码:这个可以通过查看历史,或者指定版本号来拉去指定版本的代码。这是同样会合并代码。需要注意的是,SVN的版本号和VSS不同,是全局版本号,而不是每个文件有一个版本号。这个要特别注意,因为你会发现一个文件版本号可能是跳跃的。
  • Switch:有这样一个功能,可以把当前版本切换为制定的版本,和获取指定版本不同,他也会自动合并不同的地方。
  • Revert:恢复功能,恢复到修改前的状态。这个要注意的是,如果你对文件修改,然后获取了最新代码,然后恢复,这个时候是恢复到最新版本,而不是修改前的那个版本。这点要注意
  • 版本冲突:这里版本冲突有2种情况,如果你当前版本为1,服务器版本为2,你修改或提交,服务器会提示你本地版本过期了,你可以拉最新代码,并解决冲突后再次提交;如果你当前版本为2,服务器版本为2,而你从服务器获取版本1的代码,修改后,然后提交,这个时候是不会提示版本过期的,会覆盖掉服务器上的版本2,而成为版本3。这样是会冲掉代码的。
  • 锁:SVN提供了锁的功能,就和VSS的单用户Check out是一样的,不能同时修改。但是目前Google Svn不提供锁的功能,所以没有办法使用了。

 

 

八 SVN资料

 

以前没有使用过SVN的源码管理,所以有些地方感觉不一样。关于SVN的版本控制的方法和SVN介绍可以参考一下网站

http://www.subversion.org.cn/svnbook/1.4/svn.basic.vsn-models.html

昨天写完了,然后点发表,竟然什么都没了,真是惆怅啊。难道是长时间没响应?之前好象不会把今天重写把。

最近因为在公司因为搞性能测试的没什么人了,我也就逐渐转向性能测试方面的学习了。学习了大概有3个星期了,也用了LR跑了一些场景,不过觉得首先还是要把一些基本概念理解清楚,所以就把一些基本的东西写下来。让自己加深理解。也希望帮助大家了解一些。

 

 

一. 软件性能测试

 

在我们学习性能测试之前,首先要明白什么是性能。汽车有他的性能,比如速度,加速时间,稳定性;电脑硬件有他的性能,比如CPU的频率,处理的速度,游戏的性能。而计算机软件也有他的性能,比如软件运行速度如何,系统稳定性如何等等。性能的好坏不能凭空想象。必须有一些数据来说明来比较。所以我们软件性能测试就是通过得到软件在各种运行情况下的数据来进行分析,来判断软件的性能。一个软件对于不同的人群,他所关注的性能方面是不一样的。比如对于用户来说,他关心的是程序响应的时间,也就是他点一个提交按钮,多长时间可以得到结果。而对于系统管理员他关注的可能是软件在运行时,对系统资源的使用情况,在大量用户使用时的表现如何,能否长时间稳定的工作;而对于开发人员,他们更关心的是系统结构是否合理,SQL执行速度是否够快,有没有内存泄漏等情况。而对于我们测试人员来说,我们需要站在多个 角度来关心性能问题。

 

 

二 性能测试主要术语

 

1:响应时间:

 

响应时间的定义是:对请求作出响应所需要的时间。我们一般把响应时间作为用户角度衡量软件性能的主要指标。

毕竟系统是给用户使用的,用户对系统性能是否满意是用户说了算的。一般情况下响应时间是分为多个步骤的,首先从客户端发出请求,经过网络达到服务器N1,应用服务器处处理S1,访问数据库服务器N2,数据库服务器处理时间为D1,然后返回给应用服务器的网络时间为N3,应用服务器处理时间S2,在传个客户端的网络时间是N4。那么整个响应时间应该为T=N1+S1+N2+D1+N3+S2+N4,当然如果还用到其他服务器,还要加上其他时间。而实际上,除开这T,还有一个客户端的显示时间也要可以算做响应时间。所以时间Tx = T +Ts。但实际上Ts很大程度上是由用户的机器决定的,所以我们一般只关注T,所以通常把T称做响应时间。

一般一个网站,被普遍接受的响应时间是2/5/10,就是说2秒内给用户响应是很满意的,5秒是可以接受,而我一般是等不到10秒就会ALT+F4了!但不同的软件,响应时间的标准要根据实际情况来定。比如一个数据库备分软件,你能要求他5秒内搞定一个1G的数据库吗?

 

继续阅读