对MSNP9协议的简单使用示例
2008-01-18 16:45
351 查看
对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/do ... 15561d7/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)中输入合法的串。
过去的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/do ... 15561d7/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)中输入合法的串。
相关文章推荐
- 对MSNP9协议的简单使用示例
- JSONArray和JSONObject的简单示例和使用
- iOS开发示例————第三方框架MJRefresh简单使用
- ORM,ASP.NET中ORM学习,ASP.NET中ORM学习心得,WEB2.0中ORM实现原理,Asp.net简单ORM示例源码详细讲解,Asp.net2.0:如何使用ObjectDataSource(配合ORM )(二)
- 使用Unicode写文本文件:一个简单类的示例
- Bash Shell中的select命令简单使用示例
- Node.js使用Angular简单示例
- 使用annotations注解的hibernate的简单示例
- asp.net(c#)中使用反射动态加载dll简单示例
- 在.net中使用Udp协议创建简单的聊天程序
- linux字符集编码转换与iconv使用简单示例
- Android SQLite 简单使用示例
- 如何使用DOTMSN开发简单的MSN机器人示例(附示例源码)
- AES类使用方法(内函简单示例)
- Android使用Universal-ImageLoader在ListView中加载网络图片简单示例
- 如何使用DOTMSN开发简单的MSN机器人示例(附示例源码)
- 使用commons-email(1.3.3)发送邮件的简单示例
- flex 整合 struts 的一个简单示例(使用Httpservice)
- Python中使用插入排序算法的简单分析与代码示例
- 最简单的IOS Block与协议 block作为函数参数的使用