Fiddler调试权威指南

978-7-115-33797-9
作者: 【美】Eric Lawrence
译者: 祝洪凯李妹芳
编辑: 陈冀康

图书目录:

详情

在本书介绍了如何充分使用Fiddler的功能,来调试虚拟和Web相关应用的流量,包括如何调试HTTPS流量,以及使用Fiddler的上百种内建功能,如何使用FiddlerScript引擎,以及构建自己的FiddlerCore类库。

图书摘要

版权信息

书名:Fiddler调试权威指南

ISBN:978-7-115-33797-9

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [美] Eric Lawrence

  译    祝洪凯 李妹芳

  责任编辑 陈冀康

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Simplified Chinese translation copyright ©2013 by Posts and Telecommunications Press.

ALL RIGHTS RESERVED

Debugging with Filddler by Eric Lawrence

Copyright © 2012 by Eric Lawrence

本书中文简体版由作者Eric Lawrence授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


Fiddler是一种流行的Web调试代理。它功能强大,界面友好,简单易用,无论对开发人员或者测试人员来说,都是非常有用的工具。

本书是Fiddler的开发者Eric Lawrence编写的一本权威的参考指南。全书分为10章和4个附录,从认识Fiddler开始,介绍了基本技巧和概念、配置选项、Inspectors、扩展、数据流导入导出、FiddlerScript和FiddlerCore等主题;附录部分还给出了故障排除和命令行等有用的参考信息。

本书适合Web开发人员和Web测试人员阅读参考,也适合想要学习和掌握Fiddler的读者阅读。通过本书,你将学会如何利用Fiddler调试Web相关的应用,掌握如何调试HTTPS数据流,学会如何在流行的设备上使用Fiddler,甚至掌握更多高级的扩展功能。


Eric Lawrence(@ericlaw)是Fiddler Web调试平台的创始人。全世界无数的Web专业人员都在使用Fiddler。Eric目前是微软IE浏览器组的Program Manager,他从1999年就一直在开发Web应用和浏览器。他的博客是http://blogs.msdn.com/b/Fiddlerhttp://blogs.msdn.com/bIEInternals。除了创建Fiddler之外,他还开发和维护其他的免费工具,可登录http://bayden.com/了解详细信息。


如果不是来自全世界很多人的许多帮助,就不会有本书,甚至也不会有Fiddler。

首先,我要感谢我的妻子Jane,她给了我很多鼓励,是我灵感的源泉,而在我花费无数个日日夜夜开发Fiddler以及写作本书时,她又给予了极大的耐心。我还要感谢我的父母和祖母,由于他们的教育,我对知识如饥似渴,自己动手写书的愿望开始滋长。在过去几年里,由于呆在家里写代码,我谢绝了很多朋友聚会,希望他们能够原谅我。

感谢同事给我的许许多多的帮助,在这里无法一一列出,感谢Fiddler社区源源不断地给予鼓励、提出建议和报告bug。特别值得一提的是,同事Jim Moore仔细审阅了本书的草稿,并提出了中肯的反馈。感谢很多Fiddler的贡献者,有你们的帮助才能够有资金维护和发布Fiddler。

最后,感谢你,亲爱的读者,感谢你关注Fiddler,选择本书!


首先,坦白地说,开发Fiddler Web调试器时,并没有什么伟大的愿景或期望—要做一个全世界最受欢迎的调试代理。它只是由具体需求触发,应运而生。我从未打算构建一个功能如此灵活而强大的复杂平台。因为它的复杂性,我不得不花费九个月的时间来写这本书,为的就是介绍如何充分利用Fiddler。我们真的做到了!

在深入介绍技术细节之前,首先分享一下Fiddler背后的故事。

1999年春天,我还是马里兰大学的学生,得到了微软的一个新团队的程序经理(Program Manager)职位的面试机会。在最后一轮面试中,面试官的第一个问题是“HTTP是如何工作的?”我对此只是略知皮毛,因此给了个不完整也不太准确的回答,但还不至于让自己很难堪。从那个暑假开始,我的工作是参与第一版SharePoint的开发。我偶尔会使用Microsoft Network Monitor (NetMon)查看网络数据流。Microsoft Network Monitor(NetMon)是一个功能强大的数据包探嗅器(packet sniffer),但很原始很难用。2001年暑假刚开始,我正式加入微软公司,工作职位是Office Clip Art organizer客户端和网站的程序经理。

当时,我所在团队的大多数开发和测试人员都不熟悉Web开发,他们之前主要是用C和C++实现本地运行的应用。很快,调试过程过于繁琐这个问题就凸显出来—很多同事都不愿意使用NetMon。我甚至看到一些开发人员用如下方式调试HTTP请求—把鼠标停留在Visual Studio的某些变量上,查看十六进制形式的原始数据流,如图1-1所示。

图1-1

在过去几年,我编写了一些小工具,因此有信心实现一个使得Web调试变得简单的工具。最初的方案是基于已有的C++代理服务器,对其做些修改,从而可以把HTTP流输出到系统控制台,如图1-2所示。

