• 9
  • 11
分享

  一、概述

  Fiddler是一款免费且功能强大的数据包抓取软件。它通过代理的方式获取程序http通讯的数据,可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求,支持监视、设置断点、甚至修改输入输出数据等功能。fiddler包含了一个强大的基于事件脚本的子系统,并且能够使用.net框架语言扩展。

  二、Fiddler工作原理

  Fiddler是位于客户端和服务器端之间的HTTP代理, 它能够记录客户端和服务器之间的所有 HTTP(S)请求,可以针对特定的HTTP(S)请求,分析网络传输的数据,还可以设置断点、修改请求的数据和服务器返回的数据。

  Fiddler在浏览器与服务器之间建立一个代理服务器,Fiddler工作于七层中的应用层,能够捕获通过的HTTP(S)请求。Fiddler启动后会自动将代理服务器设置成本机,默认端口为8888。Fiddler不仅能记录PC上浏览器的网络请求数据,还可以记录同一网络中的其他设备的HTTP(S)请求数据。数据传递流程大致如下:

1-1.png

  1) 客户端像WEB服务器发送HTTP(S)请求时,请求会先经过代理Fiddler代理服务器。

  2) Fiddler代理服务器截取客户端的请求报文,再转发到WEB服务器,转发之前可以做一些请求报文参数修改的操作。

  3) WEB服务器处理完请求以后返回响应报文,Fiddler代理服务器会截取WEB服务器的响应报文。

  4) Fiddler处理完响应报文后再返回给客户端。

  三、Fiddler抓取HTTPS原理

  现在APP中的数据传输基本上都使用HTTS传输,传输的数据都是经过加密的,这增加了我们分析数据包的难度,还好Fiddler除了可以抓取HTTP数据包,还可以抓取HTTPS数据包。由于HTTPS传输需要使用到CA证书,所以抓取抓取HTTPS数据包时需要做一些特殊配置。Fiddler截取HTTPS报文的流程大致如下:

1-2.png

  1) 客户端请求建立HTTPS链接,发送客户端支持的加密协议及版本列表等信息给服务器端。

  2) Fiddler接受客户端请求并伪装成客户端向WEB服务器发送相同的请求。

  3) WEB服务器收到Fiddler的请求以后,从请求中筛选合适的加密协议。并返回服务器CA证书,证书中包括公钥信息。

  4) Fiddler收到WEB服务器的响应后保存服务器证书并自签名一个CA证书,伪装成服务器,把该证书下发给客户端。

  5) 客户端验证证书合法性。(Fiddler能否抓取到HTTPS报文关键看这一步)

  6) 客户端生产对称密钥,通过证书的公钥加密发送给服务器。

  7) Fiddler拦截客户端的请求以后,使用私钥解密该报文,获取对称加密秘钥,并使用服务器证书中带的公钥加密该对称密钥发送给WEB服务器。此时对称密钥已经泄露了,以后可以使用该秘钥界面客户端和服务器端传输的数据。

  8) WEB服务器接收到客户端发送的加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端。

  9) Fiddler使用前面获取的对称密钥解密报文。

  10) 客户端验证数据无误以后HTTPS连接就建立完成,客户端开始向服务器发送使用对称密钥加密的业务数据

  11) Fiddler使用前面获取的对称密钥解密客户端发送的数据并重新加密转发给客户端。

  四、Fiddler配置流程

  1. 下载安装

  a) 可以到官网下载Fiddler免费安装包:https://www.telerik.com/fiddler。由于旧版本的Fiddler抓包HTPPS时需要用到FiddlerCertMaker插件,所以我这里打包了一个压缩包,包含fiddler和FiddlerCertMaker,可点击这里下载。

