对MSNP9协议的简单使用示例

原创 2004年08月11日 22:02:00

过去的MSN Messenger版本(MSNP8以下),简单地使用MD5等Hash算法对用户身份进行认证。MSNP9/MSNP10使用一种TWN(Tweener)认证方式,通过SSL/TLS连接到login.passport.com和loginnet.passport.com等服务器,借助于HTTP协议输入账号和密码,认证通过后,才能取得“入场券”。

真正意义上的身份认证,发生在客户端与通知服务器(NS)之间。客户端登陆NS时,首先交换版本信息。双方均支持MSNP8以上版本时,才能进行认证过程。如果客户端版本较低,不支持TWN,那就登陆失败了。

在下面的例子中,账号是“stodtleo@msn.com ”,密码是“password”。

VER 4 MSNP10 MSNP9 CVR0 /r/n
VER 4 MSNP9 CVR0 /r/n
CVR 5 0x0804 winnt 5.0 i386 MSNMSGR 6.1.0203 MSMSGS stdotleo@msn.com /r/n
CVR 5 6.0.0602 6.0.0602 5.0.0527 http://download.microsoft.com/download/d/4/f/d4f560d5-6dc6-4901-b149-a568415561d7/SETUPNT.EXE http://messenger.msn.com/cn /r/n
USR 6 TWN I stdotleo@msn.com /r/n
USR 6 TWN Slc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1073355862,kpp=1,kv=5,ver=2.1.0173.1, tpf=ed1c2f217a21c191c61251eb8b73bb60 /r/n
(此时通过SSL进行身份认证,获得“入场券”)
USR 7 TWN S t=4m1wWfEupDgUNb53qys5gJdw8OTJEtT82fcuDbS3U672gTymOOs6cgKeafj7WjgZNcufAQggxqHRRXko02DoflZA$$ &p=4QXNnX9rFDDgki9ZqvqPZGDGJa2Mrd5H13Zfl0NNjh4I78qPyfpzmkZPZEe0nxJTkzZSNDYtk!57cVqiYVfO86KgCRYWhi2kudS0M !7bdi82EDA1FYp3WboHD!sCQ17OZh7lPQI7fozrgsSMZwgSzRi2FNTPxf13oDNIfDCKCG!2guDvZKEpk78A$$ /r/n
USR 7 OK stdotleo@msn.com  stdotleo@msn.com  1 0 /r/n

(TrID=4),双方协商MSN版本号。客户端说“我能支持MSNP9和MSNP10”,NS说“行,就MSNP9吧”。

(TrID=5),客户端报告本机信息:OS = Windows 2000 (NT 5.0), 语言 = 简体中文,MSN Messenger版本 = 6.1.0203, 账号 = stdotleo@msn.com 。NS给出了推荐的版本号,能够使用的最老的版本号,新版本下载地址,官方网站地址等信息。

(TrID=6),客户端要求身份认证(I = Initial),NS则给出所需要的一长串信息(S = Subsequent)。其中tpf相当于challenge,参与Hash运算,能保证每次认证返回的串是不同的。

(TrID=7),客户端出示从认证服务器得到的“入场券”,NS放行(OK)。

(TrID=6)与(TrID=7)之间,通过SSL的认证过程如下:

首先在HTTPS端口443向login.passport.com发送一个GET请求,将账号、密码和NS给定的一长串信息送出

GET /login2.srf HTTP/1.1 /r/n
Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=example%40passport.com,pwd=password, lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1073355862,kpp=1,kv=5,ver=2.1.0173.1, tpf=ed1c2f217a21c191c61251eb8b73bb60 /r/n
Host: login.passport.com /r/n /r/n

根据情况,会重定向到不同的URL。本例中,重定向到"https://loginnet.passport.com/login2.srf?lc=1033",服务器应答

HTTP/1.1 302 Found /r/n Server: Microsoft-IIS/5.0 /r/n
Date: Mon, 22 Dec 2003 21:10:05 GMT /r/n
PPServer: H: LAWPPLOG5C006 /r/n
Connection: close /r/n
Content-Type: text/html /r/n
Expires: Mon, 22 Jun 2003 21:09:05 GMT /r/n
Cache-Control: no-cache /r/n
cachecontrol: no-store /r/n Pragma: no-cache /r/n
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" /r/n
Authentication-Info: Passport1.4 da-status=redir /r/n
Location: https://loginnet.passport.com/login2.srf?lc=1033 /r/n
/r/n ... ...

