大家好,我是轩辕。
现在很多网站、应用平台在登录的时候,都支持直接通过微信扫码登录。
最近我发现一个现象:以前需要扫二维码才能登录,而现在,如果你的电脑上已经运行了微信,它能直接检测到,然后点击一个按钮就可以实现登录了。
比如知识星球以前是微信扫码登录,而现在,它会自动检测到展示下面的画面:
然后,程序员的敏感神经触发,让我开始思考:它是咋知道我电脑上已经运行了微信,并且登录的是这个账号呢?
要知道,知识星球只是一个运行在Chrome浏览器的网页应用,它是不可能拥有native权限,去做什么进程扫描检测之类的事儿的。
直接祭出F12大法,来看看到底发生了什么。
在网络连接这里,我发现了一堆的check-login请求:
这一堆请求里面只有一个是成功的,其他都失败了。仔细一看,请求的域名都是localhost.weixin.qq.com
,只不过端口在变化,最后在13013端口请求成功了。
一看这个域名,localhost.weixin.qq.com
,而且解析的IP地址是127.0.0.1?
难道hosts里面被下药了?
打开hosts文件一看,没啥异常啊。然后nslookup
看了一下,还真是DNS返回的IP地址它就是127.0.0.1,有点意思。
请求127.0.0.1的13013端口,那本地又是哪个进程在配合监听这个端口呢?我估计你已经猜到了,就是微信的进程。
最后看看知识星球网页里面,发起这个请求的JS代码是啥?
至此,真相大白了:
像知识星球这样的第三方应用通过微信的官方接口接入微信登录功能,然后接入的JS代码里面会去请求localhost.weixin.qq.com
这个域名的13013等多个端口,来检查本地是否有微信账户已经登录了。
而腾讯把这个域名映射到了本机的127.0.0.1。再在客户端这边监听一下13013这个端口,就能实现在网页里面和本地的微信进程进行通信了。
不得不说,这波操作有点秀!又GET一个小技巧!