百度总结的JS脚本原理分析澳门蒲京网址,百度总计的JS脚本原理分析

获取该h.js代码的同时,获取该h.js代码的同时

首先,百度总计会要求我们在要总计的页面中放到一段js语句,类似如下:

首先,百度总结会要求大家在要总括的页面中放到一段js语句,类似如下:

<script type=”text/javascript”>
var _bdhmProtocol = ((“https:” == document.location.protocol) ? ”
https://” : ” http://”);
document.write(unescape(“%3Cscript src=’” + _bdhmProtocol +
“hm.baidu.com/h.js%3F3266e9d3684eaa1337dc7c4b4b64b0ae’
type=’text/javascript’%3E%3C/script%3E”));
</script>

<script type=”text/javascript”>
var _bdhmProtocol = ((“https:” == document.location.protocol) ? ”
https://” : ” http://”);
document.write(unescape(“%3Cscript src=’” + _bdhmProtocol +
“hm.baidu.com/h.js%3F3266e9d3684eaa1337dc7c4b4b64b0ae’
type=’text/javascript’%3E%3C/script%3E”));
</script>

 

 

这段js,实质上是往页面中引入hm.baidu.com/h.js的那段代码,该代码的内容会依据前边的参数有所不同,h.js?前面的参数就是你在百度总结里的id。

这段js,实质上是往页面中引入hm.baidu.com/h.js的这段代码,该代码的情节会按照前面的参数有所不同,h.js?后面的参数就是您在百度总括里的id。

取得该h.js代码的还要,百度总括会往你的浏览器写入一个名字为“HMACCOUNT”的cookie,该cookie的逾期时间为2038年,所以一旦你未曾清空浏览器cookie,基本就毫无过期。

得到该h.js代码的同时,百度总结会往你的浏览器写入一个名字为“HMACCOUNT”的cookie,该cookie的过期时间为2038年,所以假诺您从未清空浏览器cookie,基本就不要过期。

h.js被下载后,便执行其脚本获取一些浏览器相关音信和走访来源,获取的消息包括屏幕尺寸、颜色深浅、flash版本、用户语言等。

h.js被下载后,便执行其脚本获取一些浏览器相关新闻和访问来源,获取的信息包括屏幕尺寸、颜色深浅、flash版本、用户语言等。

从js代码中得以得到,所有参数包括这个:”cc,cf,ci,ck,cl,cm,cp,cw,ds,ep,et,fl,ja,ln,lo,lt,nv,rnd,sb,se,si,st,su,sw,sse,v”。这一个参数的意义大致如下:

从js代码中得以博得,所有参数包括这几个:”cc,cf,ci,ck,cl,cm,cp,cw,ds,ep,et,fl,ja,ln,lo,lt,nv,rnd,sb,se,si,st,su,sw,sse,v”。这么些参数的含义大致如下:

cc: 不知道,一般为1
cf:url参数hmsr的值
ci:url参数hmci的值
ck:是否补助cookie 1:0
cl:颜色深浅 如 “32-bit”
cm:url参数hmmd的值
cp:url参数hmpl的值
cw:url参数hmkw的值
ds:屏幕尺寸,如 ’1024×768′
ep:伊始值为’0′,时间变量,反映页面停留时间,格式大概是:现在光阴-载入时间+“,”+另一个很小的时刻值
et:初阶值为’0′,假如ep时间变量不是0的话,它会化为任何
fl:flash版本
ja:java支持 1:0
ln:语言 zh-cn
lo: 不知道,一般为0
lt:日期 time.time(),如“1327847756”, 在第一次呼吁没有
nv: 不知道,一般为1或者0
rnd:十位随机数字
sb:如倘使360se浏览器该值等于‘17’
se: 和寻找引擎相关
si:总计代码id
st:
su:上一页document.referrer
sw: 不了然,臆想和寻找引擎有关,一般为空
sse:不知道,臆度和查找引擎有关,一般为空
v:总结代码的本子 ,近期该值为“1.0.17”

cc: 不知道,一般为1
cf:url参数hmsr的值
ci:url参数hmci的值
ck:是否帮忙cookie 1:0
cl:颜色深浅 如 “32-bit”
cm:url参数hmmd的值
cp:url参数hmpl的值
cw:url参数hmkw的值
ds:屏幕尺寸,如 ’1024×768′
ep:起始值为’0′,时间变量,反映页面停留时间,格式大概是:现在光阴-载入时间+“,”+另一个很小的日子值
et:先导值为’0′,假若ep时间变量不是0的话,它会化为任何
fl:flash版本
ja:java支持 1:0
ln:语言 zh-cn
lo: 不知道,一般为0
lt:日期 time.time(),如“1327847756”, 在第一次呼吁没有
nv: 不知道,一般为1或者0
rnd:十位随机数字
sb:假设是360se浏览器该值等于‘17’
se: 和寻找引擎相关
si:总计代码id
st:
su:上一页document.referrer
sw: 不亮堂,估摸和查找引擎有关,一般为空
sse:不知晓,估算和搜索引擎有关,一般为空
v:总括代码的版本 ,最近该值为“1.0.17”

当这一个参数都设置截止了(有些参数并不曾赋值),筛选出曾经赋值了的参数,并视作hm.baidu.com/hm.gif的参数拼凑出一个url,如:http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=0&et=0&fl=11.0&ja=1&ln=zh-cn
  。然后请求该图形。

当这多少个参数都安装停止了(有些参数并从未赋值),筛选出已经赋值了的参数,并作为hm.baidu.com/hm.gif的参数拼凑出一个url,如:http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=0&et=0&fl=11.0&ja=1&ln=zh-cn
  。然后请求该图片。

百度总结服务端,通过接收到这么些请求,并从这多少个图形的网址附带的参数获取有关新闻,记录访客访问记录;当页面被用户关闭的时候,同样会接触一遍呼吁hm.gif的长河,但以此历程不是富有浏览器和享有关闭动作都辅助。

百度总计服务端,通过接收到这一个请求,并从那些图形的网址附带的参数获取有关音信,记录访客访问记录;当页面被用户关闭的时候,同样会接触三遍呼吁hm.gif的长河,但以此过程不是颇具浏览器和具有关闭动作都补助。

 

 

接下去通过程序模拟这一进程:

接下去通过程序模拟这一历程:

第一,使用Wireshark(一款网络抓包工具)对浏览器实际的过程举行捕获。首先是利用ie打开一个有超链接链接到有百度总括的网站,加载完毕后关闭浏览器。最终在Wireshark上收获如此的网络数据包。

先是,使用Wireshark(一款网络抓包工具)对浏览器实际的历程进展捕获。首先是选用ie打开一个有超链接链接到有百度总结的网站,加载完毕后关门浏览器。最终在Wireshark上得到如此的网络数据包。

http://hm.baidu.com/h.js?3266e9d3684e7a1307dc7c4b4a64b0ae
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=0&et=0&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171561&nv=1&rnd=2889921&si=3266e9d3684e7a1307dc7c4b4a64b0ae&st=3&su=http%3A%2F%2Fwww.zhanghangbo.com%2F&v=1.0.17
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=7289%2C115&et=3&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171561&nv=1&rnd=1444115283&si=3266e9d3684e7a1307dc7c4b4a64b0ae&st=3&su=http%3A%2F%2Fwww.zhanghangbo.com%2F&v=1.0.17
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=212486%2C4614&et=3&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171541&nv=1&rnd=1067394506&si=0f9e2caa14d6d0a51371b168d182314a&st=1&v=1.0.17

http://hm.baidu.com/h.js?3266e9d3684e7a1307dc7c4b4a64b0ae
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=0&et=0&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171561&nv=1&rnd=2889921&si=3266e9d3684e7a1307dc7c4b4a64b0ae&st=3&su=http%3A%2F%2Fwww.zhanghangbo.com%2F&v=1.0.17
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=7289%2C115&et=3&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171561&nv=1&rnd=1444115283&si=3266e9d3684e7a1307dc7c4b4a64b0ae&st=3&su=http%3A%2F%2Fwww.zhanghangbo.com%2F&v=1.0.17
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=212486%2C4614&et=3&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171541&nv=1&rnd=1067394506&si=0f9e2caa14d6d0a51371b168d182314a&st=1&v=1.0.17

能够发现,浏览器总共向服务器端发送了4次呼吁:

可以窥见,浏览器总共向劳动器端发送了4次呼吁:

  1. 伸手一段js脚本。
  2. 加载完毕时候出发三回呼吁,并传递参数
  3. 剥离页面时候,发出五回呼吁,并传递参数,与地点比较,发现ep参数有转移。
  1. 伸手一段js脚本。
  2. 加载完毕时候出发一遍呼吁,并传递参数
  3. 退出页面时候,发出四回呼吁,并传递参数,与地点相比较,发现ep参数有变化。

       
百度统计是按照cookie的,当呼吁js脚本的时候,会在您电脑里保存一个永久cookie,该cookie作为你的用户标识。同时发现,但剥离时候参数ep从最起头的0变为了“7289%2C115”,转义后是“7289,115”这是三个飞秒单位,即7.2秒和0.1秒的情致。同时前五遍呼吁hm.gif的时候lt参数(时间,javascript:(new
Date).get提姆(Tim)e())是不变的。rnd随机数每一趟都变。

       
百度总括是遵照cookie的,当呼吁js脚本的时候,会在您电脑里保存一个永久cookie,该cookie作为你的用户标识。同时发现,但剥离时候参数ep从最先河的0变为了“7289%2C115”,转义后是“7289,115”这是多少个纳秒单位,即7.2秒和0.1秒的意味。同时前五次呼吁hm.gif的时候lt参数(时间,javascript:(new
Date).get提姆(Tim)e())是不变的。rnd随机数每一回都变。

下边我们就来效仿三遍呼吁,本次使用的python语言。

下面我们就来模拟五遍呼吁,这一次使用的python语言。

import urllib2
import urllib
import random
import math
import urlparse
import time
import cookielib

import urllib2
import urllib
import random
import math
import urlparse
import time
import cookielib

########################################################################
class Baidu:
“”””””
Referer=’http://www.lixin.me
TargetPage=’/www.lixin.me’
BaiduID=”
Hjs=”http://hm.baidu.com/h.js?
Hgif=”http://hm.baidu.com/hm.gif?
UserAgent=’Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;
Trident/5.0)’ #IE9
MyData={‘cc’:’1′,’ck’:’1′,’cl’:’32-bit’,’ds’:’1024×768′,’et’:’0′,’ep’:’0′,’fl’:’11.0′,’ja’:’1′,’ln’:’zh-cn’,’lo’:’0′,’nv’:’1′,’st’:’3′,’v’:’1.0.17′}
#———————————————————————-

########################################################################
class Baidu:
“”””””
Referer=’http://www.lixin.me
TargetPage=’/www.lixin.me’
BaiduID=”
Hjs=”http://hm.baidu.com/h.js?
Hgif=”http://hm.baidu.com/hm.gif?
UserAgent=’Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;
Trident/5.0)’ #IE9
MyData={‘cc’:’1′,’ck’:’1′,’cl’:’32-bit’,’ds’:’1024×768′,’et’:’0′,’ep’:’0′,’fl’:’11.0′,’ja’:’1′,’ln’:’zh-cn’,’lo’:’0′,’nv’:’1′,’st’:’3′,’v’:’1.0.17′}
#———————————————————————-

