反骨仔

一个业余的 .NET Core 攻城狮

0%

01 HTTP 协议和 Fiddle 抓包

Web 浏览器和 Web 服务器之间是通过 HTTP 协议相互通信的。

1.1 HTTP 协议介绍

1.1.1 什么是 HTTP 协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则 。

超文本传输协议( HyperText Transfer Protocol, HTTP )是互联网上应用最广泛的一种网络协议,它允许将超文本标记语 言( HTML )文档从 Web 服务器传送到客户端的浏览器。

目前我们使用的 HTTP 协议是 HTTP/1.1 版本 。

1.1.2 如何学习 HTTP 协议

必须先了解 HTTP 协议的基本知识;然后找一个抓包软件实实在在地看到数据包的内容,并且看到数据包是如何在浏览器和 Web 服务器中进行交互的。

Fiddler 就是我们需要的抓包工具 。

1.1.3 HTTP 协议的工作原理

我们打开浏览器,在地址栏中输入 URL ,然后我们就看到了网页。原理是怎样的呢?

实际上,我们输入 URL 后,浏览器就给 Web 服务器发送了一个 HTTP 请求(HTTP Request),Web 服务器接到 HTTP 请求后进行处理,生成相应的 HTTP 响应( HTTP Response),然后发送给浏览器 。浏览器解析 HTTP 响应中的 HTML,这样我们就看到了网页 。

image-20210102132216079

浏览器客户端和 Web 服务器之间是通过 HTTP 协议来交流的。 目前主流的 Web 浏览器有微软的 IE、Firefox 和 Chrome 。

Web 浏览器会给 Web 服务器发送一条 HTTP 请求 , 服务器会把 Web 对象发送给浏览器,浏览器解析 Web 对象,这些对象就显示在屏幕上了 。

1.2 Fiddler 的介绍

Fiddler 是世界上最强大最好用的 Web 调试工具,能记录所有客户端和服务器 的 HTTP 和 HTTPS 请求,允许你监视、设置断点,甚至修改输入输出数据 。

Fiddler 包含了一个强大的基于事件脚本 的子系统,并且能使用 .NET 语言进行扩展。

Fiddler 是用 C# 开发的 ,作者是 Eric Lawrence。

1.2.1 Fiddler 的下载和安装

Fiddler 的官方网站是 www.fiddler2.com,下载地址是 http://www.getfiddler.com

Fiddler 有 2 个版本,F iddler2 和 Fiddler4 ,两者功能相同。建议使用 Fiddler4 。

1.2.2 Fiddler 的基本界面

Fiddler 基本界面包括如下区域:

  1. 主菜单栏:菜单 中几乎可以启 动所有的 Fiddler 功能
  2. 工具栏 :提供了很多常见的命令
  3. Web Sessions 列表(会话列表):显示捕捉到的每个 Session 的简短信息。平常都需要在这里选择一个或者多个 Ses sion 后再进行操作
  4. 功能面板:这里有很多选项卡 ,提供了 很多功能。我们 常用的是 Inspectors 选项卡
  5. QuickExec:命令行工具,可以输入简单的命令, 例如输入 cls 可以清空 Web Sessions
  6. 状态栏:上面显示 了 Fiddler 的一些配置信 息

image-20210102140149408

1.2.3 Inspectors 选项卡

Inspectors 选项卡下可以查看 HTTP 请求和 HTTP 响应的报文结构 。其中 Raw 选项卡可以查看完整的消息,Headers 选项卡只查看消息中的 Header 。

image-20210102140202018

1.2.4 Web Sessions 列表

Fiddler 窗口的左边是 Web Sessions 列表,是 Fiddler 中 最重要的部分 ,显示了每个 Session 的摘要信息。Fiddler 中的大部分操作都需要在 Web Sessions 列表中选择一个或者多个 Session,再进行其他操作。Web Sessions 列表中的表头可以排序。

一个 Session 包含了 一个 HTTP 请求和一个 HTTP 响应。

image-20210102140350590

Web Sessions 列表栏中包含的信息如下:

  1. #:这是 Fiddler 生成的 ID(最好是按顺序排列〉。
  2. Result:响应的状态码。
  3. Protocol :使用的协议 HTTP 或者 HTTPS
  4. Host:服务器的主机名和端口号
  5. URL: URL 的路径
  6. Body: HTTP 响应中包含的字节数
  7. Caching:跟缓存相关的字段的值
  8. Content-Type:响应中 Content-Type 的值
  9. Process:对应本地 Windows 的进程

1.2.5 Fiddler 捕获 HTTP 协议的数据包

  1. 启动 Fiddler,打开任何一个浏览器,输入 http://www.cnblogs.com/tankxiao/
  2. 选择任何一个 Session,然后选择 Inspectors 选项卡,就可以查看详细内容

image-20210102140727667

1.2.6 Fiddler 设置开始捕获和停止捕获

我们把捕获 HTTP 数据包的过程简称为抓包 。 在 Fiddler 的使用过程中 , 当我们已经抓到自己想要的数据包后,可以停止抓包,以避免抓到一些不需要的数据包。接下来介绍两种设置方法。

方法一:在 Fiddler 中单击 File -> Capture Traffic(快捷键是 Fl2) 来开始抓包或者停止抓包 。

image-20210102141010155

方法二:单击 Fiddler 左下角的“ Capturing "按钮来开始抓包或者停止抓包。

image-20210102141039374

1.3 HTTP 协议报文的结构

HTTP 报文分 2 个:一个是 HTTP 请求报文,一个是 HTTP 响应报文。

1.3.1 HTTP 请求报文的结构

浏览器发送给 Web 服务器的 HTTP 请求报文内容。

image-20210102141211762

HTTP 请求报文的详细内容:

image-20210102141238392

