对MSNP9协议的简单使用示例

过去的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)中输入合法的串。

阅读更多
个人分类: A.协议分析
想对作者说点什么? 我来说一句

httpclient简单示例

2015年02月08日 1.88MB 下载

Test3简单使用示例

2009年09月22日 3.57MB 下载

AspxLoadingPanel简单使用Demo

2011年06月22日 2KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