百度总括的JS脚本原理分析

by admin on 2019年1月29日

先是,百度总括会要求大家在要计算的页面中置放一段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提姆e())是不变的。rnd随机数每一回都变。

       
百度总结是按照cookie的,当呼吁js脚本的时候,会在您电脑里保存一个永久cookie,该cookie作为你的用户标识。同时发现,但剥离时候参数ep从最起头的0变为了“7289%2C115”,转义后是“7289,115”那是八个皮秒单位,即7.2秒和0.1秒的意趣。同时前四回呼吁hm.gif的时候lt参数(时间,javascript:(new
Date).get提姆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()

 

 

相关文章

发表评论

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

网站地图xml地图