百度统计的JS脚本原理分析
分类:亚洲城娱乐

率先,百度计算会供给我们在要总括的页面中放到意气风发段js语句,肖似如下:

<script type=”text/javascript”>
var _bdhmProtocol = ((“https:” == document.location.protocol) ? ” https://” : ” http://”);
document.write(unescape(“”));
</script>

 

这段js,实质上是往页面中引进hm.baidu.com/h.js的这段代码,该代码的原委会基于前边的参数有所分化,h.js?前边的参数正是您在百度总结里的id。

百度统计的JS脚本原理分析。赢得该h.js代码的同期,百度总计会往你的浏览器写入贰个名称为“HMACCOUNT”的cookie,该cookie的晚点时间为2038年,所以只要您未有清空浏览器cookie,基本就无须过期。

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”。这几个参数的含义大约如下:

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(卡塔尔(英语:State of Qatar),如“1327847756”, 在第二回呼吁未有
nv: 不知道,一般为1或者0
rnd:12位随机数字
cabet999亚洲城,sb:如果是360se浏览器该值等于‘17’
se: 和寻找引擎相关
si:总括代码id
st:
su:上一页document.referrer
sw: 不知道,估计和搜索引擎有关,平日为空
sse:不明了,测度和查找引擎有关,平时为空
v:总括代码的本子 ,最近该值为“1.0.17”

当那么些参数都安装甘休了(有个别参数并未赋值),筛选出已经赋值了的参数,并作为hm.baidu.com/hm.gif的参数拼凑出二个url,如:   。然后央求该图形。

百度总括服务端,通过吸收到那些央浼,并从那几个图片的网站附带的参数获取有关新闻,记录访客访问记录;当页面被客户关闭的时候,相仿会触发二遍呼吁hm.gif的历程,但这么些进度不是富有浏览器和兼具关闭动作都协理。

 

接下去通进程序模拟那生龙活虎进程:

先是,使用Wireshark(大器晚成款网络抓包工具)对浏览器实际的经过举行捕获。首先是选拔ie展开一个有超链接链接到有百度总括的网址,加载实现后关闭浏览器。最终在Wireshark上赢得那样的互连网数据包。




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

  1. 乞请意气风发段js脚本。
  2. 加载完成时候出发一遍呼吁,并传递参数
  3. 脱离页面时候,发出二次呼吁,并传递参数,与地点相比,开掘ep参数有调换。

        百度总计是基于cookie的,当呼吁js脚本的时候,会在你计算机里保存四个永远cookie,该cookie作为你的顾客标记。同期发现,但抽离时候参数ep从最早步的0变为了“7289,115”,转义后是“7289,115”那是四个微秒单位,即7.2秒和0.1秒的情致。同有时候前一回呼吁hm.gif的时候lt参数(时间,javascript:(new Date).getTime(卡塔尔)是不改变的。rnd随机数每一次都变。

下边大家就来模拟一回倡议,此次使用的python语言。

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

########################################################################
class Baidu:
""""""
Referer=''
TargetPage='/www.lixin.me'
BaiduID=''
Hjs=""
Hgif=""
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':'1024x768','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

if __name__ =="__main__":
a=Baidu('百度总计id','')
a.run()

 

本文由亚洲城ca88com手机版发布于亚洲城娱乐,转载请注明出处:百度统计的JS脚本原理分析

上一篇:yzc777亚洲城:开源巨献 下一篇:没有了
猜你喜欢
热门排行
精彩图文