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:使用的协议http或https
4 Host:服务器的主机名和端口号
5 URL:URL的路径
6 Body:http响应中包含的字节数
7 Catching:跟缓存相关的字段的值
8 Content-Type:响应中Content-Type的值
9 Process:对应本地Windows的进程
1抓包
抓包==获取http数据包的过程
开启和关闭:
方法1
打开fiddler->工具栏点击file->点击Capture Traffic,开启抓包或停止抓包(快捷键F12)
方法2
单机fiddler左下角的“Capturing”按钮来开始抓包或者停止抓包
捕获请求,查看请求和响应报文:
打开fiddler,打开浏览器发送请求
在fiddler界面中找到对应url的session,点击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请求内容和响应不被第三方篡改(加密算法:对称加密、非对称加密、DES、RSA等)
对称加密-密钥同时扮演加密和解密的角色
每个Web服务器与每个客户端使用不同的对称加密算法(每条通信使用的加密算法不同)
3 https==加密后的http,https=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打开浏览器,输入任意一个网站
4在fiddler中,我们可以查看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选项卡下才能修改)
5把URL修改为“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”
3在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”,选中“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浏览器把缓存文件的最后修改时间通过header“If-Modified-Since”告诉Web服务器
2浏览器把缓存文件的ETag通过Header“If-None-Match”告诉Web服务器
两种方式
1:当浏览器客户端像请求一个文档,首先检查本地缓存,发现存在这个文档的缓存,获取缓存中文档的最后修改时间,通过“If-Modified-Since”发送http请求给Web服务器
2:Web服务器收到http请求,将服务器的文档修改时间(Last-Modified)跟http请求Header中的If-Modified-Since相比较。如果时间是一样的,说明缓存还是最新的,Web服务器将发送状态码304(Not 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值 |
ETag是Entity 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服务器,请求中的Header能Accept-Encoding:gzip deflate(告诉服务器,浏览器支持gizp压缩)
2Web服务器接到http请求后,生成原始的http响应,其中有原始的Content-Type和Content-Length
3Web服务器通过gzip来对http响应进行编码,编码后Header中有Content-Type和Content-Length(压缩后的大小),并且增加了Content-Encoding:gzip,然后把http响应发送给浏览器
4浏览器接到http响应后,根据Content-Encoding:gzip来对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来说非常合适,因为HTML和CSS文件通常包含大量重复的字符串,例如空格,符号,标签等
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”,可以启动过滤功能
Filters的Actions中,我们可以保存好当前的过滤配置,也可以加载已经保存好的过滤配置
常用快捷键:
快捷键 | 用途 |
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-Since和If-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
3在fiddler中,找到这个图片的session,并拖拽到AutoResponse中
4在RuleEditor中,单机“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的扩展性更好,功能更加强大