大红鹰葡京会百度统计的JS脚本原理分析。百度统计的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).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()

 

 

相关文章

admin

网站地图xml地图