zoukankan      html  css  js  c++  java
  • 使用Fiddler分析Youtube访问协议

    1 原理
      我们做很多事情都离不开原理二字,只有懂得了背后的原理,才能把事情做到极致。本文意在向一个初学者展示如何分析访问一个https网站时的流量,作者也是一只流量分析的入门和初学者,实属菜鸟,有错误之处,敬请指正。从所周知,从在浏览器中输入一个网站的domain并按下回车键后,浏览器需要经历DNS解析->发送request->等待response这样一个过程,中间或许会夹杂一些网站回复的304等重定向和再次发图片request等步骤,但整体流程如此。无论是对HTTP还是对HTTPS网站的流量进行分析,首先都必须截获流量,这类工具有很多,比如常用的就有Wireshark和Fiddler。由于HTTPS网站的流量都是经过非对称加密的,所以若想解密,就得找到浏览器与网站之间协商的加密密钥。就技术而言,破解协商的密钥比较困难,好在HTTPS连接的建立是一个复杂的过程。哲学上讲,越是复杂的东西功能就越强大,但同时也就越脆弱。于是我们就可以采用常见的MITM(Man in the middle,中间人攻击)来破解HTTPS流量了。
     
    2 Fiddler
      Fiddler是一个HTTP协议调试代理工具,它能够记录并检查所有与互联网站之间的HTTP通讯。另外,它还在本地建立一个简易的proxy并生成自己的证书系统,采用MITM的方式对HTTPS流量进行解密,这对我们分析Youtube网站的访问流量提供了极大的方便(需要手动打开https解密选项)。
      这里简单的介绍一下Fiddler的使用,若想详细了解Fiddler的强大功能,可以自行搜索相关教程。Fiddler的主界面如下:
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    工欲善其事,必先利其器。这里先对各个功能按键做一个介绍:
    -- Stream: 这里设置的是Fiddler的工作模式,Fiddler支持Stream和Buffering两种模式。Stream模式下会实时地将浏览器与网站之间的流量包逐一列出来,直到网站处理完毕。Buffering模式下则会等到网站处理完毕后再把流量包列出来。
    -- Decode:顾名思义,对所有的流量包数据进行解码,这里值得一提的是,就就是HTTPS流量也可以成功解码。Fiddler真心强大,而且使用起来方便,都不用自己配置浏览器证书。
    -- Browse : 这里选择捕获流量的目标浏览器,可以是Firefox,Chrome等。这对过滤某个浏览器的流量包太有用处了。
    -- Inspectors: 将每个流量数据包都解析成request和response.如上图所示,上半部分显示的是浏览器发送的request,下半部分是网站的response.
    -- Capturing : 显示Capturing时才会捕捉流量,否则不捕捉。
     
    3 Youtobe首页数据包分析
      从google搜索的结果中点击Youtobe的链接将会访问Youtube的首页,捕捉到的流量如下所示:
      可以在左侧的红色方框内看到访问的host是www.youtube.com,而URL是'/',这表示的是网站的首页。在Inspector标签页可以清晰地看到对应的request和response。
     
    3.1 首页request分析
      这里选择 Raw,表示查看request的原始数据,截图如下:
    从上图可以看到,除了Raw还有许多其他的标签页。这些标签页并不对request做任何修改,只是把request按照不同的格式需要解析并显示出来。这里对request的每一行进行说明:
    -- 第一行 : 说明当前访问的方法为 GET, URL为:https://www.youtube.com/, 使用HTTP的版本是 1.1。
    -- Host: 指明接收request的服务器的主机名和端口号,http是80,https是443。
    -- Connection: 这里是告诉服务器可以使用的与request/response连接有关的选项。
    -- Upgrade-Insecure-Requests: 告诉服务器端自己支持将http升到https并且在以后的发送request中均使用https。
    -- User-Agent : 告诉服务端发起request的应用程序名称和一些平台,系统等信息。
    -- X-Chrome-UMA-Enabled : 与chrome浏览器有关。
    -- X-Client-Data : 与chrome浏览器有关。
    -- Accept: 告诉服务端在此request的response中能包含的媒体类型。
    -- Referer : 提供包含当前请求URI的文档的URL,这里是从google搜索出来的。
    -- Accept-Encoding : 告诉服务端自己支持哪些编码方式。
    -- Accept-Language : 告诉服务端自己支持哪些语言。
    -- Cookie: 告诉服务端一些关于Session的信息。
     
    分析报文得知,访问Youtube时发送的是GET请求,由于是首页,无需要携带任何参数等信息。
     
    3.2 首页response分析
      这里同样选择 Raw,查看response的原始数据,截图如下:
    -- 第一行 : 表示response的状态码
    -- Content-Type : response中实体的数据类型,这里指明类型为采用utf-8编码的text/html。
    -- Cache-Control : 随报文传送用于指示是否缓存。
    -- Strict-Transport-Security : 通知浏览器禁止使用HTTP加载数据,而要用HTTPS。后跟的参数指定在接下来的多长时间内保持这一行为。
    -- X-Content-Type-Options : 通常浏览器依据response头中的content-type来分辨响应的类型,但是当有些资源的content-type是错误的或者是未定义的时候,有些浏览器就会启用MIME-sniffing来猜测资源的类型,解析内容并执行。这容易被攻击者所利用,于是可以通过这个选项禁用浏览器的猜测行为。值只能为nosniff
    -- Expires : response实体的有效期。
    -- X-XSS-Protection : 为1时启动XSS攻击(跨站脚本攻击),当用户关闭时可以防止被XSS攻击。
    -- Date: response产生的日间戳。
    -- Server : 服务端应用程序软件的名称和版本等信息。
    -- Alt-Svc :
    -- Content-Length : response实体的长度。
    到这里,我们已经分析了访问Youtube首页的request和response。大部分内容都是与HTTP协议相关的,而且没有复杂的方法。接下来我们分析下在Youtube中按关键字查找视频时的协议数据包是怎样的。
     
    4 关键字查询分析
      触发场景如下:在已经打开的Youtube网页的搜索栏中输入“骑行”二字,然后按下回车键,截图如下:
      接下来分析一下这个过程中抓取到的数据包。截取的数据流如下:
     
      先看第一个数据包,让人奇怪的是,在Youtube上输入“骑行”后还没有按下回车键浏览器就发送了一个request到clients.1.google.com。查看一下这次交互的内容就知道它究竟在干什么了。
     
      从上2图来看,在输入“骑行”后,浏览器发送一个查询请求到google查询与输入内容相匹配的热度查询关键字组合有哪些并返回。从response来看,返回了6个热度最高的关键字组合,与页面上显示的结果一致。
      第二个数据包,仍然是发送google,不过这次发送的请求如下:
     
      并没有什么内容返回,具体原因不明,估计是刚刚查询过这个关键字,client端已经获取到内容,无需再次搜索查询。
      第三个数据包是由Youtube服务的,数据解析如下:
      从request可以看出,此时搜索“骑行”的方法为:GET,URL为: https://www.youtube.com/results?search_query=%E9%AA%91%E8%A1%8C&spf=navigate
      搜索的关键字信息如下:
      response是一个json结构,其中包含每个资源的获取URL。于是从抓的包来看,从第4行开始都是去ytimg.com获取资源的request。解析各个request得到的response,如果是图片资源的话,可以从ImageView中看到网页展示的图片资源。如下:
     
    5 点击视频数据分析
      经过了上面操作后,现在页面上已经罗列出了按关键字查询出来的视频列表,随机选一个视频后获取视频的title和description信息。
    按关键字“骑行26天”搜索所有的response数据包,可以搜索出2个交互里是含有视频title信息。这其中就包含有视频的title和description等信息。
     
    6 总结
      这篇文章只是一个网站访问数据解析初学者的总结所得。得力于Fiddler的强大才使得分析起来如此容易。再次验证了那句古话:君子,性非异也,善假于物也!有错误之处,敬请指正。
  • 相关阅读:
    如何让dapper支持oracle游标呢?
    使用Polly让程序有Retry的机制
    js代码优化
    学习simple.data之基础篇
    如何在.net4.0中使用.net4.5的async/await
    异步导出excel
    让人蛋疼的“Oracle.DataAccess.dll”
    关于函数和方法总结
    linux和windows的区别
    01-linux软件包管理器安装和编译安装
  • 原文地址:https://www.cnblogs.com/forestjade/p/5841068.html
Copyright © 2011-2022 走看看