然后,重新向指定的URL发出请求,得到如下响应

HTTP/1.1 200 OK /r/n
Server: Microsoft-IIS/5.0 /r/n
Date: Mon, 22 Dec 2003 21:10:07 GMT /r/n
PPServer: H: LAWPPIIS6B061 /r/n
Connection: close /r/n Content-Type: text/html /r/n
Expires: Mon, 22 Dec 2003 21:09:07 GMT /r/n
Cache-Control: no-cache /r/n
cachecontrol: no-store /r/n
Pragma: no-cache /r/n
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" /r/n
Set-Cookie: ... ... /r/n
Authentication-Info: Passport1.4 da-status=success,tname=MSPAuth,tname=MSPProf,tname=MSPSec, from-PP='t=4m1wWfEupDgUNb53qys5gJdw8OTJEtT82fcuDbS3U672gTymOOs6cgKeafj7WjgZNcufAQggxqHRRXko02DoflZA$$ &p=4QXNnX9rFDDgki9ZqvqPZGDGJa2Mrd5H13Zfl0NNjh4I78qPyfpzmkZPZEe0nxJTkzZSNDYtk!57cVqiYVfO86KgCRYWhi2kudS0M !7bdi82EDA1FYp3WboHD!sCQ17OZh7lPQI7fozrgsSMZwgSzRi2FNTPxf13oDNIfDCKCG!2guDvZKEpk78A$$', ru=http://messenger.msn.com /r/n
Content-Length: 0 /r/n
/r/n

开始时直接向loginnet.passport.com发出正确的请求,也是可以的。不难看出,在服务器认证成功的返回信息中,Authentication-Info字段的from-PP串值,就是所谓的“入场券”。

如果认证失败,服务器返回401错误

HTTP/1.1 401 Unauthorized /r/n ... ...

这样,就无法拿到“入场券”,自然不能在(TrID=7)中输入合法的串。

通过一个Socket例子理解Http协议(实战Java Web服务器--使用HTTP协议和JAVA类实现)

Web服务器与客户端的通信使用HTTP协议(超文本传输协议),所以也叫做HTTP服务器。用Java构造Web服务器主要用二个类,java.net.Socket和java.net.ServerSocke...
  • rongwenbin
  • rongwenbin
  • 2015年08月31日 17:42
  • 3617

Servlet——简单用户登录实例+http协议解析

本文写了一个简单的用户登录,并且介绍了http协议,主要介绍了http消息头和响应头。最后介绍了几个使用http响应头的例子。...
  • ggGavin
  • ggGavin
  • 2016年04月22日 13:54
  • 5862

Paxos协议超级详细解释+简单实例

Basic-Paxos算法(可以先看后面的实际例子再看前面的具体介绍部分) Paxos算法的目的 Paxos算法的目的是为了解决分布式环境下一致性的问题。     多个节点并发操纵数据,如何保证在读写...
  • cnh294141800
  • cnh294141800
  • 2016年12月20日 20:23
  • 3892

MSNP18协议分析(二)--- MSN登录身份认证

目录(?)[+] 一 连接服务器 连接到DS服务器连接到NS服务器断开服务器连接 二 身份验证 SSO认证方式登录验证生成登录是发送的p 三 小结 这一篇开始主要介绍M...
  • qinggebuyao
  • qinggebuyao
  • 2013年03月12日 11:15
  • 2349

msnp15登录协议实现

  • 2010年02月22日 14:00
  • 32KB
  • 下载

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

目录(?)[-] 一 MSNP二 MSNP基本概念 服务器协议命令错误代码编码方式名字 三 通讯过程 近一个多月一直在做手机上一个MSN客户端的项目,目前项目也接近尾声。对于M...
  • qinggebuyao
  • qinggebuyao
  • 2013年03月12日 11:13
  • 1856

C++解析协议简单示例

  • 2013年02月27日 22:05
  • 4.42MB
  • 下载

modbus协议功能码、格式及示例,简单明了实用

  • 2017年09月01日 16:54
  • 224KB
  • 下载

Myeclipse Oracle9i hibernate3.2 Spring2.5 Struts2简单示例

  • 2009年11月04日 15:13
  • 15KB
  • 下载

基于UDP协议的简单服务端和客户端示例

  • 2009年12月28日 23:04
  • 8KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对MSNP9协议的简单使用示例
举报原因:
原因补充:

(最多只允许输入30个字)