【爬虫】网页抓包工具--Fiddler css
Fiddler基础知识 html
-
Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工做的,使用的代理地址是:127.0.0.1,端口默认为8888,咱们也能够经过设置进行修改。 前端
-
代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。 ios
-
Fiddler能够抓取支持http代理的任意程序的数据包,若是要抓取https会话,要先安装证书。 web
HTTP协议 面试
-
要分析Fiddler抓取的数据包,咱们首先要熟悉HTTP协议。HTTP即超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 正则表达式
-
HTTP的工做过程:当咱们请求一个超连接时,HTTP就开始工做了,客户端先发送一个请求到服务器,请求内容包括:协议版本号、请求地址、请求方式、请求头和请求参数;服务器收到请求后作相应的处理,并将响应数据返回到客户端,响应内容包括:协议版本号、状态码和响应数据。前端根据响应数据作相应的处理,就是最终咱们看到的内容。这些过程是HTTP自动完成的,咱们只是输入或点击请求地址,而后查看前端给咱们展现的内容。更多关于HTTP协议的介绍请参考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html chrome
-
请求方式经常使用的有:GET、PUT、POST、DELETE。 数据库
-
HTTP状态码主要分为5类:以1开头的表明请求已被接受,须要继续处理;以2开头的表明请求已成功被服务器接收、理解、并接受;以3开头的表明须要客户端采起进一步的操做才能完成请求;以4开头的表明了客户端看起来可能发生了错误,妨碍了服务器的处理;以5开头的表明了服务器在处理请求的过程当中有错误或者异常状态发生,也有多是服务器意识到以当前的软硬件资源没法完成对请求的处理。 json
-
常见的主要有:200:服务器成功处理了请求;404:未找到资源;500:内部服务器错误;503:服务器目前没法为请求提供服务;302:请求的URL已临时转移;304:客户端的缓存资源是最新的,要客户端使用缓存。
-
每一个状态码的详细介绍请参考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
Fiddler的使用
1)要使用Fiddler进行抓包,首先须要确保Capture Traffic是开启的(安装后是默认开启的),勾选File->Capture Traffic,也能够直接点击Fiddler界面左下角的图标开启和关闭抓包。
2)因此基本上不须要作什么配置,安装后就能够进行抓包了。那么咱们怎么分析抓到的这些数据包呢?如图所示的区域为数据包列表,要分析这些数据包,首先要了解各字段的含义。
#:顺序号,按照抓包的顺序从1递增
Result:HTTP状态码
Protocol:请求使用的协议,如HTTP/HTTPS/FTP等
HOST:请求地址的主机名或域名
URL:请求资源的位置
Body:请求大小
Caching:请求的缓存过时时间或者缓存控制值
Content-Type:请求响应的类型
Process:发送此请求的进程ID
Comments:备注
Custom:自定义值
3)每一个Fiddler抓取到的数据包都会在该列表中展现,点击具体的一条数据包能够在右侧菜单点击Insepector查看详细内容。主要分为请求(即客户端发出的数据)和响应(服务器返回的数据)两部分。
4)HTTP Request Header:以百度为例,查看请求百度主页这条数据包的请求数据,从上面的Headers中能够看到以下内容:
请求方式:GET
协议: HTTP/1.1
Client 头域:
Accept: text/html, application/xhtml+xml, image/jxr, */* ---------浏览器端能够接受的媒体类型
Accept-Encoding: gzip, deflate ---------压缩方法
Accept-Language: zh-CN ---------语言类型
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 ---------客户端使用的操做系统和浏览器的名称和版本
COOKIE头域:将cookie值发送给服务器
Transport 头域:
Connection:当网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接是否关闭。keep-alive表示不会关闭,客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接;close表示关闭,客户端再次访问这个服务器上的网页,须要从新创建链接。
HOST:主机名或域名,若没有指定端口,表示使用默认端口80.
5)HTTP Response Header:继续以百度为例,如图所示:
协议:HTTP/1.1
状态码:200
Cache头域:
Cache-Control: private ---------此响应消息不能被共享缓存处理,对于其余用户的请求无效
Date: Sat, 05 Aug 2017 04:37:43 GMT ---------生成消息的具体时间和日期
Expires: Sat, 05 Aug 2017 04:37:42 GMT ---------浏览器会在指定过时时间内使用本地缓存
Cookie/Login 头域:
Set-Cookie: BDSVRTM=264; path=/ ---------把cookie发送到客户端
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1425_21097_22157; path=/; domain=.baidu.com
Entity头域
Content-Length: 202740 ---------正文长度
Content-Type: text/html;charset=utf-8 ---------告知客户端服务器自己响应的对象的类型和字符集
Miscellaneous 头域:
Bdpagetype: 2
Bdqid: 0x99791efd00036253
Bduserid: 2577220064
Server: BWS/1.1 ---------指明HTTP服务器的软件信息
X-Ua-Compatible: IE=Edge,chrome=1
Security头域:
Strict-Transport-Security: max-age=172800 ---------基于安全考虑而须要发送的参数,关于这个参数的解释,请参考:http://www.freebuf.com/articles/web/66827.html
Transport头域:
Connection: Keep-Alive
6)TextView:显示请求或响应的数据。
7)WebForms:请求部分以表单形式显示全部的请求参数和参数值;响应部分与TextView内容是同样的。
8)Auth:显示认证信息,如Authorization
9)Cookies:显示全部cookies
10)Raw:显示Headers和Body数据
11)JSON:若请求或响应数据是json格式,以json形式显示请求或响应内容
12)XML:若请求或响应数据是xml格式,以xml形式显示请求或响应内容
13)上面是以百度主页为例,百度主页采用的是GET请求,在TextView中没有请求body,咱们再以无忧行网站登陆接口为例,它是一个POST请求,除了请求头外,在TextView中多了请求数据。这也是GET请求和POST请求的一个区别。GET请求是将请求参数放在url中,而POST请求通常是将请求参数放在请求body中。
总结:经过Fiddler能够抓取请求和响应参数,经过对参数进行分析,能够定位是前端仍是后台问题。例如咱们在测试登陆接口时,输入了正确的手机号和密码,但前端提示“请输入正确的用户名和密码”;仅仅经过界面提示咱们只能描述bug表象,但不能分析出问题缘由。假设经过抓包咱们发现是因为前端参数名错误或参数值为空,从而致使后台报错。这个时候咱们将bug指向前端开发人员,并将参数数据和接口文档中对应的报文数据做为附件上传,是否是能够提升bug的解决效率呢?Fiddler在实际的功能测试中有很大的做用,一方面帮助咱们更好的了解某个业务中客户端和服务器端是经过哪些接口进行请求的,从而更好的了解代码逻辑;另外一方面,咱们还能够经过响应数据判断哪里出现了问题,例如可能服务器程序挂了,致使前端报“服务器故障”,这时咱们经过抓包发现响应数据返回502,这时咱们能够手动去重启服务或是联系运维重启服务,从而提升问题的解决效率。
大致分为Request和Response两部分。
Requests部分
Header |
解释 |
示例 |
Accept |
指定客户端可以接收的内容类型 |
Accept: text/plain, text/html |
Accept-Charset |
浏览器能够接受的字符编码集。 |
Accept-Charset: iso-8859-5 |
Accept-Encoding |
指定浏览器能够支持的web服务器返回内容压缩编码类型。 |
Accept-Encoding: compress, gzip |
Accept-Language |
浏览器可接受的语言 |
Accept-Language: en,zh |
Accept-Ranges |
能够请求网页实体的一个或者多个子范围字段 |
Accept-Ranges: bytes |
Authorization |
HTTP受权的受权证书 |
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control |
指定请求和响应遵循的缓存机制 |
Cache-Control: no-cache |
Connection |
表示是否须要持久链接。(HTTP 1.1默认进行持久链接) |
Connection: close |
Cookie |
HTTP请求发送时,会把保存在该请求域名下的全部cookie值一块儿发送给web服务器。 |
Cookie: $Version=1; Skin=new; |
Content-Length |
请求的内容长度 |
Content-Length: 348 |
Content-Type |
请求的与实体对应的MIME信息 |
Content-Type: application/x-www-form-urlencoded |
Date |
请求发送的日期和时间 |
Date: Tue, 15 Nov 2010 08:12:31 GMT |
Expect |
请求的特定的服务器行为 |
Expect: 100-continue |
From |
发出请求的用户的Email |
From: user@email.com |
Host |
指定请求的服务器的域名和端口号 |
Host: www.zcmhi.com |
If-Match |
只有请求内容与实体相匹配才有效 |
If-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Modified-Since |
若是请求的部分在指定时间以后被修改则请求成功,未被修改则返回304代码 |
If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
If-None-Match |
若是内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 |
If-None-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Range |
若是实体未改变,服务器发送客户端丢失的部分,不然发送整个实体。参数也为Etag |
If-Range: “737060cd8c284d8af7ad3082f209582d” |
If-Unmodified-Since |
只在实体在指定时间以后未被修改才请求成功 |
If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
Max-Forwards |
限制信息经过代理和网关传送的时间 |
Max-Forwards: 10 |
Pragma |
用来包含实现特定的指令 |
Pragma: no-cache |
Proxy-Authorization |
链接到代理的受权证书 |
Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range |
只请求实体的一部分,指定范围 |
Range: bytes=500-999 |
Referer |
先前网页的地址,当前请求网页紧随其后,即来路 |
Referer: http://www.zcmhi.com/archives/71.html |
TE |
客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 |
TE: trailers,deflate;q=0.5 |
Upgrade |
向服务器指定某种传输协议以便服务器进行转换(若是支持) |
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
User-Agent |
User-Agent的内容包含发出请求的用户信息 |
User-Agent: Mozilla/5.0 (Linux; X11) |
Via |
通知中间网关或代理服务器地址,通讯协议 |
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning |
关于消息实体的警告信息 |
Warn: 199 Miscellaneous warning |
Responses 部分
Header |
解释 |
示例 |
Accept-Ranges |
代表服务器是否支持指定范围请求及哪一种类型的分段请求 |
Accept-Ranges: bytes |
Age |
从原始服务器到代理缓存造成的估算时间(以秒计,非负) |
Age: 12 |
Allow |
对某网络资源的有效的请求行为,不容许则返回405 |
Allow: GET, HEAD |
Cache-Control |
告诉全部的缓存机制是否能够缓存及哪一种类型 |
Cache-Control: no-cache |
Content-Encoding |
web服务器支持的返回内容压缩编码类型。 |
Content-Encoding: gzip |
Content-Language |
响应体的语言 |
Content-Language: en,zh |
Content-Length |
响应体的长度 |
Content-Length: 348 |
Content-Location |
请求资源可替代的备用的另外一地址 |
Content-Location: /index.htm |
Content-MD5 |
返回资源的MD5校验值 |
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
Content-Range |
在整个返回体中本部分的字节位置 |
Content-Range: bytes 21010-47021/47022 |
Content-Type |
返回内容的MIME类型 |
Content-Type: text/html; charset=utf-8 |
Date |
原始服务器消息发出的时间 |
Date: Tue, 15 Nov 2010 08:12:31 GMT |
ETag |
请求变量的实体标签的当前值 |
ETag: “737060cd8c284d8af7ad3082f209582d” |
Expires |
响应过时的日期和时间 |
Expires: Thu, 01 Dec 2010 16:00:00 GMT |
Last-Modified |
请求资源的最后修改时间 |
Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT |
Location |
用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 |
Location: http://www.zcmhi.com/archives/94.html |
Pragma |
包括实现特定的指令,它可应用到响应链上的任何接收方 |
Pragma: no-cache |
Proxy-Authenticate |
它指出认证方案和可应用到代理的该URL上的参数 |
Proxy-Authenticate: Basic |
refresh |
应用于重定向或一个新的资源被创造,在5秒以后重定向(由网景提出,被大部分浏览器支持) |
Refresh: 5; url=
http://www.zcmhi.com/archives/94.html
|
Retry-After |
若是实体暂时不可取,通知客户端在指定时间以后再次尝试 |
Retry-After: 120 |
Server |
web服务器软件名称 |
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
Set-Cookie |
设置Http Cookie |
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
Trailer |
指出头域在分块传输编码的尾部存在 |
Trailer: Max-Forwards |
Transfer-Encoding |
文件传输编码 |
Transfer-Encoding:chunked |
Vary |
告诉下游代理是使用缓存响应仍是从原始服务器请求 |
Vary: * |
Via |
告知代理客户端响应是经过哪里发送的 |
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning |
警告实体可能存在的问题 |
Warning: 199 Miscellaneous warning |
WWW-Authenticate |
代表客户端请求实体应该使用的受权方案 |
WWW-Authenticate: Basic
|
Accept
做用: 浏览器端能够接受的媒体类型,
例如: Accept: text/html 表明浏览器能够接受服务器回发的类型为 text/html 也就是咱们常说的html文档,
若是服务器没法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)
通配符 * 表明任意类型
例如 Accept: / 表明浏览器能够处理全部类型,(通常浏览器发给服务器都是发这个)
Accept-Encoding:
做用: 浏览器申明本身接收的编码方法,一般指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);
例如: Accept-Encoding: zh-CN,zh;q=0.8
Accept-Language
做用: 浏览器申明本身接收的语言。
语言跟字符集的区别:中文是语言,中文有多种字符集,好比big5,gb2312,gbk等等;
例如: Accept-Language: en-us
Connection
例如: Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,若是客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接
例如: Connection: close 表明一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP链接会关闭, 当客户端再次发送Request,须要从新创建TCP链接。
Host(发送请求时,该报头域是必需的)
做用: 请求报头域主要用于指定被请求资源的Internet主机和端口号,它一般从HTTP URL中提取出来的
例如: 咱们在浏览器中输入:http://www.hzau.edu.cn
浏览器发送的请求消息中,就会包含Host请求报头域,以下:
Host:www.hzau.edu.cn
此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号
Referer
当浏览器向web服务器发送请求的时候,通常会带上Referer,告诉服务器我是从哪一个页面连接过来的,服务器籍此能够得到一些信息用于处理。好比从我主页上连接到一个朋友那里,他的服务器就可以从HTTP Referer中统计出天天有多少用户点击我主页上的连接访问他的网站。可用于防盗链
User-Agent
做用:告诉HTTP服务器, 客户端使用的操做系统和浏览器的名称和版本.
咱们上网登录论坛的时候,每每会看到一些欢迎信息,其中列出了你的操做系统的名称和版本,你所使用的浏览器的名称和版本,这每每让不少人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域容许客户端将它的操做系统、浏览器和其它属性告诉服务器。
例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)
在上一篇中介绍了Fiddler的基本使用方法。经过上一篇的操做咱们能够直接抓取浏览器的数据包。但在APP测试中,咱们须要抓取手机APP上的数据包,应该怎么操做呢?
Andriod配置方法:
1)确保手机和Fiddler所在主机在同一个局域网中
2)获取Fiddler所在主机的ip地址,经过cmd命令进入命令编辑器,输入ipconfig -all,找到IPv4地址,记下该地址
3)对手机所链接的无线网络进行设置,点击WLAN,长按与Fiddler所在主机在同一个局域网的wifi,长按点击【修改网络】,选中【显示高级选项】,代理设置为手动,输入代理服务器的主机名和端口后保存。代理服务器的主机名即2)中的IPv4地址,端口为Fiddler上配置的端口(默认为8888),能够到Fiddler菜单栏中【Tool】-【Fiddler Option】的【Connections】中查看。
4)在手机浏览器上输入:http://IPv4地址:端口(例如:http://192.168.11.29:8888),点击【FiddlerRoot certificate】下载安装Fiddler证书。
5)若在浏览器上没法打开该地址,须要作两项检查:1、确保在浏览器、wifi中配置的代理与Fiddler所在主机地址和Fiddler中配置的端口,三者保持一致;2、确保在Fiddler-【Tools】-【Fiddler Option]-[Connection]中【Allow remote computers to connect】已经勾选上,若没有勾选,则须要勾选后保存并重启Fiddler。
6)这时咱们打开手机上的浏览器或APP,能够在Fiddler上看到手机上的数据包了。
IOS配置方法:
1)基本与andriod的配置方法一致,除了安装证书方式与andriod略有不一样,另外ios在下载证书后,须要手动信任证书。设置方法:打开【设置】-【通用】-【关于本机】-【证书信任证书】,找到对应的证书,启用便可。
HTTPS抓包
上面都是针对HTTP协议进行抓包的设置,那么HTTPS须要进行什么配置呢?
1)打开Fiddler-【Tools】-【Fiddler Option】,切换到HTTPS选项卡,勾选【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】,而后点击【Actions】-【Trust Root Certificate】,而后按照提示一路yes,直到弹框提示“Trust Cert success”点击肯定后,重启Fiddler就能够抓取HTTPS协议的数据包了。
Fiddler过滤会话
咱们在使用Fiddler进行抓包时,发现只要是使用了Fiddler代理服务器的全部HTTP/HTTPS数据包都会在Fiddler数据列表中显示出来,但有时咱们只关注从某个或某些服务器发出的请求,不想要看到其余服务器的数据包,应该怎么进行设置呢?咱们都知道Fiddler是一款强大的抓包工具,咱们能够经过设置来过滤只筛选出咱们想要的数据包。
1)在右侧菜单中,找到Fittlers选项,共有9个部分进行设置
2)Use Filters:勾选则表示使用过滤,不勾选则表示不进行过滤
3)Actions:有四个选项,Run Filterset now:当即运行过滤设置;Load Filterset:加载保存的过滤设置;Save Filterset:保存过滤设置;help:帮助
4)Hosts:该设置项有两个选项
5)Client Process:有三个选项,Show only traffic from:根据进程信息进行过滤,选择后,将只显示由该进程发出的请求;Show only Internet Explorer traffic:只关心由IE浏览器发出的请求;Hide traffic from Service Host:隐藏来自service host(即由svchost.exe进程发出)的请求
6)Request Headers:有五个选项,Show only if URL contains:能够经过正则表达式过滤请求地址中包含或不包含的内容,例如REGEX:\.(js|css|js\?.*|css\?.*)$(隐藏全部js和css请求);Hide if URL contains:与Show only if URL contains相反,一个是显示,一个是隐藏;Flags requests with headers:支持指定某个http请求头名称,若是在web session列表中存在该请求头,会加粗显示该session;Delete requests headers:与Flags requests with headers相似,这里是若是包含该请求头,则删除该请求头;Set request header:将HTTP请求头更新为所输入的值。
7)Breakpoints:断点设置,有四个选项。Break request on POST:对POST请求设置断点;Break request on GET with query string:会为全部方法为GET且URL中包含了给定查询条件的请求设置断点;Break on XMLHttpRequest:对全部可以肯定是经过XMLHTTPRequest对象发送的请求设置断点;Break response on Content-Type:会为全部响应头Content-Type中包含了指定文本的响应设置响应断点。
8)Response Status Code:根据响应状态码设置断点。
9)Response Type and Size:有几种类型,一类是根据响应数据的类型显示或隐藏;一类是根据响应数据的大小显示或隐藏;一类是根据响应所须要的时间设置背景颜色;一类是根据文件类型进行限制。
10)Response Headers:与Request Headers不一样的是,这块区域是针对响应数据的头部进行过滤。
这么多设置项,比较经常使用的就是1.2.3部分。经过过滤设置,能够快速的帮助咱们找到咱们须要抓包分析的数据包,从而提升效率,避免过多的数据包信息干扰咱们找到正确的数据包。
咱们知道Fiddler是位于客户端和服务器之间的代理,它可以记录客户端和服务器之间的全部 HTTP请求,能够针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至能够修改服务器返回的数据,功能很是强大,是web调试的利器。前面咱们介绍了如何使用Fiddler进行抓包和分析,以及如何抓取APP上的数据包。这里咱们介绍下如何修改请求和响应数据,也就是设置断点。
对request设置断点
1)经过菜单选项或快捷键F11进行设置,如图
当咱们设置断点后,进行HTTP请求,数据包顺序列会有中断的标记,单击该数据包能够看到在右侧会增长一行操做栏。这个时候咱们在前端是没有正常加载网页的,点击【Run to Completion】后能够返回响应数据。
接下来为了看咱们的断点设置是否生效,咱们以登陆为例子进行测试。登陆无忧行网站,输入正确的用户名和密码,点击登陆。咱们断点规则设置为before request,而后将密码清空,看看服务器给咱们返回了什么响应数据。
继续以登陆为例子,此次咱们将手机号改为非移动帐号进行登陆。
因而可知,咱们的断点已经设置成功,而且成功修改了HTTP的请求数据。
2)经过菜单选项或快捷键进行设置时,会将全部的HTTP请求都设置断点,但有时咱们只想针对某个服务器发出的请求设置断点,应该怎么操做呢?Fiddler是支持命令操做的,咱们能够经过“bpu 服务器地址”命令来对特定的请求设置断点。
在下图所示的位置输入命令,而后回车运行。
这个时候从该服务器发出的全部请求都会被中断,而从其余服务器发出的请求能够正常响应。
若是要清除原来的断点,能够在命令行输入“bpu”,就会清除全部的断点。
对response设置断点
1)一样的也能够经过菜单选项或快捷键alt+F11进行设置
2)经过命令“bpafter 服务器地址”
咱们也用一个实例来验证经过设置断点修改响应数据。以百度主页为例,咱们拦截到响应数据中的title值为”百度一下,你就知道“,咱们将响应数据中的title改为”test百度一下,你就知道“,而后在前端看看最终展现的是什么数据。
经过几个实例,更好的帮助咱们理解断点的含义,也巩固了Fiddler做为代理服务器的概念。接下来咱们再来讲说,Fiddler另外一个很实用的功能:Fiddler的编码和解码。
Fiddler的编码和解码
1)响应body解码
有时候咱们在Fiddler上看到响应数据是几个乱码字符,首先咱们能够点击,上方黄色提示区域直接进行解码。以下面的两个图所示。
2)请求和响应数据解码
有的时候,基于安全性考虑,开发人员会将请求和响应的body根据必定规则进行解码。若是是普通的编码规则,咱们能够直接经过Fiddler操做进行解码。例如在登陆百度网站的时候,有个参数的值是一个url地址,这个url通过urlEncode进行转码了。咱们就能够将该参数经过urlDecode进行解码。
首先,找到这个参数,选中后右键选择【send to TextWizard】
而后,在【transform】中找到【URLDecode】,字段值就被成功解码,咱们就能够很清楚的看到里面有哪些参数以及参数的值是什么了。
上面都是解码的例子,编码在实际运用中不多,就不介绍了。另外里面还有不少其余的编码/解码方法,就不一一举例啦~~
序章
Fiddler是一个蛮好用的抓包工具,能够将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操做。也能够用来检测网络安全。反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能用了以后就忘记了,每次去网站上找也很麻烦,因此搜集各大网络的资料,总结了一些经常使用的功能。
Fiddler 下载地址 :https://www.telerik.com/download/fiddler
Fiddler 离线下载地址:https://pan.baidu.com/s/1bpnp3Ef 密码:5skw
下载Fiddler要FQ,我费了好大得劲才翻出去下载到…
win8以后用“Fiddler for .NET4”而win8以前用“Fiidler for .NET2”比较好
1. Fiddler 抓包简介
Fiddler是经过改写HTTP代理,让数据从它那经过,来监控而且截取到数据。固然Fiddler很屌,在打开它的那一瞬间,它就已经设置好了浏览器的代理了。当你关闭的时候,它又帮你把代理还原了,是否是很贴心。。。
1) 字段说明
Fiddler想要抓到数据包,要确保Capture Traffic是开启,在File –> Capture Traffic。开启后再左下角会有显示,固然也能够直接点击左下角的图标来关闭/开启抓包功能。
Fiddler开始工做了,抓到的数据包就会显示在列表里面,下面总结了这些都是什么意思:
名称 |
含义 |
# |
抓取HTTP Request的顺序,从1开始,以此递增 |
Result |
HTTP状态码 |
Protocol |
请求使用的协议,如HTTP/HTTPS/FTP等 |
Host |
请求地址的主机名 |
URL |
请求资源的位置 |
Body |
该请求的大小 |
Caching |
请求的缓存过时时间或者缓存控制值 |
Content-Type |
请求响应的类型 |
Process |
发送此请求的进程:进程ID |
Comments |
容许用户为此回话添加备注 |
Custom |
容许用户设置自定义值 |
图标 |
含义 |
|
请求已经发往服务器 |
|
已从服务器下载响应结果 |
|
请求从断点处暂停 |
|
响应从断点处暂停 |
|
请求使用 HTTP 的 HEAD 方法,即响应没有内容(Body) |
|
请求使用 HTTP 的 POST 方法 |
|
请求使用 HTTP 的 CONNECT 方法,使用 HTTPS 协议创建链接隧道 |
|
响应是 HTML 格式 |
|
响应是一张图片 |
|
响应是脚本格式 |
|
响应是 CSS 格式 |
|
响应是 XML 格式 |
|
响应是 JSON 格式 |
|
响应是一个音频文件 |
|
响应是一个视频文件 |
|
响应是一个 SilverLight |
|
响应是一个 FLASH |
|
响应是一个字体 |
|
普通响应成功 |
|
响应是 HTTP/300、30一、30二、303 或 307 重定向 |
|
响应是 HTTP/304(无变动):使用缓存文件 |
|
响应须要客户端证书验证 |
|
服务端错误 |
|
会话被客户端、Fiddler 或者服务端终止 |
2). Statistics 请求的性能数据分析
好了。左边看完了,如今能够看右边了
随意点击一个请求,就能够看到Statistics关于HTTP请求的性能以及数据分析了(不可能安装好了Fiddler一条请求都没有…):
3). Inspectors 查看数据内容
Inspectors是用于查看会话的内容,上半部分是请求的内容,下半部分是响应的内容:
4). AutoResponder 容许拦截指定规则的请求
AutoResponder容许你拦截指定规则的求情,并返回本地资源或Fiddler资源,从而代替服务器响应。
看下图5步,我将“baidu”这个关键字与我电脑“f:\Users\YukiO\Pictures\boy.jpeg”这张图片绑定了,点击Save保存后勾选Enable rules,再访问baidu,就会被劫持。
这个玩意有不少匹配规则,如:
1. 字符串匹配(默认):只要包含指定字符串(不区分大小写),所有认为是匹配
字符串匹配(baidu) |
是否匹配 |
http://www.baidu.com |
匹配 |
http://pan.baidu.com |
匹配 |
http://tieba.baidu.com |
匹配 |
2. 正则表达式匹配:以“regex:”开头,使用正则表达式来匹配,这个是区分大小写的
字符串匹配(regex:.+.(jpg | gif | bmp ) $) |
是否匹配 |
http://bbs.fishc.com/Path1/query=foo.bmp&bar |
不匹配 |
http://bbs.fishc.com/Path1/query=example.gif |
匹配 |
http://bbs.fishc.com/Path1/query=example.bmp |
匹配 |
http://bbs.fishc.com/Path1/query=example.Gif |
不匹配 |
4). Composer 自定义请求发送服务器
Composer容许自定义请求发送到服务器,能够手动建立一个新的请求,也能够在会话表中,拖拽一个现有的请求
Parsed模式下你只须要提供简单的URLS地址便可(以下图,也能够在RequestBody定制一些属性,如模拟浏览器User-Agent)
5). Filters 请求过滤规则
Fiters 是过滤请求用的,左边的窗口不断的更新,当你想看你系统的请求的时候,你刷新一下浏览器,一大片不知道哪来请求,看着碍眼,它还一直刷新你的屏幕。这个时候经过过滤规则来过滤掉那些不想看到的请求。
勾选左上角的Use Filters开启过滤器,这里有两个最经常使用的过滤条件:Zone和Host
一、Zone 指定只显示内网(Intranet)或互联网(Internet)的内容:
二、Host 指定显示某个域名下的会话:
若是框框为黄色(如图),表示修改未生效,点击红圈里的文字便可
6). Timeline 请求响应时间
在左侧会话窗口点击一个或多个(同时按下 Ctrl 键),Timeline 便会显示指定内容从服务端传输到客户端的时间:
2. Fiddler 设置解密HTTPS的网络数据
Fiddler能够经过伪造CA证书来欺骗浏览器和服务器。Fiddler是个很会装逼的好东西,大概原理就是在浏览器面前Fiddler假装成一个HTTPS服务器,而在真正的HTTPS服务器面前Fiddler又装成浏览器,从而实现解密HTTPS数据包的目的。
解密HTTPS须要手动开启,依次点击:
1. Tools –> Fiddler Options –> HTTPS
2. 勾选Decrypt HTTPS Traffic
3. 点击OK
3. Fiddler 抓取Iphone / Android数据包
想要Fiddler抓取移动端设备的数据包,其实很简单,先来讲说移动设备怎么去访问网络,看了下面这张图,就明白了。
能够看得出,移动端的数据包,都是要走wifi出去,因此咱们能够把本身的电脑开启热点,将手机连上电脑,Fiddler开启代理后,让这些数据经过Fiddler,Fiddler就能够抓到这些包,而后发给路由器(如图):
1. 打开Wifi热点,让手机连上(我这里用的360wifi,其实随意一个都行)
2. 打开Fidder,点击菜单栏中的 [Tools] –> [Fiddler Options]
3. 点击 [Connections] ,设置代理端口是8888, 勾选 Allow remote computers to connect, 点击OK
4. 这时在 Fiddler 能够看到本身本机无线网卡的IP了(要是没有的话,重启Fiddler,或者能够在cmd中ipconfig找到本身的网卡IP)
5. 在手机端链接PC的wifi,而且设置代理IP与端口(代理IP就是上图的IP,端口是Fiddler的代理端口8888)
6. 访问网页输入代理IP和端口,下载Fiddler的证书,点击下图FiddlerRoot certificate
【注意】:若是打开浏览器碰到相似下面的报错,请打开Fiddler的证书解密模式(Fiddler 设置解密HTTPS的网络数据)
No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet?


7. 安装完了证书,能够用手机访问应用,就能够看到截取到的数据包了。(下图选中是布卡漫画的数据包,下面还有QQ邮箱的)

4. Fiddler 内置命令与断点
Fiddler还有一个藏的很深的命令框,就是眼前,我用了几年的Fiddler都没有发现它,偶尔在别人的文章发现还有这个小功能,还蛮好用的,整理下记录在这里。
FIddler断点功能就是将请求截获下来,可是不发送,这个时候你能够干不少事情,好比说,把包改了,再发送给服务器君。还有balabala一大堆的事情能够作,就不举例子了。

命令 |
对应请求项 |
介绍 |
示例 |
? |
All |
问号后边跟一个字符串,能够匹配出包含这个字符串的请求 |
?google |
> |
Body |
大于号后面跟一个数字,能够匹配出请求大小,大于这个数字请求 |
>1000 |
< |
Body |
小于号跟大于号相反,匹配出请求大小,小于这个数字的请求 |
<100 |
= |
Result |
等于号后面跟数字,能够匹配HTTP返回码 |
=200 |
@ |
Host |
@后面跟Host,能够匹配域名 |
@www.baidu.com |
select |
Content-Type |
select后面跟响应类型,能够匹配到相关的类型 |
select image |
cls |
All |
清空当前全部请求 |
cls |
dump |
All |
将全部请求打包成saz压缩包,保存到“个人文档\Fiddler2\Captures”目录下 |
dump |
start |
All |
开始监听请求 |
start |
stop |
All |
中止监听请求 |
stop |
断点命令 |
bpafter |
All |
bpafter后边跟一个字符串,表示中断全部包含该字符串的请求 |
bpafter baidu(输入bpafter解除断点) |
bpu |
All |
跟bpafter差很少,只不过这个是收到请求了,中断响应 |
bpu baidu(输入bpu解除断点) |
bps |
Result |
后面跟状态吗,表示中断全部是这个状态码的请求 |
bps 200(输入bps解除断点) |
bpv / bpm |
HTTP方法 |
只中断HTTP方法的命令,HTTP方法如POST、GET |
bpv get(输入bpv解除断点) |
g / go |
All |
放行全部中断下来的请求 |
g |
示例演示:
?

>

<

=

@

select

cls

dump

断点命令:
断点能够直接点击Fiddler下图的图标位置,就能够设置所有请求的断点,断点的命令能够精确设置须要截获那些请求。以下示例:

命令:
bpafter

bps


bpv


g / go


本文基于Fiddler4
讲解基本使用
fiddler抓包原理
注意:Fiddler 是以代理web服务器的形式工做的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的 程序。不过若是Fiddler非正常退出,这时候由于Fiddler没有自动注销,会形成网页没法访问。解决的办法是从新启动下Fiddler。
配置
打开Fiddler Tool->Fiddler Options->HTTPS 。 (配置完后记得要重启Fiddler).
选中"Decrpt HTTPS traffic", Fiddler就能够截获HTTPS请求,第一次会弹出证书安装提示,若没有弹出提示,勾选Actions-> Trust Root Certificate
另外,若是你要监听的程序访问的 HTTPS 站点使用的是不可信的证书,则请接着把下面的 “Ignore servercertificate errors” 勾选上。
证书安装提示:
点击Yes,留意一下红框里面的内容,DO_NOT_TRUST_FiddlerRoot ,这个就是证书的名称。
点击是。
点击肯定,这样Fiddler证书就已经添加成功了。
查看一下证书,Actions—>open windows certificate Manager
能够证书已经添加进去了,证书名称就是以前提醒你们留意的,【DO_NOT_TRUST_FiddlerRoot】
手机端抓包配置
fiddler监听端口默认是 8888,你能够把它设置成任何你想要的端口。勾选上 “Allow remote computersto connect” ,容许远程设备链接。
为了减小干扰,能够去掉 “Act assystem proxy on startup” 。
手机端(客户端)设置
首先查看电脑的 IP 地址,确保手机和电脑在同一个局域网内
Android 手机上的配置
将 Fiddler 代理服务器的证书导到手机上才能抓这些 APP 的包。导入的过程:打开浏览器,在地址栏中输入代理服务器的 IP 和端口(即电脑的IP加fiddler的端口),会看到一个Fiddler 提供的页面,而后肯定安装就行了
打开 WiFi 设置页面,选择要链接的 wifi ,而且长按,在弹出的对话框中,选择“修改网络”。在接下来弹出的对话框中,勾选“显示高级选项”。在接下来显示的页面中,点击“代理”,选择“手动”。代理服务器主机名设为 PC 的 IP ,代理服务器端口设为 Fiddler 上配置的端口 8888,点”保存”。
苹果手机上的配置
苹果手机上的配置其实跟 Android 手机基本是同样的。如图
至此已配置完成。
Fiddler的使用
视图功能区域
会话的概念:一次请求和一次响应就是一个会话。
fiddler主界面
下面挑几个快捷功能区中经常使用几项解释,其余功能本身尝试:
快捷功能区
1:给会话添加备注信息
2:从新加载当前会话
3:删除会话选项
4:放行,和断点对应,后面详细讲解
5:响应模式。也便是,当Fiddler拿到远程的response后是缓存起来一次响应给客户端仍是以stream的方式直接响应。
6:解码。有些请求是被编码的,点击这个按钮后能够根据响应的编码格式自动解码。
7:查找会话。
8:保存会话。
9:截屏。截屏后,会以会话的方式返回一个截图。
接着来看看会话列表


#栏图标说明

快捷键
删除一条会话,能够在选中会话后,按del删除,如若要清空列表,能够用Ctrl+X
左键点击单条HTTP请求,能够在右侧的tab面板中看到以下信息:
1. Statistic。
关于HTTP请求的性能和其余数据分析:

咱们能够从中看出一些基本性能数据:如DNS解析的时间消耗是8ms,创建TCP/IP链接的时间消耗是8ms等等信息。
2. Inspectors
提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息,分为上下两个部分,上半部分是请求头部分,下半部分是响应头部分。对于每一部分,提供了多种不一样格式查看每一个请求和响应的内容。
a、ImageView标签
JPG 格式使用 ImageView 就能够看到图片,选择一条Content-Type是image/jpeg的回话,点击TextView

b、TextView 标签
HTML/JS/CSS 使用 TextView 能够看到响应的内容。选择一条Content-Type是text/html的回话,点击TextView

c、Raw标签
Raw标签能够查看响应报文和响应正文,可是不包含请求报文

d、Auth标签
Auth则能够查看受权Proxy-Authorization 和 Authorization的相关信息
e、Cookies标签
Cookies标签能够看到请求的cookie和响应的set-cookie头信息。

3.AutoResponder标签
Fiddler 的AutoResponder tab容许你从本地返回文件,而不用将http request 发送到服务器上。
下边直接说他的使用方式把:
使用的是手机上边的百度手机助手的棋牌游戏界面。
一、首先看图 (咱们来重定向第一个欢乐斗地主这个图片)

二、打开Fiddler,而后点击棋牌游戏进入上边这个界面,就能发现会请求当前显示的这五张图片

这个时候咱们切换到AutoResponder这个界面,点击鼠标左键,把要重定向的这个session会话拖动到AutoResponder界面中

选择了咱们要返回的图片之后,而后点击save。
而后关掉应该,清楚应用缓存,而后在打开,点击棋牌游戏,能够看到

这是实现了替换其中一个,也许你会说,是否是原本就是那样啊,那么在介绍一个根据别的规则来进行重定向。
咱们经过重定向向,把全部的百度手机助手中的图片都替换成刚才的小头像。
前便的操做时同样的,拖过来之后咱们能够点击Save前边的倒的小三角,而后就能够看到,里边有不少规则,如今咱们选择
第一个:这是一个正则表达式。

而后在选择刚才的那个头像图片,而后save。
清除缓存,从新打开,能够看下图:

能够看到,全部的jpg格式的都变成了咱们的头像了。
关于重定向还有不少,剩下的就须要本身慢慢研究了。
小结:AutoResponder功能是Fiddler最实用的功能之一,Rule能够自由地设定,可使用搜索(默认)、精确匹配(EXACT)、正则表达式匹配(REGEX)。处理方式能够选择使用文件,也能够选择合适的时间暂停数据流(*bpu、*bpafter),人工干预。经过以上几个步骤,咱们演示了怎样将HTTP请求重定向到本地的文件,进行调试,这在咱们诊断跟踪一些js文件但却不能修改js文件时很是有用。比 如:在用浏览器测试P页面时,P页面引入了一个js资源文件R.js,因为R.js文件在服务器S上,而我此时又不能登陆S服务器(没有S服务器的账 号),此时咱们就能够经过浏览器将R.js文件下载到本地,而后对本地的R.js文件进行调整,最后经过设置Fiddler,将R.js文件的请求使用本 地的R.js文件。
4.Composer 自定义请求发送服务器
Composer容许自定义请求发送到服务器,能够手动建立一个新的请求,也能够在会话表中,拖拽一个现有的请求
Parsed模式下你只须要提供简单的URLS地址便可(以下图,也能够在RequestBody定制一些属性,如模拟浏览器User-Agent)

5.断点请求/响应

如图,箭头所指的位置时能够点击的。共三种状态:
空白:不设置断点。
箭头向上:表示断点请求。此时客户端的请求是没法直接到达目标服务器的,须要手动控制。
箭头向下:表示断点响应。此时目标服务器的响应是没法直接到达客户端的,须要手动控制。
还有一种打断点的方式
在命令行中输入命令:
bpu www.baidu.com (断点请求)
bpuafter www.baidu.com(断点响应)
这种方法只会中断www.baidu.com
断点请求并修改
如图,操做步骤:
-
设置断点请求,访问网页
-
点击对应的会话
-
查看请求报文信息
-
修改请求内容
-
完成断点,放行,把该请求发送给目标服务器。
图中Break On Response表示把请求发给服务器,可是服务器的响应被fiddler拦截,此时能够修改响应内容(和断点响应相似)。
断点响应并修改
和断点请求操做相似,只是在响应区域修改报文信息便可。
在断点响应时,请注意超时时间。
6.过滤域名
Fiddler抓包能够完成咱们移动开发者的调试测试需求。可是多余的网页请求和手机的其余连接影响咱们手机开发的需求。因此咱们须要排除其余无用的包,只关注咱们指定的域名的请求包。
打开fiddler,找到Filters选项并点击打开。如图所示
默认状况下,这个页面是灰色的,表明默认不过滤任何请求。如今咱们勾选 Use Filters
。
通常经常使用的有三种过滤条件:
1.域名过滤,只显示特定域名的记录:
*.baidu.com表示全部的百度二级域名会话;*baidu.com表示一级域名+二级域名的会话。设置好了后必定要点击Actions生效;
2.类型过滤,通常对各类图片、CSS、JS这类的静态素材也不须要看的状况下,直接所有过滤掉
.*\.(bmp|css|js|gif|ico|jp?g|png|swf|woff)
须要过滤多少本身直接加入就行了
3.根据返回状态码,好比只想显示200的状态,其余的不显示
Fiddler 的内置命令
?
问号(?)后边跟一个字符串,Fiddler 将全部会话中存在该字符串匹配的所有高亮显示(下图输入的是 ?google.com)
舒适提示:匹配的字符串是 Protocol、Host 和 URL 中的任何子字符串。
> 和 <
大于号(>)和小于号(<)后边跟一个数值,表示高亮全部尺寸大于或小于该数值的会话。
好比我输入 >5000,按下回车后结果以下:
舒适提示:你能够直接输入 >5k 表示你想高亮全部尺寸大于 5KB 的会话。
=
等于号(=)后边能够接 HTTP 状态码或 HTTP 方法,好比 =200 表示高亮全部正常响应的会话。
下图输入了 =POST,表示但愿高亮全部 POST 方法的会话:
@
@ 后边跟的是 Host,好比我想高亮全部鱼C论坛的链接,我能够 @bbs.fishc.com
舒适提示:下边 bpafter、bps、bpv、bpm 和 bpu 用于设置断点。
会话被中断下来以后,点击页面上方的 Go 按钮放行当前中断下来的会话,但新的匹配内容仍是会被断下来,输入命令但不带参数表示取消以前设置的断点。
bpafter
bpafter 后边跟一个字符串,表示中断全部包含该字符串的会话。
好比我想中断全部包含 fishc 的响应,那么我输入 bpafter fishc,而后在浏览器输入 bbs.fishc.com,发现并无收到服务器响应,所以都给 Fiddler 断下来了:
bps
bps 后边跟的是 HTTP 状态码,表示中断全部为该状态码的会话。
bpv 或 bpm
bpv 或 bpm 后边跟的是 HTTP 方法,表示中断全部为该方法的会话。
bpu
跟 bpafter 相似,区别:bpu 是在发起请求时中断,而 bpafter 是在收到响应后中断。
cls 或 clear
清除当前的全部会话。
dump
将全部的会话打包成 .zip 压缩包的形式保存到 C 盘根目录下。
g 或 go
放行全部中断下来的会话。
hide
将 Fiddler 隐藏。
show
将 Fiddler 恢复。
urlreplace
urlreplace 后边跟两个字符串,表示替换 URL 中的字符串。好比 urlreplace baidu fishc 表示将全部 URL 的 baidu 替换成 fishc。
舒适提示:直接输入 urlreplace 不带任何参数表示恢复原来的样子。
start
Fiddler 开始工做。
stop
Fiddler 中止工做。
quit
关闭 Fiddler。
select
select 后边跟响应的类型(Content-Type),表示选中全部匹配的会话。
好比但愿 Fiddler 选中全部的图片,可使用 select image;
而 select css 则选中全部的 css 文件;
固然,select htm 就是选中全部的 html 文件啦~
allbut 或 keeponly
跟 select 相似,不过 allbut 和 keeponly 会将全部无关的会话删除。
好比我只想看图片,那么我能够 keeponly image,表示将全部与图片无关的会话删除:
!dns
后边跟一个域名,执行 DNS 查找并在右边的 LOG 栏打印结果:
!listen
设置其余监听的端口,默认是 8888。。
【Fiddler学习】Fiddler教程,比较经典全面(转)
简介
Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddler能够也可让你检查全部的HTTP通信,设置断点,以及Fiddle全部的“进出”的数据(我通常用来抓包),Fiddler还包含一个简单却功能强大的基于JScript .NET事件脚本子系统,它能够支持众多的HTTP调试任务。
Fiddler官方网站提供了大量的帮助文档和视频教程,这是学习Fiddler的最好资料
工做原理
工做原理
Fiddler是以代理WEB服务器的形式工做的,浏览器与服务器之间经过创建TCP链接以HTTP协议进行通讯,浏览器默认经过本身发送HTTP请求到服务器,它使用代理地址:127.0.0.1, 端口:8888. 当Fiddler开启会自动设置代理, 退出的时候它会自动注销代理,这样就不会影响别的程序。不过若是Fiddler非正常退出,这时候由于Fiddler没有自动注销,会形成网页没法访问。解决的办法是从新启动下Fiddler。
主界面
主界面
Fiddler的主界面分为 工具面板、会话面板、监控面板、状态面板
工具面板
工具面板
说明注释、从新请求、删除会话、继续执行、流模式/缓冲模式、解码、保留会话、监控指定进程、寻找、保存会话、切图、计时、打开浏览器、清除IE缓存、编码/解码工具、弹出控制监控面板、MSDN、帮助
两种模式
-
缓冲模式(Buffering Mode)Fiddler直到HTTP响应完成时才将数据返回给应用程序。能够控制响应,修改响应数据。可是时序图有时候会出现异常
-
流模式(Streaming Mode)Fiddler会即时将HTTP响应的数据返回给应用程序。更接近真实浏览器的性能。时序图更准确,可是不能控制响应。
会话面板
会话面板
会话面板图标
监控面板
监控面板
-
请求总数、请求包大小、响应包大小。
-
请求起始时间、响应结束时间、握手时间、等待时间、路由时间、TCP/IP、传输时间。
-
HTTP状态码统计。
-
返回的各类类型数据的大小统计以及饼图展示。
统计报表
每一个网络请求都会经历域名解析、创建链接、发送请求、接受数据等阶段。把多个请求以时间做为 X 轴,用图表的形式展示出来,就造成了瀑布图。在Fiddler中,只要在左侧选中一些请求,右侧选择Timeline标签,就能够看到这些请求的瀑布图
时间轴
-
绿色的请求表示这是一个“有条件的请求”。HTTP 协议定义了 5 个条件请求头部,最多见的两个是“If-Modified-Since”和“If-None-Match”。服务器根据这两个头部来验证本地缓存是否过时,若是过时则正常返回资源的最新版本;不然仅返回 304 Not Modified,浏览器继续使用本地缓存。包含条件请求头部的请求用绿色显示,不然用黑色。
-
有阴影线的请求是缓冲模式下的请求,实心的是流模式下的请求。Fiddler 提供了缓冲(Buffering)和流(Streaming)两种抓包模式:缓冲模式下,Fiddler 会在响应完成时才将数据返回给应用程序(一般是浏览器),这种模式下能够控制响应,方便地修改响应内容;流模式下,Fiddler 会实时返回响应数据给浏览器,但没办法控制响应。通常使用流模式,瀑布图会更真实一些。这两种模式能够经过 Fiddler 的工具栏选择。特别的,经过 Fiddler 的“AutoResponder”功能返回的响应,只能是缓冲模式。
-
请求条的不一样颜色对应着不一样类型的响应,根据响应头的 MIME Type 来归类。如浅绿色表示图片类型的响应;深绿色是 JavaScript;紫色是 CSS;其它都是蓝色。
-
请求中的黑色竖线,表示的是浏览器收到服务端响应的第一个字节这一时刻。这个时间受 DNS 解析、创建链接、发送请求、等待服务端响应等步骤的影响。
-
请求条后面的图标表示响应的某些特征。如软盘图标表示这个响应正文从本地得到,也就是说服务端返回了 304;闪电表示这是 Fiddler 的“AutoResponder”的响应;向下的箭头表示响应是 302,须要重定向;红色感叹号说明这个请求有错误发生(状态码是 4XX 或 5XX)。特别的,若是请求条后面有一个红色的X,说明服务端响应完这个请求以后,断开了链接。出现这种状况通常有两种可能:HTTP/1.0 的响应中没有 Connection: Keep-Alive;或者是 HTTP/1.1 的响应中包含了 Connection: close。使用持久链接能够省去创建链接的开销,也能够减少 TCP 慢启动和其它拥塞控制机制带来的影响,总之是好处多多。
-
请求前面的红色圆圈表示这个链接是新建的,绿色表示是复用的。上面的圆圈表示的是浏览器到 Fiddler 的链接,下面的圆圈是 Fiddler 到服务端的链接。
状态面板
状态面板
控制台Fiddler的左下角有一个命令行工具叫作QuickExec,容许你直接输入命令。
常见得命令有:
命令 |
解释 |
help |
打开官方的使用页面介绍,全部的命令都会列出来 |
cls |
清屏 (Ctrl+x 也能够清屏) |
select |
选择会话的命令 |
?.png |
用来选择png后缀的图片 |
bpu |
截获request |
bpafter |
截获response |
Request消息的结构
Request消息的结构
Response消息的结构
Response消息的结构
经常使用功能
Fiddler不只能监听HTTP请求并且默认状况下也能捕获到HTTPS请求,Tool -> Fiddler Option -> HTTPS下面进行设置,勾选上“Decrypt HTTPS traffic”,若是没必要监听服务器端得证书错误能够勾上“Ignore server certification errors”,也能够跳过几个指定的HOST来缩小或者扩大监听范围。
监听HTTPS
HOST
-
模拟各种场景
-
经过GZIP压缩,测试性能
-
模拟Agent测试,查看服务端是否对不一样客户端定制响应
-
模拟慢速网络,测试页面的容错性
-
禁用缓存,方便调试一些静态文件或测试服务端响应状况
-
根据一些场景自定义规则
自定义规则
-
低网速模拟有时出于兼容性考虑或者对某处进行性能优化,在低网速下每每能较快发现问题所在也容易发现性能瓶颈,惋惜其余调试工具没能提供低网速环境,而强大的Fiddler考虑到了这一点,可以进行低网速模拟设置Rules > Performance > Stimulate Modem Speeds。
-
Compare(对比文本)
对比文本
-
Composer(构造器)
请求构造顾名思义就是咱们能够模拟请求,也就是说咱们能够借助Fiddler的Composer 在不改动开发环境实际代码的状况下修改请求中的参数值而且方便的从新调用一次该请求,而后相比较2次请求响应有何具体不一样。任何一个请求参数只要是合法的取值再次调用后都会有相应的响应,那么你想要的任意一个合法请求组合天然也可以按照你的意愿构造出来,而后再次调用以及查看返回数据。
Paste_Image.png
将该请求鼠标左键单击拖入Fiddler右侧Request Builder标签内并修改原请求参数OutPutType=JSON为OutPu tType=XML,而后点击Execute按钮再次触发调用请求

双击此次请求包在Inspectors标签下查看返回数据为XML格式,而JSON格式一栏为空:

Paste_Image.png
对一个从新载入的页面进行抓包,若是包的条目过多而你须要关注的就那么几项的话,可使用Fiddler的过滤器Filters进行抓包,那么抓包时只会抓取你但愿抓到的那些包。切换到Filters标签勾选Use filter,以便激活过滤器,这样下面的各类过滤方式就能够进行选择了。
Filter_1

所谓请求无非就是须要调用到的一些资源(包括JS、CSS和图片等),所谓重定向就是将页面本来须要调用的资源指向其余资源(你可以控制的资源或者能够引用到的资源)。
-
你能够将前台服务器的诸多或者某个资源在本地作个副本,若是正常网络访问环境下该资源出现了BUG而致使开发环境崩溃时,能够先将这个资源的请求重定向到本地副本,这样就能够继续进行开发调试你的页面,从而大量节省资源维护的等待时间。
-
你也能够将多人同时维护的某个JS文件复制一份出来在本地,当你的开发调试收到他人调试代码干扰时,能够将这个JS的调用重定向到本地无干扰的JS文件,进行无干扰开发,功能开发完成并调试OK以后再将你的代码当心合入到开发环境中,这样就能够避免受到他人干扰专心搞你的模块开发,也就是说可以将JS文件脱离开发环境却不影响线上调试。
-
你还能够将样式文件或者图片指向本地。

移动端抓包
Fiddler不但能截获各类浏览器发出的HTTP请求, 也能够截获各类智能手机发出的HTTP/HTTPS请求。
Fiddler能捕获IOS,Andriod,WinPhone,设备发出的请求,同理,也能够截获IPad, MacBook的等设备发出的HTTP/HTTPS。
前提条件是:安装Fiddler的机器,跟Iphone 在同一个网络里, 不然IPhone不能把HTTP发送到Fiddler的机器上来。
具体操做步骤以下:
-
Fiddler设置打开Fiddler, Tools-> Fiddler Options。(配置完后记得要重启Fiddler).
-
选中"Allow remote computers to connect". 是容许别的机器把HTTP/HTTPS请求发送到Fiddler上来
APP
-
获取Fiddler所在机器的IP
-
安装Fiddler证书这一步是为了让Fiddler能捕获HTTPS请求。 若是你只须要截获HTTP请求, 能够忽略这一步
-
首先要知道Fiddler所在的机器的IP地址: 假如我安装了Fiddler的机器的IP地址是:192.168.1.104打开IPhone 的Safari, 访问 http://192.168.1.104:8888, 点"FiddlerRoot certificate" 而后安装证书
APP_1
APP_2
-
打开IPhone, 找到你的网络链接, 打开HTTP代理, 输入Fiddler所在机器的IP地址(好比:192.168.1.104) 以及Fiddler的端口号8888
APP_3
参考资料
下面开始分析主界面的功能区:
一、Fiddler菜单栏,上图黑色部分,包括捕获http请求,中止捕获请求,保存http请求,载入本地session、设置捕获规则等功能。
二、Fiddler的工具栏,上图黄色部分,包括Fiddler针对当前view的操做(暂停,清除session,decode模式、清除缓存等)。
三、Web Session面板,上图红色部分,主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url,协议,状态码,body等信息,详细的字段含义以下图所示:
#栏图标说明
另外,注意请求的host字段。能够看到有来自多个www.csdn.net的子域名的响应,说明在大型网站的架构中,大多须要多个子域名,这些子域名多是单独用于缓存静态资源的,也多是专门负责媒体资源的,或者是专门负责数据统计的(如pingback)
右键单击其中的一条请求。能够选择的操做有:save(保存请求的报文信息,能够是请求报文,能够是响应报文),将整条会话做为txt保存到桌面,固然你能够保存为zip,能够看到整个回话的内容以下:
四、详情和数据统计板,针对每条http请求的具体统计(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间)和数据包分析。如inspector面板下,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息:
选择单条回话,右键save->selected Sessions->as Txt,打开相关的文件
若是想要从新发送某些请求,能够选中这些请求,而后点击工具栏中的
,而后就能够从新发送选中的这些请求。
五、详情和数据统计板
(1)、inspector面板
提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息,分为上下两个部分,上半部分是请求头部分,下半部分是响应头部分。对于每一部分,提供了多种不一样格式查看每一个请求和响应的内容。
a、ImageView标签
JPG 格式使用 ImageView 就能够看到图片,选择一条Content-Type是image/jpeg的回话,点击TextView
b、TextView 标签
HTML/JS/CSS 使用 TextView 能够看到响应的内容。选择一条Content-Type是text/html的回话,点击TextView
c、Raw标签
Raw标签能够查看响应报文和响应正文,可是不包含请求报文
d、Auth标签
Auth则能够查看受权Proxy-Authorization 和 Authorization的相关信息
e、Cookies标签
Cookies标签能够看到请求的cookie和响应的set-cookie头信息。
(2)、AutoResponder标签
Fiddler比较重要且比较强大的功能之一。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。可用于调试服务器端代码而无需修改服务器端的代码和配置,由于拦截和重定向后,实际上访问的是本地的文件或者获得的是Fiddler的内置响应。当勾选allow autoresponser 并设置相应的规则后(本例中的规则是将http://blog.csdn.net/aaa的请求拦截到本地的文件http://localhost:54321/WebForm1.aspx),以下图所示
(2)、Statistics面板
HTTP请求的性能和其余数据分析
咱们能够从中看出一些基本性能数据:如DNS解析的时间消耗是8ms,创建TCP/IP链接的时间消耗是8ms等等信息。
(3)、composer面板
能够模拟向相应的服务器发送数据的过程(不错,这就是灌水机器人的基本原理,也能够是部分http flood的一种方式)。
(3)、Filters面板
Filter标签则能够设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器很是强大,能够过滤特定http状态码的请求,能够过滤特定请求类型的http请求(如css请求,image请求,js请求等),能够过滤请求报文大于或则小于指定大小(byte)的请求
1、Fiddler是什么?
Fiddler是一个http协议调试代理工具,它可以记录并检查全部你的电脑和互联网之间的http通信,设置断点,查看全部的进出Fiddler的数据。 Fiddler 要比其余的网络调试器要更加简单,由于它不只仅暴露http通信还提供了一个用户友好的格式。
2、Fiddler抓包原理
3、Fiddler软件简介(参考:http://blog.csdn.net/gld824125233/article/details/52621456)
安装完成以后,点击启动Fiddler,Fiddler界面以下:
1.Fiddler开关
界面左下角或点击F12控制Fiddler开关,开关是“Capturing”;
2.启动以后Fiddler代理永远是开着的;
3.浏览器代理设置
(1)IE或360浏览器代理都是自动开启的;
代理查看方式:浏览器菜单栏上:工具—>Internet选项—>链接—>局域网设置—>高级代理。
Fiddler开启以后,代理自动修改;
(2)火狐浏览器
火狐浏览器启动以后,Fiddler没有反应,是由于火狐代理是本身独立的,不会像IE、360那样自动改变;
代理设置:
——>选项——>高级——>网络——>链接——>设置——>手动配置代理——>Http代理和端口输入(与Fiddler代理端口保持一致);
(3)谷歌浏览器代理设置
工具——>设置——>拖动页面到底部,点击:显示高级设置按钮——>网络——>更改代理服务器设置——>点击:局域网设置——>高级——>进入代理服务器设置;
谷歌和IE都是用的系统代理。
4.Fiddler本身的端口:
查看方式:Tools——>TelerikFiddler Options——>Connections下的Fiddler listens on port:8888,8888就是咱们Fiddler默认的端口号;
Fiddler默认端口号是8888(文章中有图说明端口号是哪个),若是要修改,修改以后要重启Fiddler。
5.Fiddler抓包格式
Fiddler只能抓取Http和https格式的,可是默认只能抓取http,想要抓取https咱们的设置一下,步骤见下:
Tools——>Telerik Fiddler Options——>HTTPS下,勾选:CaptureHTTPS CONNECTs、Decrypt HTTPS traffic 、ignore server certificate errors(unsafe)——>点击OK,弹出证书以后直接确认就行。
6.Fiddler远程机制
Fiddler是代理机制,因此咱们也能够实现远程操做,Fiddler默认只开启本地,若要抓取远程须要打开远程设置。
设置: Tools——>TelerikFiddler Options——>Connections——>勾选Allow remote computers connect,此时就能够远程操做;
7.Fiddler远程实例
我直接用另外一台电脑,远程捕获我本身电脑。
(1)另外一台电脑相关设置
另外一台电脑上安装Fiddler并启动,查询另外一台电脑的IP,开始——>运行或(win+R)——>输入cmd,而后输入ipconfig,查看IP和Fiddler端口号,并记录:
Ip为:192.168.103.171,Fiddler端口号为:8888;
(2)个人电脑相关设置
点击浏览器,以搜狐浏览器来讲,修改代理
http代理为:另外一个机子上的IP,端口值为Fiddler的端口
(3)结果
在我本地浏览器点击,另外一个机子中Fiddler上捕获的数据界面见下:
(4)说明
指定代理以后,不管Fiddler开关是关闭仍是打开,数据都会传输过来,见上图。
本地远程其余机子,方法一致,就是讲要远程的机子代理改成本地电脑IP+Fiddler端口号便可。
转自:http://blog.csdn.net/gld824125233/article/details/52621456
About Me
|
|