先是,百度总括会要求大家在要总括的页面中放置一段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代码的还要,百度总括会往你的浏览器写入1个名字为“HMACCOUNT”的cookie,该cookie的逾期时间为2038年,所以一旦你从未清空浏览器cookie,基本就无须过期。

获得该h.js代码的还要,百度总计会往你的浏览器写入1个名字为“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的参数拼凑出1个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回呼吁:

能够窥见,浏览器总共向服务器端发送了8遍呼吁:

  1. 请求一段js脚本。
  2. 加载达成时候动身贰次呼吁,并传递参数
  3. 脱离页面时候,发出三回呼吁,并传递参数,与地方相比较,发现ep参数有生成。
  1. 恳请一段js脚本。
  2. 加载达成时候动身三次呼吁,并传递参数
  3. 退出页面时候,发出叁回呼吁,并传递参数,与地方相比,发现ep参数有浮动。

       
百度总结是依照cookie的,当呼吁js脚本的时候,会在您电脑里保存1个永久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地图