图1-2

这种方案说它多差都不为过—这个代理无法处理安全数据流或认证协议。非文本形式的内容的显示也是个问题——可笑的是,该工具还会把二进制内容当成ASCII码显示。老式控制台用户可能还记得八进制的0x07代表的是字符“bell”,因此当控制台显示0x07时,系统就会发出声响。因此,这个调试代理发布后,由于测试人员使用时会遇到二进制数据流,Office Online团队的走廊就会不断响起像拉斯维加斯的赌场那样的声响。

虽然有烦人的缺陷,但这个工具还是很受欢迎,这激发我开始考虑下一个版本。我使用Borland Delphi快速实现了一个小演示程序,Borland Delphi是我当时工作时最常用的开发工具。其彩色UI界面是Fiddler的最终外观的基础,如图1-3所示。

图1-3

然而,在考虑了使用本地代码编写代理服务器所涉及的安全和内存管理问题后,我决定使用C#语言来实现新版本,该语言是由Visual Studio团队开发的,我一个很好的朋友加入了该团队。于我而言,通过.NET从零开始实现HTTP代理服务器面临两大挑战:一是我不是很了解HTTP是如何工作的;二是我不会用C#。

幸运的是,花钱买几本书,以及利用大量的周末闲余时间,我很快克服了这两个不足。其中有两本书是我的良师益友:《HTTP: The Definitive Guide》和《C# Cookbook》。通过一章章的学习,我了解了HTTP是如何工作,以及如何用C# .NET编程,也开始慢慢地实现Fiddler。大约半年后,我完成了Fiddler的第一个版本,如图1-4所示。

图1-4

同样,这个版本也存在很多不足(错误也是不计其数),但是同事们都积极采用了它,因为之前的版本不断地发出蜂鸣声,他们电脑的音箱都快崩溃了。

随后几年,Fiddler有了很大改进,它包含两个扩展模块,一是自动生成和修改响应的机制,二是支持加密的(HTTPS)数据流、FTP和HTML5 WebSockets。

历经九年以及无数次版本更新,Fiddler已经发展成一个强大的工具和平台,可以执行各种任务。它有一个可扩展性相当强大的模型,以及一个组件开发者社区,他们又进一步增强了Fiddler作为性能、安全和负载测试工具的价值。从过去几年的电子邮件咨询、在线讨论小组以及无数次的会议来看,大多数用户只是用到了Fiddler很少的一部分功能。我开始意识到如果有关于该工具的完整指南,很多用户可以更好地利用它。本书就是由此而来。

作为Fiddler的作者,我发现写这本书既简单又具有挑战性。其简单性在于我非常了解Fiddler,比如其底层实现,而且对于一些晦涩的细节查看源代码就可以了解。其挑战性在于每当我选择写某个有趣的场景或功能时,将迫使我对其进行深入的思考。通常情况下,我写着写着就“跑偏”了,转而写代码对Fiddler进行改进,改进之后,原来的主题通常只需要很少的篇幅来介绍甚至不再需要介绍。最后,我重写了本书的大部分内容和Fiddler工具本身。这个过程很漫长,但工具和书之间彼此也相得益彰。

本书的出版时间和Fiddler 2.4.0.0版本的发布时间基本一致,大致都在2012年初夏。如果你使用的是更高版本的Fiddler,你会发现一些细微差别,但其核心概念一致。

本书几乎涵盖了Fiddler和FiddlerCore的每个主题,但它不是关于HTTP、SSL、 HTML、Web Services或深入了解Fiddler所需的很多其他主题的教程。如果你想深入了解网络协议,我建议你查看以下资料,我在开发Fiddler的过程中一直在参考这些资料:

关于本书的阅读方式,你可以从头到尾阅读本书,也可以通过目录和索引来查找自己感兴趣的话题。我建议你阅读本书的所有章节,即使其中某些章节可能和你不相关,因为每章都包含了一些独有的建议和技巧。

我很推崇从下一节开始阅读,它介绍了一些术语和基础概念,可以帮助你更好地了解Fiddler以及本书。

希望你喜欢本书!

本节将介绍Fiddler的一些基础知识,这些内容可帮助你入门并为本书后续的学习奠定基础。

Fiddler是一款基于Windows系统的专用代理服务器软件。本地运行的程序,如Web浏览器、Office应用程序以及其他客户端应用,可以把HTTP和HTTPS请求发送给Fiddler,Fiddler通常把这些请求转发给Web服务器。然后,服务器把这些请求的响应返回给Fiddler,Fiddler再把这些响应转发给客户端。

几乎所有使用网络协议的程序都支持代理服务器,因此Fiddler几乎适用于所有应用。当启动Fiddler来捕获请求和响应时,Fiddler会自动注册为Windows Internet (WinINET)网络服务代理,并请求所有应用把请求发送给它,如图1-5所示。

图1-5

