fiddler工具使用


一、Fiddler简介

Fiddler是位于客户端和服务器端的HTTP代理(过滤的意思),也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。

既然是代理,也就是说:客户端的所有请求都要先经过Fiddler,然后转发到相应的服务器,反之,服务器端的所有响应,也都会先经过Fiddler然后发送到客户端,基于这个原因,Fiddler支持所有可以设置http代理为127.0.0.1:8888的浏览器和应用程序。

Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。

二、Fiddler安装

pc端安装fiddler

下载地址:Fiddler.exe,http://www.telerik.com/download/fiddler

安装时候,遇到下载一个证书提示,点yes安装。

三、抓取手机安卓APP数据包

1.配置fiddler允许监听https

打开Fiddler菜单项Tools->Fiddler Options,如下图:

(默认decypt https sraffic是不勾选的,也就是默认不会捕获https会话)

选中decrypt https traffic和ignore server certificate errors两项

第一次会提示是否信任fiddler证书及安全提醒,选择yes,之后也可以在系统的证书管理中进行管理。

2.配置fiddler允许远程连接

如上图的菜单中点击connections,选中allow remote computers to connect,默认监听端口为8888,若被占用也可以设置,配置好后需要重启Fiddler,如下图:

3.这些配置完成之后,一定要重新启动fiddler

可以看到fiddler的默认端口是8888,我们可以现在浏览器上输入”http://127.0.0.1:8888”

到这里为止我们的fiddler就配置完成了,接下来需要配置手机上的无线网络。

4.手机无线网络配置

注意:如果需要fiddler抓取Android app上的数据包,那么两者必须在同一个无线网络中。(同时,必要时请关闭电脑的防火墙)

在手机的无线网络配置之前,必须要首先知道fiddler所在主机的ip地址:

可以看到我的fiddler所在主机,也就是我的电脑在无线网中的ip地址是192.168.1.109

打开手机设置中的无线网络界面,进行如下四步操作:

选中连接的网络,点击修改网络

点击高级选项

代理—>手动

输入代理服务器的ip,也就是我们fiddler所在主机的ip地址,和端口,fiddler默认的端口是8888,IP选项设置为”DHCP”

点击保存,此时手机端就配置成功了,打开fiddler,使用打开网易新闻客户端。

此时可以看到fiddler抓取的网易app发送和接收的相关数据包。

ok,左侧是我们的所有会话,我随机的选中一个会话,该会话是image类型的,查看该会话的内容,是我们网易新闻的头条上的图片。

注意:

1.关闭电脑的防火墙 //根据连接情况,fiddler能代理成功不需要关闭。

2.如果需要抓取手机app的数据包,需要手机和电脑在都连接同一个无线网络

3.抓完包以后将fiddler关闭(提高访问网络的速度)同时将手机上的代理关闭 (如果不关闭代理,当fiddler关闭,或者是两者连接的不是同一无线网络,手机会不能正常的访问网络)

四、抓包分析

会话面板说明:

会话列表说明:

· # - 为了使用方便,Fiddler 为你生成的会话列表的ID

· Result - HTTP响应的状态码 Learn more…

· Protocol - 本次会话使用的协议类型(HTTP/HTTPS/FTP)

· Host - 发送本次请求的主机名

· URL - 本次请求的路径和具体文件名

· Body - 响应返回内容的大小

· Caching -是否使用了缓存

· Process - 发送本次请求的程序进程的名字

· Content-Type - 响应的响应头的 Content-Type 值

· Custom - 通过脚本设置的文本域. Learn more…

· **Comments **- 通过脚本或者在会话列表中右键添加的注释。

#号列中的图标,每种图标代表不同的相应类型,具体的类型包括:

1.Statistic(统计)

关于HTTP请求的性能和其他数据分析:

备注:Determine Gateway(网关确认):路由器和普通机器并没有实际上的差别!只不过他可以配置转发某一些报文。把与它连接的一个网络报文发给与它连接的另一个网络,而一般的机器并不会传发任何报文! 网关也是一个机器,但是它可以转换不同的协议,例如与它相联的一个为tcp/ip网,而加一个为ipx网,这两个网络就要靠网关才能通信,通常网关和路器为一个

session会话的分析

这里我随便选择一个会话来进行简单的分析。

2.Inspectors(请求查看器)

分为上下两个部分,上半部分是请求头部分,下半部分是响应头部分。对于每一部分,提供了多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片,HTML/*js*/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合HTTP标准的请求和响应头。Auth则可以查看授权Proxy-Authorization 和 Authorization的相关信息。Cookies标签可以看到请求的cookie和响应的set-cookie头信息。

3.Autoresponder(文件代理响应)