1-3.png

  b) 点击Fiddler安装文件(我这里演示用的是Fiddler5.0版本)安装Fiddler。

  2. Fiddler基本配置

  如果只是需要监听本机浏览器HTTP数据包的话不需要做任何额外配置,打开Fiddler即可直接使用。一般我们需要监听远程终端设备的网络请求,需要做以下配置。打开Fiddler,在菜单栏中选择Tools->Options->Connections。输入监听端口(默认是8888),选择Allow remotecomputers to connect,点击确认然后重启Fiddler。

1-4.png

  由于我们需要监手机端的网络请求,所以还需要对手机端进行设置。首先确保手机网络和安装Fiddler的电脑网络处于同一个wifi网络中。可以点击Fiddler主界面的右上角的“Online”按钮查看Fiddler所在主机的主机名和IP地址,配置手机网络时需要使用到这个IP地址。

1-5.png

  打开手机网络设置,选择跟Fiddler主机在统一网络,打开wifi设置界面,进入wifi的高级设置(不同手机设置不一样,有一些手机长按选中的wifi名称可以出来,有一些手机是点击wifi名称后面的按钮,自己尝试)。Fiddler本身就是代理服务器,在wifi高级设置中的代理栏下面选择手动设置,设置输入Fiddler主机的IP地址(上一步显示的IP)和监听端口号(前面默认8888那个),点击确认。

1-6.png

  这些配置按成以后,你在APP中打开有网络请求的操作,即可在Fiddler中看到。

1-7.png

  在右边的Inspectors窗口中可以看到这个请求的请求报文和响应报文信息。

1-8.png

  以上配置只能监听到HTTP报文,对于HTTPS报文无法显示内容,还需要做其他配置。

  3. Fiddler抓包HTTPS

  前面也讲了,HTTPS数据报文传输的时候涉及到证书及数据加密的问题,所以Fiddler需要抓取HTTPS报文的话还需要做其他配置。

  首先还是打开Fiddler配置:Tools->Options->HTTPS:

1-9.png

  勾选Capture HTTPS CONNECTS和Decrypt HTTPS traffic选项,如果只是想抓取本机或者远程终端的数据报文,可以在…from all processes这个下拉框中选择。这里还有一点需要注意的就是,低版本的Fiddler自签名的CA证书有一些问题,后面导入到手机上时无效,这里就需要安装上面说的FiddlerCertMaker插件。安装后要重启Fiddler,如果安装成功在上图Certificates generated by CertEnroo engine的位置的内容就会显示安装的FiddlerCertMaker插件信息。

  设置完成以后点击OK,重启Fiddler。此时在手机端操作一些有https传输的app就会发现可以看到传输的内容,但是有局限性,只有设置了信任所有证书的APP中的HTTPS报文才能查看到,这类APP是非常不安全的。如果需要抓取大部分HTTPS报文怎么办呢?

  大家都知道手机系统中集成了系统认为可信的CA根证书,如果服务器的证书是这些机构颁发了,HTTPS请求时系统才认为是安全的,否则SSL握手失败(前提是APP中使用系统默认证书信任机机制)。Fiddler自签名证书肯定不在系统信任的证书列表中,那怎么办呢?我们可以在手机中把Fiddler自签名的证书导入到信任证书列表中就可以解决这个问题了。

  接下来打开手机中的浏览器,在地址栏输入Fiddler监听的IP:端口,比如:192.168.1.106:8888。

1-10.png

  点击页面中的FiddlerRoot Certificate,下载并安装证书(如果下载了没有自动提示安装,可进入设置->系统安全->从存储设备安装中手动安装)。

1-11.png

  输入证书名称,这里命名fiddler,点击确认。如果安装成功在系统安全->信任的凭据->用户中可以看到刚才安装的证书(如果证书名称是乱码,可能是Fiddler生成的证书有问题,需要安装FiddlerCertMaker插件,重新操作)。

  我们在手机端打开有HTTPS链接的APP发现可以抓取HTTPS中的数据报文了。

1-12.png

1-13.png

  这样就大功告成了,大家发现大部分HTTPS请求是可以抓取到的。大家有没有发现好像HTTPS传输也不是100%安全,怎么保证不被抓包呢,下次整理一篇文章总结一下怎么防止APP被抓包。



