百度统计的JS脚本原理分析。百度统计的JS脚本原理分析。

by admin on 2018年10月5日

首先,百度统计会要求我们于如统计的页面被坐一段落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).getTime())是免移的。rnd随机数每次都转移。

       
百度统计是根据cookie的,当求js脚本的时光,会在你电脑里保存一个永久cookie,该cookie作为你的用户标识。同时发现,但离时参数ep从不过开始的0变为了“7289%2C115”,转义后是“7289,115”这是少数独毫秒单位,即7.2秒和0.1秒的意。同时前片潮呼吁hm.gif的当儿lt参数(时间,javascript:(new
Date).getTime())是无移的。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()

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图