Fiddler比较重要且比较强大的功能之一。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。可用于调试服务器端代码而无需修改服务器端的代码和配置,因为拦截和重定向后,实际上访问的是本地的文件或者得到的是Fiddler的内置响应。当勾选allow autoresponser 并设置相应的规则后(本例中的规则是将http://blog.csdn.net/ohmygirl的请求拦截到本地的文件layout.html),如下图所示

然后在浏览器中访问http://blog.csdn.net/ohmygirl,得到的结果实际为:

这刚好是本地layout.html的内容,说明请求已经成功被拦截到本地.当然也可以使用Fiddler的内置响应。下图是Fiddler支持的拦截重定向的方式:

因此,如果要调试服务器的某个脚本文件,可以将该脚本拦截到本地,在本地修改完脚本之后,再修改服务器端的内容,这可以保证,尽量在真实的环境下去调试,从而最大限度的减少bug发生的可能性。

4.Composer(伪造请求)

有两种常用的方式构建请求:

(1)Parsed 输入请求的url之后executed即可,也可以修改相应的头信息(如添加常用的accept, host, referrer, cookie,cache-control等头部)后execute.

这个功能的常见应用是:“刷票”(不是火车票!!),如刷新页面的访问量(基于道德和安全原因,如果你真去刷票,刷访问量,本博客概不负责)

(2)Raw 使用HTTP头部信息构建http请求。与上类似。不多叙述

5.Filter(过滤展示)

Fiddler另一个比较强大的功能。Fiddler提供了多维度的过滤规则,足以满足日常开发调试的需求。如下图示:

过滤规则有:

a. 过滤只显示特定域名的HTTP请求

找到hosts >show only the following hosts

输入对应的IP地址或是域名,多个以分号;隔开。

b. 过滤显示特定格式的HTTP请求

找到 request header输入正则表达式

REGEX:(?insx)/[^?/].(css|ico|jpg|png|gif|bmp|wav)(?.)?$

五、限速测试

1:安装fiddler抓包工具

2:设置手机无线代理

3:进行限速设置(回答时候就说这个,如果详细问,就回答下面的2种方法)

  1. 在Fiddler的性能菜单里面设置模拟Mondem速度(极端网速,最慢的)

(最大56Kbps,早期的拨号上网工具,勾选该选项后,所有通过Fiddler代理的流量都会变得和多年前的56k小猫时上网一般的慢。)

Rules——performance—–simulate modem speeds

  1. 通过限速函数来限制速度(可调整速度快慢)

( 提供了一个配置文件CustomRules.js来调整这些参数,点击通过限制时间来达到限速目的,计算公式为算法就是**1000/下载速度Kbps = 需要delay的时间(毫秒)*,比如下载速度为100Kbps,那么就需要10毫秒,计算公式也可以是:(1KB/下载速度)*1000 = 需要delay的时间(毫秒))**下载速度=1000/延迟时间*

oSession[“request-trickle-delay”] = “20”;
oSession[“response-trickle-delay”] = “20”;

4:运行被测app软件

5:在fiddler里面查看发送的请求和服务器返回的数据

附加知识:

我们为什么要限速?

限速对于web前端研发是非常重要的,由于开发者的机器一般配置都很高,并且是在localhost下来调试程序,所以很难模拟到用户的真实使用情况,如正在下载JS,css等静态资源的时候,页面的一个渲染情况。当网速很慢的时候,我们更希望看到的是先渲染出用户界面,而不是让用户看到一片空白。

六、断点调试及解码

断点调试:

1.打开一个要设置断点的网页(例如登录页面)

http://127.0.0.1:8081/login.html

2.打开刚才打开的登录页面,并输入错误的用户名,密码,此时fiddler会记录到输入

输入的用户名和密码

3.1点rules - automatic breakpoints,选择下级菜单before request(请求断点,修改请求数据)

(该断点意思是点击按钮后,提交消息会提交给fiddler,但是fiddler把此消息截留了,没发送给服务器)

错误的密码如下:

再在截取的用户名密码处输入正确的用户名,密码

点击“Run to Completion”,登录成功(这一步测试通过了,用断点方式验证网页代码是否ok)

会话ID图标由 变成 成功状态(箭头表示post方式)

3.2点rules - automatic breakpoints,选择下级菜单After Responses(通过断点修改响应后的数据)

以百度主页为例,我们拦截到响应数据中的title值为”百度一下,你就知道“,我们将响应数据中的title

改成”test百度一下,你就知道“,然后在前端看看最终展示的是什么数据。

请求和响应数据解码:

1.响应body解码

有时候我们在Fiddler上看到响应数据是几个乱码字符,首先我们可以点击,上方黄色提示区域直接进行解码。如下面的两个图所示

解码后显示如下:

2.请求和响应数据解码

有的时候,基于安全性考虑,开发人员会将请求和响应的body根据一定规则进行解码。如果是普通的编码规则,我们可以直接通过Fiddler操作进行解码。例如在登录百度网站的时候,有个参数的值是一个url地址,这个url经过urlEncode进行转码了。我们就可以将该参数通过urlDecode进行解码。

首先,找到这个参数,选中后右键选择【send to TextWizard】

然后,在【transform】中找到【URLDecode】,字段值就被成功解码,我们就可以很清楚的看到里面有哪些参数以及参数的值是什么了。

七、Fiddler做接口测试

1:Fiddler录制脚本,找一个接口,切换到Raw检查入参及消息头信息

2:切换到Composer,设置请求方式,复制接口请求地址,复制消息头信息,在request body复制请求参数及相应的参数值,点击Execute


文章作者: 派大星是一个天才
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 派大星是一个天才 !
评论
  目录