先是,百度统计会要求我们在如统计的页面中坐一段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()