您的位置:首页 > 运维架构 > 网站架构

分析网站如何检测已经登录的QQ帐号

2014-01-09 15:41 330 查看
首先说一些为什么会分析这个,由于之前一直在研究怎么能够跨域获取视频地址,之后开始思考如何能够将分段的视频合在一起,使用js?flash?还是调用本地的软件处理?显然目前比较多的是本地的软件,比如各个视频网站的自己的客户端,比如硕鼠整合软件,那么,如何在网站中调取本地软件呢?比如优酷网站中当你点击“下载”的时候,会启动你本机中的优酷客户端,由于我没有安装它的客户端,偷懒了一下,想到使用QQ登录后,打开QQ的空间、邮箱等等,会自己检测出已经登录的QQ,这个会不会也是网站在你本地中寻找登录信息呢?结果,结果就是将优酷调取本地客户端的问题转移到了QQ上。

一步步来:

F12调试模式,打开链接:https://mail.qq.com/



而将邮箱页面里边你已经登录的账号上,右键,审查元素,找到:



对比已经显示出来的信息,发现帐号信息添加到了"检测到您已登录QQ帐号"文字下边的源代码:<div id="list_uin"></div>里边了

画红线的就是判断QQ帐号是否登录的url,在另一个页面中打开:



这样就找到了你已经登录的信息,网上其他网友还找到可以使用这个url验证你是否已经有QQ登录了:http://xui.ptlogin2.qq.com/cgi-bin/qlogin

使用我画红线那个url打开的时候,F12,请求的资源有:



使用网友找到的那个url请求到的资源是:



显然,能够找到已经登录信息,就在这个返回的response中,将它们拷贝出来js格式化一下:

既然最终数据填充到了list_uin,Ctrl+F它:<label for

找到了:

G += "<li><input type='radio' name='q_uin' id='uin_" + F.uin + "' " + B + D + " /><label for='uin_" + F.uin + "'>" + F.nick.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">") + " (" + F.name + ")</label></li>"
接着找F是怎么来的,继续,继续,这样找,最后发现:

JS通过loaduin()函数得到的用户信息,它的调用方式是:pt.loaduin();  ,之后想问pt是什么,也就找到pt.qInit();:

qInit: function() {
if (pt.inited) {
return
}
pt.inited = true;
try {
if (window.ActiveXObject) {
pt.qtrl = new ActiveXObject("SSOAxCtrlForPTLogin.SSOForPTLogin2");
var C = pt.qtrl.CreateTXSSOData();
pt.qtrl.InitSSOFPTCtrl(0, C);
pt.vOptData = pt.qtrl.CreateTXSSOData()
} else {
if (navigator.mimeTypes["application/nptxsso"]) {
var E = document.createElement("embed");
E.type = "application/nptxsso";
E.style.width = "0px";
E.style.height = "0px";
document.body.appendChild(E);
pt.sso = E
}
}
pt.loaduin();
var B = pt.list.length;
if (B <= 0) {
pt.showMsg(pt.lang[0], "");
return false
} else {
pt.buildList()
}
$.cookie.set("ptui_qstatus", 2, pt.domain, "/", 0.01)
} catch(D) {
pt.qtrl = null;
$.cookie.set("ptui_qstatus", 3, pt.domain, "/", 0.01);
pt.showMsg(pt.lang[1], "");
if (!pt.isHttps) {
url = "http://ui.ptlogin2.qq.com/cgi-bin/report?id=89217";
var A = new Image();
A.src = url
}
}
},发现pt是IE下的ActiveXObject或者其他浏览器的"application/nptxsso",后者不知道是什么类型,就知道是sso(异构系统单点登录 SSO(single-sign-on)技术)的,而前边的SSOAxCtrlForPTLogin存在于C:\Program Files\Common Files\Tencent\TXSSO\Bin中,两种方式都是采用浏览器扩展插件的权限去在本地中寻找登录信息,具体这个npSSOAxCtrlForPTLogin.dll或者"application/nptxsso"是怎么实现的,我不深弄了,是腾讯自己实现的NPAPI,(关于NPAPI的创建)而为什么确定是在本地找用户信息而不是在服务器,说明一下:

这里有几篇博客:

http://www.360doc.com/content/13/1018/17/6692427_322396952.shtml   腾讯的网站如何检测到你的 QQ 已经登录?
http://www.zhihu.com/question/20038903 QQ是如何实现快速登录的

http://1.lanz.sinaapp.com/?p=152 WEB检测QQ登录状态机制分析

http://www.iteye.com/problems/77473   关于QQ空间自动检测本地已经通过客户端登陆的账号

使用里边的方法,将网络断开的时候,依然可以检测到已经登录(已经离线,但是没有退出,也算是登录的一种状态)的帐号信息。

NAAPI里边应该是使用了固定的字符串xui.ptlogin2.qq.com,想要自己搭建一个服务器访问它,还需要在hosts里边定义一个本地的DNS解析,将xui.ptlogin2.qq.com解析成192.0.0.1,具体问下百度就哦了。



腾讯的一个脚本工具:
http://trip.qq.com/script/checkQQPlus.js
总结完这个,与我最初想要做的调用本地软件去将视频合并有一些关系,接下来的目的就是如何写个dll用来处理将视频合并,以及怎么实现除了IE外那个类型内容的实现,目前没有什么头绪,希望哪位高手知道可以指点一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  chrome 扩展 javascript