def __init__(self,baiduID,targetPage=None,refererPage=None):
“””Constructor”””
self.TargetPage=targetPage or self.TargetPage
self.Referer=refererPage or self.Referer
self.BaiduID=baiduID
self.MyData[‘si’]=self.BaiduID
self.MyData[‘su’]=urllib.quote(self.Referer)
pass
def run(self,timeout=5):
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[(“Referer”,self.TargetPage),(“User-Agent”,self.UserAgent)]
try:
response=opener.open(self.Hjs+self.BaiduID).info()
self.MyData[‘rnd’]=int(random.random()*2147483647 )
self.MyData[‘lt’]=int(time.time())
fullurl=self.Hgif+urllib.urlencode(self.MyData)
response2=opener.open(fullurl,timeout=timeout).info()
self.MyData[‘rnd’]=int(random.random()*2147483647 )
self.MyData[‘et’]=’3′
self.MyData[‘ep’]=’2000,100′
response3=opener.open(self.Hgif+urllib.urlencode(self.MyData),timeout=timeout).info()
pass
except urllib2.HTTPError ,ex:
print ex.code
pass
except urllib2.URLError,ex:
print ex.reason
pass
pass

def __init__(self,baiduID,targetPage=None,refererPage=None):
“””Constructor”””
self.TargetPage=targetPage or self.TargetPage
self.Referer=refererPage or self.Referer
self.BaiduID=baiduID
self.MyData[‘si’]=self.BaiduID
self.MyData[‘su’]=urllib.quote(self.Referer)
pass
def run(self,timeout=5):
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[(“Referer”,self.TargetPage),(“User-Agent”,self.UserAgent)]
try:
response=opener.open(self.Hjs+self.BaiduID).info()
self.MyData[‘rnd’]=int(random.random()*2147483647 )
self.MyData[‘lt’]=int(time.time())
fullurl=self.Hgif+urllib.urlencode(self.MyData)
response2=opener.open(fullurl,timeout=timeout).info()
self.MyData[‘rnd’]=int(random.random()*2147483647 )
self.MyData[‘et’]=’3′
self.MyData[‘ep’]=’2000,100′
response3=opener.open(self.Hgif+urllib.urlencode(self.MyData),timeout=timeout).info()
pass
except urllib2.HTTPError ,ex:
print ex.code
pass
except urllib2.URLError,ex:
print ex.reason
pass
pass

if __name__ ==”__main__”:
a=Baidu(‘百度总结id’,’http://www.lixin.me/blog/test4','www.lixin.com.cn‘)
a.run()

if __澳门蒲京网址,name__ ==”__main__”:
a=Baidu(‘百度总计id’,’http://www.lixin.me/blog/test4','www.lixin.com.cn‘)
a.run()