有些应用不会自动识别Windows网络配置,要想让Fiddler捕获其数据流,需要手工配置这些应用。也可以对Fiddler进行配置,使它能够支持更罕见的场景,包括服务器到服务器(如Web Services)和设备到服务器(如iPad或Windows手机)的数据流。默认情况下,Fiddler被设计成能够自动挂接到(chain to)先前已经部署的各种上游代理(upstream proxy),通过这种方式,Fiddler能够在已经使用了代理服务器的网络环境中正常工作。

Fiddler可以捕获所有的本地数据流,而且支持很多过滤器(filter)。这一特性使得用户既可以隐藏不感兴趣的数据流,也可以高亮显示(使用颜色或字体选项)感兴趣的数据流。过滤器的过滤条件可以是数据流的来源(如特定的客户端进程),也可以是数据流本身的某些特征(如该数据流所绑定的主机名或服务器返回内容的类型)。

Fiddler的扩展模型功能丰富,既有简单的FiddlerScript,也包含强大的功能插件(Extensions),这些扩展可以使用任意一种.NET语言来开发。Fiddler还支持几种特殊的扩展类型,其中最流行的是Inspector(稽查员)。顾名思义,Inspector的特点在于支持查看单个请求或响应。Inspector可以做成支持所有响应类型(如HexView Inspector),也可以定制为只支持特定类型(如JSON Inspector)。如果你是开发人员,可以通过类库FiddlerCore把Fiddler的核心代理引擎植入到自己的应用中。

Fiddler可以解密HTTPS数据流,使用“中间人(man-in-the-middle)”解密技术来显示和修改这些在网络上不可读的请求。要做到没有安全告警的无缝调试,可以把Fiddler的根证书(root certificate)安装到系统或Web浏览器的受信任的证书库中。

一个Web会话(Web Session)代表客户端和服务器之间的一个事务。Fiddler界面中左侧边栏的Web会话列表中的一个条目就是一个会话。一个会话对象包含一个请求和一个响应,分别表示客户端发送给服务器的数据以及服务器返回给客户端的数据。会话对象还会维护一组标志位(Flag),用于保存会话的元数据以及在处理该会话过程中记录的时间戳对象(Timer)。

代理服务器并非局限于查看网络流量——顾名思义,Fiddler这个名字的含义在于它可以“随意玩弄(fiddle)”发送出去的请求和接收进来的响应。可以设置请求或响应断点以手工修改数据流。到达设置的断点后,Fiddler会暂停会话,以便用户手工修改请求和响应。Fiddler还支持在其内部运行脚本或扩展来改写数据流。默认情况下,Fiddler是在缓冲模式(buffering mode)下工作的,即Fiddler是接收到服务器的完整响应之后才将响应的内容返回给客户端。如果启用流模式(streaming mode),Fiddler会将从服务器端接收到的响应立即返回给客户端。因此,流模式下不支持对服务器的响应进行修改。

Fiddler捕获的会话信息可以保存到会话归档(Session Archive Zip,SAZ)文件中,以方便后续查看。这种格式的压缩文件中包含了完整的请求和响应、标志位、时间戳对象以及其他元数据。非技术人员可以使用一个轻量级的捕获工具FiddlerCap来生成SAZ文件,再把这些文件提供给专业人员进行分析。Fiddler支持扩展组件Exporter,它支持把捕获到的会话以其他工具支持的格式来保存,从而保证了Fiddler和这些工具的互通性。同样,Fiddler也支持扩展组件Importer,它支持Fiddler加载以其他格式存储的数据流,包括很多浏览器开发工具所使用的HTTP Archive(HAR)格式。

我最经常遇到的一些问题类似于:“我可以使用Fiddler来完成<X>吗”?Fiddler适用于很多场景中。但是,对于一些场景,Fiddler是不合适的。绝大多数情况下,人们所使用的是Fiddler的少数几个功能。以下将简单说明Fiddler所适用以及不适用的场景。

Fiddler支持功能的不完整列表

Fiddler不支持功能的不完整列表

Fiddler是一个非常灵活的工具,但某些功能目前还不支持。

好了,完成了Fiddler的入门,接下来让我们一起深入探索它吧!

 译注:“中间人”这个说法是借用了网络上常见的“中间人攻击(Man-in-the-Middle Attack)”(参考http://baike.baidu.com/view/ 1531871.htm),指Fiddler在两台通信的计算机之间充当“中间人”角色。

 译注:TOR是专门防范对流量探嗅分析的软件项目。它通过由遍及全球的中继所组成的分布式网络转发通信,可以实现匿名访问网络。


相关图书

云原生测试实战
云原生测试实战
Kubernetes快速入门(第2版)
Kubernetes快速入门(第2版)
Kubernetes零基础实战
Kubernetes零基础实战
深入浅出Windows API程序设计:核心编程篇
深入浅出Windows API程序设计:核心编程篇
深入浅出Windows API程序设计:编程基础篇
深入浅出Windows API程序设计:编程基础篇
云原生技术中台:从分布式到云平台设计
云原生技术中台:从分布式到云平台设计

相关文章

相关课程