作者:罗旭东   

来源:http://www.51testing.com/html/41/n-4476641.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   随着国内软件行业的蓬勃发展,各种各样的软件应用层出不穷,人们的生活也越来越依赖软件,因此软件的质量就越来越受重视,而软件测试作为软件研发过程的两大核心之一,在企业和研发团队的地位也越来越重要,岗位需求也越来越大。本文就告诉各位想要进入IT行业成为测试工程师的小伙伴和已经在测试行业并且想要有更大发展的小伙伴一条进阶和发展之路。本文内容较长,望各位小伙伴能够耐心读完,相信一定会令你茅塞顿开,获益匪浅!  一、掌握通用软件测试基础技术  抛开所有其他的计算机技术不谈,就只是软件测试基础技术那也是比较复杂的,远不像网络上或者你身边的朋友说的那样,对软件点点点就够。因为如果只是对软件点点点,软件测试...
            0 1 1335
            分享
          •   摘要:单元测试(unit testing)是人为规定的最小的被测功能模块,单元测试的质量会直接影响到软件的后期测试,最终在很大程度上影响到产品的质量。测试过程中应该从可自动化,可重复独立的执行。  单元测试可以说是软件测试的基础单元,单元测试的质量会直接影响到软件的后期测试,最终在很大程度上影响到产品的质量。  测试成本:在单元测试阶段,某些问题是很容易发现的,如果忽略了单元测试,在后期的测试中所花的成本将成倍的上升。图表摘自<<实用软件度量>>(Capers Jones,McGraw-Hill 1991),这些数据显示单元测试的成本效率大约是集成测试的两倍 系统测...
            3 1 3506
            分享
          • 背景介绍一直以来,性能测试是被一部分人遗忘,又让另一部分人无可奈何的东西。在绝大部分的创业公司,性能测试基本上都是被遗忘的,他们认为功能测试和稳定性测试才是重点,而在中等规模的公司中一部分测试人员考虑进行性能测试,却无从下手。这个系列,从baidu测试工程师的工作实践出发,介绍移动端性能测试的通用方法和结合产品特点的不同侧重。随着流量费用的降低,越来越多的人开始在公交地铁等移动场景使用视频应用。视频类的应用会更多关注播放流畅度、下载等性能指标,下面介绍的是百度视频的性能测试方法。百度视频是第三方视频资源聚合类产品,主要提供用户在线播放、离线下载各种视频服务,提供PC、Android、iOS三端...
            0 0 1028
            分享
          • 因为之前测试的的软件产品是一个系统的信息化平台,包含很多工具和服务。整体想要实现自动化在时间和成本上又不太允许,但是那时就想针对其中一个工具做GUI自动化,偶然就认识了AutoIt,虽然不是个流行的软件工具,但是特别符合我当时的需要。AutoIt 是一种类似于BASIC的脚本语言,旨在实现Windows GUI和通用脚本的自动化。我们当时的平台软件几乎都在Windows环境下运行,所以特别适合。它能模拟键盘按键、鼠标移动和窗口/控件等操作,而且 AutoIt小巧又免费,真的是一款不错的工具,就算是想自己学习了解的也可以尝试,也许会有惊喜的发现。 如何使用首先下载安装,下载地址:htt...
            0 0 10194
            分享
          • 关于PandasPandas中的数据结构(1)Series:一维数组系列,也称序列;(2)DataFrame:二维的表格型数据结构;(3)Panel:三维数组。数据类型1.Logical(逻辑型)2. Numeric(数值型)3. Character(字符型)数据结构1.Series使用方法如下;Series([数据1,数据2,...],index=[索引1,索引2,...])例如:from pandas import Series X=Series(['a',2,'螃蟹'],index=[1,2,3]) X X[3]#访问inde...
            1 1 1769
            分享
      • 51testing软件测试圈微信