HTTP 请求报文分为 3 部分 :第一部分 叫 起始行( Request line ),第二部分叫首部(Request Header),第三部分叫主体(Body)

  1. 第一行中的 Method 表示请求方法,比如“ POST ”或者“ GET ”,现在使用的 HTTP 协议版本是 HTTP/ 1.1
  2. 第二部分是首部(Header),后面会详细介绍这些首部的用法
  3. 第三部分是主体(Body)

【注意】Header 首部和 Body(主体)之间有一个空行

1.3.2 HTTP 响应报文的结构

Web 服务器发送给浏览器的 HTTP 响应报文内容:

image-20210102142354842

HTTP 响应报文的详细内容:

image-20210102142427966

Response 消息的结构和 Request 消息 的 结构基本一样 ,同样也分为 3 部分:第一部分 叫响 应行( Response Line ) , 第 二部分 叫响 应首部(Response Header),第三部分是主体(Body) 。

  1. 第一部分是起始行,有状态码和状态码消息
  2. 第二部分是首部( Header ),后面会详细介绍这些首部的用法
  3. 第三部分是主体( Body ),如果是 GET 方法,就没有主体

【注意】Header 首部和 Body(主体)之间有一个空行

1.3.3 Fiddler 捕获博客主页,查看 HTTP 请求和 HTTP 响应报文

  1. 启动 Fiddler,打开浏览器 ,输入 http://www.cnblogs.com/tankxiao
  2. 在 Fiddler 的界面中找到 www.cnblogs.com/tankxiao,然后选择 Inspectors 选项卡

image-20210102142832413

  1. 在 HTTP 请求中选择 Raw 选项卡 ,这样就能看到完整的 HTTP 请求报文。由于这是个 GET 方法,所以 HTTP 请求没有 Body
  2. 在 HTTP 响应中选择 Raw 选项卡,这样就能看到完整的 HTTP 响应报文。

1.4 Fiddler 抓包的原理

Fiddler 为什么能抓包呢?Fiddler 本质上是一个 Web 代理服务器。它的默认工作端口是 8888。

我们可以查看 Fiddler 的工作端口。启动 Fiddler,如图所示,在菜单栏中单击 Tools -> Fiddler options。

image-20210102143045024

1.4.1 什么是代理服务器

Web 代理( Proxy Server)服务器是网络的中间实体。代理位于 Web 客户端和 Web 服务器之间,扮演“中间人”的角色。

HTTP 的代理服务器既是 Web 服务器又是 Web 客户端。

image-20210102143138810

代理服务器是网络信息的中转站,它具有以下功能:

  1. 共享网络。能解决仅仅有一条线路 、 一个公有 IP 的问题。在公有 IP 资源严重不足的情况下,可以满足局域网大量用户同时共享上网的需求
  2. 提高了访问速度。因为大部分的代理服务器都有缓冲功能,可以直接读取,无须再连接到远程 Web 服务器。这样可以达到加快访问网站的速度、节约通信带宽的目的
  3. 突破了访问限制 。当访问权限受到限制时,可以使用有权限的代理服务器
  4. 隐藏身份。内部网的用户要对外发布信息,就需要使用代理服务器的反向代理功能 。 这样就不会影响内部网络的安全性能,起到隐藏身份的目的

1.4.2 Fiddler 的工作原理

Fiddler 是以代理 Web 服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。

image-20210102143440502

Fiddler 启动的时候,会偷偷地把 Internet 选项中的代理修改为 127.0.0.1 ,端口:8888 。
当 F iddler 退出的时候,它会自动在 Internet 选项中取消代理,这样就不会影响别的程序 。
如果 Fiddler 非正常退出,这时候因为 Fiddler 没有自动注销,会造成网页无法访问 。解决的办法是重新启动 Fiddler 。

1.4.3 查看 Internet 选项代理设置

先启动 Fiddler,打开控制面板,找到 Internet 属性,然后选择连接 -> 局域网设置 -> 高级,可以看到代理服务器地址己经被 Fiddler 设置为 127.0.0.1 :8888 了。

关闭 Fiddler,可以看到代理服务器地址已经取消了。

image-20210102143636337

1.4.4 Fiddler 如何捕获 Firefox

有时候我们会发现 ,Fiddler 能捕获 IE 和其他浏览器发出的请求,但是不能捕获 Firefox 发出的请求。
之所以不能捕获 Firefox 的请求,那是因为 Firefox 的代理服务器没有配置成 Fiddler 。
打开 Firefox,在菜单栏中选择工具 -> 选项,-> 高级,-> 网络 -> 设置。选择使用系统代理设置。

image-20210102143808756

或者手动配置,指向 Fiddler。

image-20210102143833608

1.4.5 Fiddler 能捕获哪些设备的 HTTP 数据包

任何支持代理的 HTTP 请求都能被 Fiddler 捕获到,首先 Fiddler 能捕获各种浏览器,比如 IE、Firefox,Chrome 发出来的数据包 。

Fiddler 还能捕获各种移动设备,比如 Android 手机、苹果手机、iPad 等发出的数据包。

image-20210102143942796

Fiddler 能捕获任何程序发出来的 HTTP/HTTPS 请求,只要这个程序支持 Web 代理服务器即可。

比如 Fiddler 能抓到 QQ 发出的包 ,当然 QQ 中发的聊天消息是抓不到的,因为 QQ 中的聊天信息使用的是 OICQ 协议,不是 HTTP 协议 。

只要在 QQ 中设置代理服务器即可实现抓包。

image-20210102144033672

1.4.6 解压 HTTP 响应

在 Fiddler 抓包的过程中,我们经常看到 HTTP 响应是乱码,单击“ Response body is encoded. Click to decode. "按钮可以解压 HTTP 响应 。

image-20210102144112014

  • 参考