Fiddler使用和数据抓包

举报
轻狂书生FS 发表于 2020/12/02 23:15:11 2020/12/02
【摘要】 一、Fiddler使用说明 1.、Fiddler2是一个使用本地127.0.0.1:8888的HTTP代理,任何能够设置HTTP代理为127.0.0.1:8888的浏览器和应用程序都可以使用Fiddler。 二、.什么是Fiddler? Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一。它能够记录客户端和服务器之间的所有HTTP请...

一、Fiddler使用说明

1.、Fiddler2是一个使用本地127.0.0.1:8888的HTTP代理,任何能够设置HTTP代理为127.0.0.1:8888的浏览器和应用程序都可以使用Fiddler。

二、.什么是Fiddler?

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

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

\

三、Fiddler使用界面简介

其主界面如下:

\

1、工具栏:File\包括捕获http请求,停止捕获请求,保存http请求,载入本地session\设置捕获规则等功能。

2、菜单栏:Replay~Browse包括Fiddler针对当前View的操作(暂停、清除session、decode模式、清楚缓存等)。

3、WebSession面板:主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url、协议、状态码、body等信息,详细字段含义如下:

\

4、详情和数据统计面板。针对每条http请求的具体统计Statistics(例如发送/接收字节数、发送/接收时间,还有粗略统计各地访问服务器所花费的时间)和数据包分析,如:

(1)inspector面板下,提供headers\textview\hexview\Raw等多种方式查看单条http的请求报文的信息:

\

(2)Composer面板下,则可以模拟向相应的服务器发送数据。

\

也可以粘贴一次请求的rawhttpheaders达到模拟的请求。

\

(3)Filters标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求。

\

四、使用Fiddler抓包分析

1、Fiddler抓取Http请求。

抓包是Fiddler的最基本的应用,启动Fiddler后,在浏览器中随便进入一个网站,回车后,在Fiddler的WebSession界面捕获到HTTP请求如下图:

\

图标的意思:

\

五、HTTP状态码详解

\

六、HTTP详解

1、HTTP请求格式

Http通信协议,以“消息头/消息体”的方式分割,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么做。

HTTP协议传输的消息规定,每一个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,而消息头是必须的。例如,打开一个网页,“查看源文件”,HTML代码就是HTTP的消息体,消息头则可以通过开发工具或者插件看到。

客户端通过发送HTTP请求向服务器请求对资源的访问。HTTP请求由三部分组成:请求行、请求头和请求正文。

请求行:请求方法URI协议/版本

请求头(RequestHeader)

请求正文

如下一个HTTP请求的数据:

\

(1)请求行:请求方法URI协议/版本

POST/index.phpHTTP/1.1请求方法URI协议和协议的版本

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以/开头。

请求方法,HTTP1.1中的请求方式:

\

(2)请求头(RequestHeader)

每个头域由一个域名,冒号(:)和域值三部分组成。

HTTP常见的请求头如下:

     

Transport头域

1)Connection:

作用:表示是否需要持久连接

Connection:keep-alive

Connection:close【代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。】

2)Host:(发送请求时该头域是必须的)

作用:主要用于指定被请求资源的Internate主机和端口号,通常是从HTTPURL中提取出来的;

 

Client头域

1)Accept:

作用:浏览器可以接受的媒体类型(MIME类型)

