Fiddler简介

Fiddler简介

1主菜单栏:菜单中几乎可以启动所有的fiddler功能

2工具栏:提供了很多常见的命令

3 Web sessions:显示捕捉到的每个sessions的简短信息,平常需要在这里选择一个或多个session后再进行操作

4功能面板:提供了很多功能和选项卡

5 QuickExec(命令行工具):可以输入简单的命令

6状态栏:展示了一些fiddler的配置信息

Web session列表

位于左侧窗口,是fiddler中最重要的部分,显示了每个session的摘要信息。可以排序

1 #:这是fiddler生成的ID

2 Result:响应的状态码

3 protocol:使用的协议httphttps

4 Host:服务器的主机名和端口号

5 URLURL的路径

6 Bodyhttp响应中包含的字节数

7 Catching:跟缓存相关的字段的值

8 Content-Type:响应中Content-Type的值

9 Process:对应本地Windows的进程

1抓包

抓包==获取http数据包的过程

开启和关闭:

方法1

打开fiddler->工具栏点击file->点击Capture Traffic,开启抓包或停止抓包(快捷键F12

方法2

单机fiddler左下角的“Capturing”按钮来开始抓包或者停止抓包

捕获请求,查看请求和响应报文:

打开fiddler,打开浏览器发送请求

fiddler界面中找到对应urlsession,点击inspectors选项卡

inspectors选项卡中请求部分(上)和响应部分(下)均选择Raw选项卡,这样就能看到完整的http请求和响应报文了,由于是个get方法,所以http请求中没有body

除了Raw之外其他选项卡可以查看请求和响应的其他部分

1.Fiddler抓包的原理:

fiddler本质上是一个代理服务器。它的默认工作端口是8888

打开fiddler,在菜单栏中点击Tools->Fiddler options

在弹出的框中选择Connections

代理服务器即是Web服务器又是Web客户端,是网络信息的中转站,具有以下功能:

1共享网络-可以共享IP

2提高访问速度-具有缓冲作用

3突破了访问速度-速度提升

4 隐藏身份-内部网用户对外发布信息,用反向代理功能,保证内部安全性,起到隐藏身份目的

Fiddler 工作原理:

工作方式:Fiddler是以代理Web服务器的形式工作

代理地址:127.0.0.1

端口:8888

在浏览器和网络服务器之间起到代理的作用:

Fiddler启动的时候,会把internet选项中的代理修改为127.0.0.1,端口8888

Fiddler退出的时候,会自动在internet选项中取消代理,这样就不会影响到别的程序

如果fiddler非正常退出,这时候因为fiddler没有自动注销,会造成网页无法访问,解决办法是重新启动fiddler

查看internet选项代理设置:

1先启动fiddler

2打开控制面板——internet选项,选择连接--局域网设置--高级,看到代理设置已被更改

3关闭fiddler,再查看代理设

*Fiddler可以捕获任何程序发出来的http/https请求,只要这个程序支持web代理服务即可

只要在程序内设置代理服务器即可实现抓包*

fiddler解压http响应:

抓包的过程中,会看到响应中是乱码,点击Response body is encoded Click to decode”按钮可以解压http响应。

Web通信安全:

http协议是不安全的容易被中间人拦截到

1只有双方能看到通信内容

2 http请求内容和响应不被第三方篡改(加密算法:对称加密、非对称加密、DESRSA等)

对称加密-密钥同时扮演加密和解密的角色

每个Web服务器与每个客户端使用不同的对称加密算法(每条通信使用的加密算法不同)

3 https==加密后的httphttps=http+tls或者ssl证书,采用https的网站需要去数日证书认证机构申请证书(Certificate Authority,CA

Fiddler捕获https会话

默认状态下,fiddler不会捕获https会话,需要设置

1启动fiddler

2菜单栏中点击Tools-Fiddler Option->https,选中“Capture https traffic”和“Decrypt https traffic”弹出对话框点“yes”,同时选中“Ignore server certificate errors”来忽略一些证书错误

 

3点击Actions选择信任证书后点击OK保存设置,并在cmd命令行输入ipconfig查看本地ip地址

4打开网页输入http://ip:8888访问,下载并安装证书

安装后fiddler可以正常抓取https协议信息了

手动单独浏览器安装证书:

点击下图中Actions,并点击export root certificate to desktop

导出

 

然后打开浏览器,选择工具-选项-隐私与安全-证书,点击查看证书,打开证书管理器,选择“证书颁发机构”,点击导入,选择“fiddlerRoot.cer

点击确定导入,之后浏览器就可以捕获https的请求了

手机抓包

手机抓包要在手机的开发者模式下并且与电脑使用同一网络,端口号为8888(与电脑配置的代理),访问电脑IP:8888并在手机设置中安装证书,操作流程与电脑端类似

查看windows本地安装的证书:

点击下图中Actions,并点击open windows certificate manager

2 HTTP请求

常见的http请求方法:get(查)、put(增)、post(改)、delete(删)、head(只要响应头)

Fiddler查看http响应header

点击inspectors->request->headers

Cache相关的header 是用于缓存的header

Cookie是一种http header

Accept表示浏览器客户端可以接受的媒体类型

Accept-encoding 跟压缩有关,高速服务器,浏览器支持什么类型的压缩

Accept-language 的作用是声明浏览器自己接受的语言

User-agent 的最用是浏览器用来告诉服务器,客户端使用的操作系统及版本,浏览器及版本,浏览器渲染引擎,浏览器语言,浏览器插件等

例如:fiddler实现修改user-agent,伪装客户端

1启动fiddler

2点击Rules->User-Agents,选择ipad

3打开浏览器,输入任意一个网站

4fiddler中,我们可以查看user-agent的值为ipad

Referer

referer:http协议头中的Referer主要是来让服务器判断来源页面,即用户是从哪个页面来的,网站通常用来统计用户来源,查看用户是用搜索页面来的,还是从其他网站链接过来的,或是从书签页等访问的,以便合理定位网络。有时也被用作防盗链,即下载时判断来源地址是不是在网站域名之内,否则就不能下载或显示。很多网站就是通过Referer来判断用户是否能够下载图片的

1打开fiddler

2打开浏览器

3点击网页上的跳转链接

4查看fiddler

Host:指定被请求的主机和端口号,通常从http url中提取出来

Fiddler查看http响应header

1打开fiddler

2打开网页

3查看fiddler

网页抓包

网页组成:一个html,多个图片,css文件,javascript文件,json文件

浏览器请求一个网页的过程:

1输入网址

2浏览器会发送一个http请求去获取页面布局的html==“父请求”

3浏览器会分析http响应中的html,如果发现html中引用了很多其他文件,比如图片、css文件、js文件等,浏览器会自动再次发送很多http请求,去获取图片、css文件或者js文件。这些http请求叫做==“子请求”子请求的加载速度会影响网页加载的总体速度

4当所有自请求的响应都返回后,浏览器会把1个父请求加上多个子请求渲染出来,这样就形成了一个页面,网页就在浏览器上显示出来

fiddler选择请求

查找父请求:

先找到子请求,右键选择select->parent request 或者快捷键P

查找子请求:

先找到父请求,右键选择select->child request 或者快捷键C

根据父请求和子请求的加载时间可以看作做一个web页面简单的性能测试

Fiddler查看响应

http响应可能是一个html文档,也可能是一个图片

Raw可以查看完整的HTTP响应

如果HTTP响应是图片,可以用imageview来查看

如果http响应是html文档,可以用webview来查看

如果HTTP响应是json,可以用json来查看

Fiddler打断点,修改HTTP报文

抓包+改包

1全局断点

启动fiddler 点击菜单栏Rule->Automatic Breakpoint->Before Requests 或者快捷键F11

这样会拦截所有的会话

取消全局断点

启动fiddler 点击菜单栏Rule->Automatic Breakpoint->Disabled 或者快捷键shift+F11

2单个断点,一直某个请求的URL地址,这时候只需要针对这一个请求打断点调试,其他的请求不拦截

启动fiddler 在左下角的quickexec命令行输入命令:“bpu 域名/URL” 这种方法只会拦截输入的域名网址,

要想消除单个断点,可以在命令行输入命令:bpu

Fiddler 修改http请求

例如:浏览器访问www.baidu.com,则通过fiddler修改http请求,让浏览器去访问www.cnblog.com/superhin

1启动fiddler,在菜单栏中点击Rules->Automatic Breakpoints->Before Requests.

2打开浏览器,输入www.baidu.com,这时候你会发现任务栏上的fiddler图标在闪烁,说明fiddler拦截住了http请求

 

3回到fiddler界面,在菜单栏中点击Rules->Automatic Breakpoints->Disabled(目标请求已经拦截成功,其余的请求放行)

4被拦截的http请求有一个红色的T图标,选中需要修改的http请求,选择inspectors面板,使用Raw选项卡(必须要在Raw选项卡下才能修改)

5URL修改为“www.cnblogs.com/superhin,同时把host修改成“www.cnblogs.com

6 URL修改并跳转成功

Fiddler设置断点修改http响应

1全局断点

启动fiddler 点击菜单栏Rule->Automatic Breakpoint->After Response

这样会拦截所有的会话

取消全局断点

启动fiddler 点击菜单栏Rule->Automatic Breakpoint->Disabled 或者快捷键shift+F11

使用Fiddler修改网页的标题

1启动fiddler设置全局断点

2打开浏览器,输入

https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818

3fiddler中选择

https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818”,选中“inspectors”面板,Response下使用Raw选项卡(必须要在Raw选项卡下才能修改),并关闭全局断点

 

4修改html代码,然后单击“Run to Completion”,查看网页标题修改成功

fiddler伪造Referer

1启动fiddler,设置全局断点

2打开浏览器,输入

https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818

Fiddler中会提示拦截到该请求,在Raw选项卡中修改http请求,添加一个“Referer:www.baidu.com

 

点击绿色的Run to completion”放行,成功进入页面

Fiddler中查看缓存的新鲜度

缓存(cache)http请求Header

1浏览器把缓存文件的最后修改时间通过headerIf-Modified-Since”告诉Web服务器

2浏览器把缓存文件的ETag通过HeaderIf-None-Match”告诉Web服务器

两种方式

1:当浏览器客户端像请求一个文档,首先检查本地缓存,发现存在这个文档的缓存,获取缓存中文档的最后修改时间,通过“If-Modified-Since”发送http请求给Web服务器

2Web服务器收到http请求,将服务器的文档修改时间(Last-Modified)跟http请求Header中的If-Modified-Since相比较。如果时间是一样的,说明缓存还是最新的,Web服务器将发送状态码304Not Modified)给浏览器客户端,告诉客户端直接使用缓存里的版本

http请求中跟缓存相关的Header

名称

释义

Cache-Control:max-age=0

以秒为单位

If-Modified-Since:Mon,20 Dec 2018 08:38:01 GMT

缓存文件的最后修改时间

If-None-Match:”0693f67a67cc1:0”

缓存的文件的Etag

Cache-Control:no-cache

不使用缓存

Pragma:no-cache

不使用缓存

Cache-Control:public

响应被缓存,并且在多用户间共享

Cache-Control:private

响应只能作为私有缓存,不能在用户之间共享

Cache-Control:no-cache

提醒浏览器要从服务器提取文档进行验证

Cache-Control:no-store

绝对禁止缓存(用于机密/敏感文件)

Cache-Control:max-age=60

60s之后缓存过期(相对时间)

Date:Mon,20 Dec 2018 08:38:01 GMT

当前响应发送的时间

Expires:Mon,20 Dec 2018 08:38:01 GMT

缓存过期的时间(绝对时间)

Last-Modified:Mon,20 Dec 2018 08:38:01 GMT

服务器端文件的最后修改时间

ETag:”20biadd7ec1cd1:0”

服务器端文件的ETag

ETagEntity Tag(实体标签)的缩写,是根据实体内容生成的一段hash字符串(类似于MD5或者SHA1之后的结果),可以标识资源的状态。当资源发生改变时,ETag也随之发生变化。

ETag是服务端产生的,然后发送给浏览器客户端。目的是为了解决一些Last-Modified无法解决的问题

1某些服务器不能精确得到文件的最后修改时间,这样就无法通过最后修改时间来判断文件是否更新了

2某些文件的修改非常繁琐,在以秒为单位以下的时间内进行修改,而Last-Modified只能精确到秒

3一些文件的最后修改时间改变了,但是内容并未改变,我们不希望客户端认为这个文件修改了

实例:启动fiddler,打开博客园首页,可以看到很多图片或者CSS文件都使用了缓存。这些都是通过比较ETag的值来判断文件是否更新

浏览器不使用缓存

快捷键:Ctrl+F5强制刷新浏览器,可以让浏览器不使用缓存

直接使用缓存,不去服务器验证

在地址栏里输入网址然后按回车键浏览器会直接使用有效的缓存,而不会发送http请求去服务器验证缓存,这种情况叫做缓存命中

(F5快捷键刷新浏览器,浏览器回去Web服务器验证缓存)

公有缓存和私有缓存的区别:

Cache-Control:public”指可以公有缓存,缓存可以由数千名用户共享。“Cache-Control:private”指只支持私有缓存,是单个用户专用的

http压缩的过程

1浏览器发送http请求给Web服务器,请求中的HeaderAccept-Encoding:gzip deflate(告诉服务器,浏览器支持gizp压缩)

2Web服务器接到http请求后,生成原始的http响应,其中有原始的Content-TypeContent-Length

3Web服务器通过gzip来对http响应进行编码,编码后Header中有Content-TypeContent-Length(压缩后的大小),并且增加了Content-Encodinggzip,然后把http响应发送给浏览器

4浏览器接到http响应后,根据Content-Encodinggzip来对http响应进行解码,获取到原始http响应后显示出网页

fiddler中,每次都要手动去decode实在是太麻烦,单机工具栏上的Decode按钮,就可以自动解压了

内容编码类型

gzip表明尸体采用GUN zip编码

Compress表明尸体采用UNIX的文件压缩程序

Deflate表明时提示用zlib的格式压缩的

Identity表明没有对实体进行编码:当没有Content-Encoding header时,就默认为这种情况

Gzip/compress以及deflate编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失,其中gzip通常效率最高,使用最为广泛。

压缩的好处

可以将纯文本压缩至原内容大小的40%,从而节省了60%的数据传输,

Gzip不足之处

jpeg这类文件用gzip压缩的效果不够好,gzip占用了一些服务器和客户端的CPU

Gzip是如何压缩的

Gzip压缩是在一个文本文件中找出类似的字符串,并临时替换他们,从而使整个文件变小,这种形式的压缩对Web来说非常合适,因为HTMLCSS文件通常包含大量重复的字符串,例如空格,符号,标签等

URL Encoding介绍

就是把所有非英文字母,数字字符都替换成百分号(%)后面颊两位十六进制数,比如空额的编码为“%20

POST中的主体在传输的是偶同样会被转义

Fiddler中的TextWizard功能面板可以对字符和字符串机型URL Encoding或者Decode

Fiddler使用技巧

Fiddler与其他软件的比较

1可以通过fiddler script写脚本来扩展功能,charles则不能

2开源免费

3跨平台(Windows Linux Mac

4支持多种浏览器

5wireshark支持更多的协议,主要是来监听TCP/IP协议,直接与网卡进行数据报文交互,监听http协议不方便也大材小用

Fiddler抓包失败的解决方法

1确定是http协议还是https协议,如果是https协议,检查证书的原因,错了重新安

2检查换浏览器的http代理设置是否正确,或者换一个浏览器尝试

3检查fiddler的捕获开关是否打开

4检查过滤的设置

5确定是否是捕获Localhost的流量

Fiddler抓包建议

先清空session列表,然后再进行抓包

清空操作:工具栏“×”图标,点后再点“remove all”或者命令行输入“cls”命令后回车

抓到想抓的包后可以关闭抓包捕获,以免再获取更多的session

Fiddler异常退出后无法上网(没注销代理)

重启开启fiddler后再关闭

fiddler中查询会话

菜单栏点击Edit->Find Session 或者快捷键【Ctrl+F】打开“Find Sessions”对话框,输入关键字查询session,查询到的session会以黄色显示(汉字或者图书字符很可能查询不到,因为在http请求中被转译了)

Fiddler中保存抓到的包

1选择将要保存的会话,然后点击File->Save->Selected Sessions,保存后的后缀名是.saz,文件保存完整的http请求和http响应

2双击.saz文件,或者点击fiddler菜单栏中的File->Load Archive,就能打开文件

Fiddler中编辑会话

Inspectors中编辑,上文有说到

过滤会话

找到User Filters”,可以启动过滤功能

FiltersActions中,我们可以保存好当前的过滤配置,也可以加载已经保存好的过滤配置

常用快捷键:

快捷键

用途

CTRL+X

删除所有的session

CTRL+A

选择所有的session

ESC

不选择任何的session

CTRL+I

反选session

Delete

删除选择的session

Shift+Delete

删除未选择的session

R

重放选择的session(可以重放多个session

SHIFT+R

多次重放选择的session(随后会提示你输入,重放几次)

U

无条件的重放选择的session(不会发送If-Modified-SinceIf-None-Match Headers

SHIFT+U

无条件地重放选择的session(随后会提示你输入,重放几次)

P

选择“当前session”的“父session”(这个功能取决于Referer Header

C

选择“当前session”的“子session

D

选择“上次选择的session

Insert

CTRL+1

CTRL+2

CTRL+3

CTRL+4

CTRL+5

CTRL+6

用粗体和颜色标记选择的sessoin

M

给选择的session添加注释

QuickExec命令行的使用

1help:打开官方的使用页面介绍,所有的命令都会列出来

2cls:清屏sessions

3select:选择会话的命令

4?.png:用来选择.png后缀的图片

5bpu:截获request

还可以urlreplace www.baidu.com www.cnblogs.com/superhin”替换掉host

fiddler比较会话的不同

位置:Tools->compare session

选中两个session点击上面位置的选项,否则置灰无法点击

Fiddler插件

插件下载地址:http://www.telerik.com/fiddler/add-ons

前端调试javascript文件

使用AutoResponse模块,在AutoResponder中,在RuleEditor中点击“Find a file”选择本地js文件,选中“Unmatched requests passthrough”放行匹配的合同谈判请求,点击save

在浏览器访问对应的网址,查看js文件相应结果

替换网页中的图片

1启动fiddler,使用浏览器访问

https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818

2在浏览器中把一张图片保存到本机中,命名为superh.jpg

3fiddler中,找到这个图片的session,并拖拽到AutoResponse

4RuleEditor中,单机“Find a file..”,选择本地的superh.jpg。选中Enable rules,激活规则,选中“Unmatched requests passthrough”,并且点击Save

 

 

5刷新浏览器,可以查看到图片已经被替换了

Fiddler中此模块也可以进行mock测试,设定请求和响应返回的内容,然后通过浏览器进行访问

手机弱网测试更改网速

通过修改fiddler script来实现

修改fiddler script:

上传于下载的初始脚本内容为:

上传upload“每上传1KB数据,延时0.3

下载dowmload“每下载1KB数据,延时0.15秒”

(脚本中的数值越大速度越慢、越小下载速度越快

算法:1000/上传(下载)速度=需要延迟的时间

例如:50kbit/s需要延迟200ms来接收数据

使用修改后的脚本数据

修改保存后勾选(修改保存后再次查看Simulate Modem Speeds,为未勾选状态,勾选=启用)

Rules->Performances->Simulate Modem Speeds

查看日志

Fiddler中的接口请求发送

Fiddler script

Fiddler script是一个可以自动修改http请求和http相应的脚本文件,不需要再手动去对请求和相应进行操作,属于高级内容,它可以让fiddler的扩展性更好,功能更加强大

博文内容均为个人整理,如有错误请及时指出,如有建议和意见请联系:836311007(微信和QQ)
原文地址:https://www.cnblogs.com/wangx123sec/p/11568708.html