注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zjcjack的博客

 
 
 

日志

 
 

百度统计原理分析2-模拟访问请求  

2012-06-29 15:41:48|  分类: 前端开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        上篇文章百度统计的js脚本原理分析 简单的讲了百度统计js代码的参数和与服务器通信的大致过程。这次要通过程序来模拟这一过程。

        首先,使用Wireshark(一款网络抓包工具)对浏览器实际的过程进行捕获。首先是使用ie打开一个有超链接链接到我的(lixin.me)博客的网站,点击链接到达我的博客,加载完毕后关闭浏览器。最后在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

可以发现,浏览器总共向服务器端发送了4次请求:

  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随机数每次都变。

        下面我们就来模拟一次请求,本次使用的python语言。

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':'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','http://www.lixin.me/blog/test4','www.lixin.com.cn')     a.run()

         代码中,实际我没有模拟4次请求,发出3次就可以在百度统计的最新访客里看到记录,发出前两次的话,在百度统计里可以看到有访问记录,但是不显示来源和访问页面。用法很简单,只要实例化Baidu这个类,并给他传递3个参数,第一个为百度统计给你的统计id,第二个是被访问页面的url,这个url可以是不存在的,因为实际百度统计并没有验证页面的存在,第3个就是访问该页面的来源页面,这样就可以在百度统计的后台看到来自‘www.lixin.com.cn’的用户访问了test4这个页面。

        如果你是别有用心的程序员或者博主,是不是窥探出利用价值了呢?

  评论这张
 
阅读(331)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017