Eg:Accept:*/*代表浏览器可以处理所有类型

2)Accept-Encoding:

作用:浏览器申明自己接收的编码方法,通常指定压缩方法,而不是字符编码;

3)Accpet-Language:

作用:浏览器申明自己接收的语言;

4)User-Agent:

作用:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称版本;

5)Accept-Charset:

作用:浏览器申明自己接收的字符集;

 

Cookie/Login头域

Cookie:

作用:最重要的header,将cookie的值发送给HTTP服务器;

 

Miscellaneous头域

Referer:

作用:提供了Request的上下文信息的服务器,告诉我服务器我是从哪个链接过来的;

 

Cache头域

1)If-Modified-Since:

作用:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。

例如:If-Modified-Since:Thu,09Feb201209:07:57GMT

2)If-None_match:

作用:If-None-Match和ETag一起工作,工作原理是在HTTPResponse中添加ETag信息。当用户再次请求该资源时,将在HTTPRequest中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag.使用这样的机制将提高网站的性能

例如:If-None-Match:"03f2b33c0bfcc1:0"

3)Pragma:

作用:防止页面被缓存,Pargma只有一个用法,例如:Pragma:no-cache;

4)Cache-Control:

作用:这个是非常重要到的规则,用来指定Response-Request遵循的缓存机制。各个指令含义如下:

Cache-Control:Public可以被任何缓存所缓存

Cache-Control:Private内容只缓存到私有缓存中

Cache-Control:no-cache所有的内容都不会被缓存

 

Entity头域

1)Content-Length:

作用:发送给HTTP服务器数据的长度,即请求消息正文的长度;

2)Content-Type:

作用:

 

2、HTTP响应格式

在接收和解释请求消息后,服务器会返回一个HTTP响应消息。与HTTP请求类似,HTTP响应也由三个部分组成,分别是:状态行、消息报头和响应正文。

如下一个HTTP响应例子:

 

?

1

2

3

4

5

6

7

8

9

10

11

12

<span style="white-space:pre">  </span>HTTP/1.1  200  OK

    Date: Sun, 17 Mar 2013 08:12:54 GMT

    Server: Apache/2.2.8 (Win32) PHP/5.2.5

    X-Powered-By: PHP/5.2.5

    Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/

    Expires: Thu, 19 Nov 1981 08:52:00 GMT

    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

    Pragma: no-cache Content-Length: 4393

    Keep-Alive: timeout=5, max=100

    Connection: Keep-Alive

    Content-Type: text/html; charset=utf-8

    

Hello HTTP!

 

1)状态行

状态行由协议版本、数字形式的状态代码以及相应的状态描述组成,各元素之间以空格分隔,结尾时回车换行,如:HTTP/1.1200OK协议版本服务器返回的响应码状态代码的文本描述

状态代码与状态描述:

1XX:指示信息——表示请求已经接受,继续处理;

2XX:成功——表示请求已经被成功接收、理解、接受;

3XX:重定向——要完成请求必须进行更进一步的操作;

4XX:客户端错误——请求有语法错误或请求无法实现;

5XX:服务器端错误——服务器未能实现合法的请求。

 

常用状态码以及状态描述:

200:客户端请求成功

400:BadRequest客户端请求有语法错误,不能被服务器所理解

401:Unauthorized请求未经授权,这个状态吗必须和WWW-Authenticate报头域一起使用

403:Forbidden服务器收到请求,但是拒绝提供服务

404:NotFound请求资源不存在,如输入了错误的URL

500:InternalServerError服务器发生不可预期的错误

502:ServerUnavailable服务器当前不能处理客户端的请求,一段时间后可能回复正常

2)响应正文

响应正文就是服务器返回的资源的内容,响应头和正文之间也必须用空行分隔,如:

 

HelloHTTP!

3)响应头信息

HTTP最常见的响应头如下所示:

Cache头域

1)Date:

作用:生成消息的具体时间,即当前的GMT时间;

2)Expires:

作用:浏览器会在指定过期时间内使用本地缓存,指明应该在什么时候认为文档已经过期,从而不再缓存;

3)Vary:

 

Cookie/Login头域

1)P3P:

作用:用于跨域设置Cookie,这样可以解决iframe跨域访问cookie的问题;

2)Set-Cookie:

作用:非常重要的header,用于把cookie发送到客户端浏览器,每一个写入cookie都会生成一个Set-Cookie.

 

Entity实体头域

1)ETag:

作用:和If-None_match配合使用;

2)Last-Modified:

作用:用于指示资源的最后修改日期和时间;

3)Content-Type:

作用:WEB服务器告诉浏览器自己响应的对象的类型和字符集;

4)Content-Length:

作用:指明实体正文的长度,以字节方式存储的十进制数字来表示。

5)Content-Encoding:

作用:文档的编码方法,一般是压缩方式。

6)Content-Language:

作用:WEB服务器告诉浏览器自己响应的对象的语言者。

 

Miscellaneous头域

1)Server:

作用:指明HTTP服务器的软件信息;

2)X-Powered-By:

作用:表示网站是用什么技术开发的。

 

Transport头域

Connectio:Keep-alive

 

Location头域

Location:用于重定向一个新的位置,包含新的URL地址,实例请看304状态实例。

 

七、Fiddler调试技巧

1、使用Fiddler进行HTTP断点调试,可以做到:

(1)修改HTTP请求头信息,例如修改请求头的UA/Cookie/Referer信息,通过“伪造”相应信息达到相应的目的(调试,模拟用户真实请求等)。

(2)构造请求数据,突破表单的限制,随意提交数据。避免页面js和表单限制影响调试。

(3)拦截响应数据,修改响应实体。

Fiddler提供了两种设置断点的方式达到上述功能:

1、Fiddler菜单栏->rules->automaticBreakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。有两个断点位置:

(1)beforeresponse。也即发送请求后,但是Fiddler代理中转前,这时可以修改请求的数据。【此种调试可以在浏览器发送请求消息到Fiddler代理服务器时,手动修改用户HTTP请求头消息,针对不同的请求数据测试服务器返回的不同响应结果。】

(2)Afterresponse。也即服务器响应之后,但是在Fiddler将响应中转给客户端之前,这时可以修改响应的结果。

【为什么说上述方法很重要?一般的js前端和后台程序员是分工合作的,js程序员想要调试Ajax请求从后台获取数据的功能,这样就不需要等待服务器端程序员开发好所有接口后再开始开发js端的ajax请求功能,因为通过“模拟”真实服务端的响应,便可保证功能的正确性,而后台开发人员,只要保证最终响应式符合规定的即可。这样大大提高了程序开发的效率,当然也降低的不同业务线程序员联调的难度。】

2、命令行下输入:bpafterhost名称或者bpvbpubpm等设置断点。这种断点只针对特定类型的请求。Fiddler中设置断点修改Request,使用命令:bpuwww.baidu.com;设置断点修改Response,使用命令:bpafterwww.baidu.com。

3、终止断点的方式:

(1)在inspector界面点击“runtocomplete”即可终止本次HTTP请求的断点。

(2)输入go命令,也会使得当前的请求跳过断点。

(3)在rules->autobreakpoint中disabled断点即可。

实例:

1、设置断点,修改响应数据

(1)打开https://www.cnblogs.com/

(2)设置断点afterresponse断点后,在命令行输入bpafterwww.cnblogs.com回车,再次访问该网站,可以在web-session面板看到请求已经被挂起,如图8-1,而web浏览器也一直处于加载状态,选择被挂起的请求,在inspector面板可以看到图8-2所示:

\

4、Fiddler常用技巧

(1)Fiddler中设置断点修改Request;

(2)Fiddler中设置断点修改Response;

(3)自动重定向AutoResponder到本地文件:

创建重定向规则,例如将目标请求是这个js的HTTP请求重定向到本地文件。

(4)过滤会话sessionlistfilter.

 

本文转自《Fiddler使用和数据抓包

文章来源: blog.csdn.net,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LookForDream_/article/details/89382986

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。