链接:http://my.oschina.net/leejun2005/blog/151103
1、原理简介:
Fiddler 是目前最强大最好用的 Web 调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置 CGI 请求的断点,甚至修改输入输出数据。同类的工具还有httpwatch,firebug,wireshark,google审查元素。与这些基于网页浏览器的工具不同,fiddler是一个富客户端桌面工具,不仅能监听浏览器对网页的请求和对浏览器的响应(http和https请求),而且可以监听其他程序(比如java桌面应用)的http请求(当然需要额外的设置,在此不赘述)。另外,值得一提的是,即便在浏览器的调试中,它也能胜任其他工具,比如IE浏览器,当我们需要弹出一个模式对话框(modalDialog)时,这些浏览器监听插件就派不上用场了,还得fiddler出场。如果你还未曾听说过这个工具,请先阅读这篇科普文:《WEB 调试利器:Fiddler 教程》
fiddler 和常见的底层抓包(网卡) 工具不一样(如 wincap、wireshark),它是在 web server 和 web browser 之间搭了一层 proxy,所有的请求都会经过它,如下图所示:
fiddler在客户浏览器及web服务器之间充当了一个请求及响应的代理角色,它会在本地建立一个默认代理服务,端口为8888,为此我们访问一下此端口,可见如下效果:
2、一些常用技巧介绍:
(1)Fiddler中设置断点修改Request
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->Before Requests(这种方法会中断所有的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpu
(2)Fiddler中设置断点修改Response
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->After Response (这种方法会中断所有的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpafter www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpafter,
(3)自动重定向 AutoResponder 到本地文件
创建重定向规则,例如将目标请求是这个js的HTTP请求重定向到本地文件
请参考阿里 UED 的这篇:使用Fiddler提高前端工作效率 (实例篇)
http://www.aliued.cn/2010/04/25/use-fiddler-to-improve-efficiency-of-front-development-example.html
(4)过滤会话 session list filter:
比如你可能在debug某些网页时,会遇到上百个请求,看的你眼花缭乱,这是你可以启用 fiddler 强大的过滤机制,还可以依据正则来过滤,
如: REGEX:(empty.js.gif|__utm.gif) ,
具体你可以参考:
http://fiddler2.com/documentation/KnowledgeBase/Filters,
例如:
(5)请求构建器(Request Builder)、对两个数据流进行比较
(6)文本编码和解码:开启Tools -> Text Encode/Decode
(7)模拟user-agent:Rules->Customize Rules、模拟慢速网络
(8)fiddler 打印 cgi log:
http://my.oschina.net/leejun2005/blog/65259
(9)fiddler-使用技巧:
http://vdisk.weibo.com/s/CcitC7ClCn_vr
http://vdisk.weibo.com/s/CcitC7ClCopIM
(10)FiddlerScript:
http://fiddler2.com/blog/blog/2013/07/15/understanding-fiddlerscript
(11)Filters Reference:
http://fiddler2.com/documentation/KnowledgeBase/Filters
(12)自定义列:Add Columns to the Web Sessions List:
可以看上图的蓝色方框就是自定义列
http://fiddler2.com/documentation/KnowledgeBase/FiddlerScript/AddColumns
举个栗子:
在 rule规则脚本的 static function Main() 函数中添加 3 列:远程ip、referer、ReturnedCookie
// The Main() function runs everytime your FiddlerScript compiles
static function Main() {
var today: Date = new Date();
FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today;
FiddlerObject.UI.lvSessions.AddBoundColumn("remoteIP", 200, "X-HOSTIP");
FiddlerObject.UI.lvSessions.AddBoundColumn("Referer", 200, "@request.Referer");
FiddlerObject.UI.lvSessions.AddBoundColumn("ReturnedCookie", 200, "@response.Set-Cookie");
// Uncomment to add a "Server" column containing the response "Server" header, if present
// UI.lvSessions.AddBoundColumn("Server", 50, "@response.server");
// Uncomment to add a global hotkey (Win+G) that invokes the ExecAction method below...
// UI.RegisterCustomHotkey(HotkeyModifiers.Windows, Keys.G, "screenshot");
}
(13)常用fiddler命令:
选择类:?text、>size、<size、=status、@host、
blod text、select、allbut、keeponly
断点类:bpafter、bps、bpv、bpm、bpu
控制类:hide、start、stop、show、quit
其他:cls/clear、dump、g/go、help、urlreplace
例如:?text 高亮选中会话后,shift + delete 即可反选删除,这样就过滤除了你要的 session 请求。
http://fiddler2.com/documentation/KnowledgeBase/QuickExec
3、注意的问题及解决方法
(1)chrome和firefox浏览器无法被监听
fiddler安装之后,默认会在IE浏览器中安装一个fiddler的插件,所以它对IE及国内基于IE内核的各类浏览器都能实现监听,但其他内核的浏览器无法被监听。
解决办法:禁用chrome和firefox中具有代理功能的插件,比如我的chrome安装了switchSharp,禁用它或选择“使用系统代理设置”,或在switchSharp中新配置一个代理项(比如名为fiddler,用于指向代理127.0.0.1,端口8888,如下图),即可实现监听。
(2)无法代理本地web服务器的访问请求
使用fiddler的时候,我们更多的是基于本地程序的调试,可惜fiddler捕捉不了本地(localhost或127.0.0.1)的http请求。难道fiddler就束手无策了吗?当然不是。
一般我们访问安装在本地的服务器程序时,使用的localhost或127.0.0.1,默认会绕过代理,直接访问目标服务器,通过fiddler特有的请求方式,可以使本地请求及响应都被fiddler拦截。
方法一:在localhost后增加.fiddler
比如请求http://localhost:8080改为http://localhost.fiddler:8080即可
方法二:更简单,在localhost或127.0.0.1后增加一个点即可
比如http://localhost.:8080
具体请参考:http://www.ichatter.cn/2013/06/19/666/
(3)Fiddler不能监听Java HttpURLConnection请求,请看:
http://www.cnblogs.com/tt-0411/archive/2012/03/18/2404355.html
http://stackoverflow.com/questions/8549749/how-to-capture-https-with-fiddler-in-java
(4)Fiddler 不能监听、捕获 python urllib2 proxy、ProxyHandler 的问题:
In Fiddler2, go to the page Tools->Fiddler Options ...->Connections, remove the trailing semicolon from the value in the "IE should bypass Fiddler for ..." field and restart Fiddler2.
http://stackoverflow.com/questions/7681305/fiddler-does-not-capture-my-scripts-requests
也就是说,去掉 <-loopback> 后面的那个分号,保存然后重启你的 fiddler 即可。
4、其它
为什么想来总结一下呢,是因为最近有个测试需求,需要检测某个网页指定的 url 请求个数,Fiddler 虽然可以,但是需要人工进行,想了想准备用 JPCAP 然后封装个浏览器内核试试,做成一个自动化的工具。
JPCAP 简介:
众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP等系统。JPCAP的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的typedef struct _ADAPTERADAPTER,getDeviceList()对应pcap_findalldevs()等等。 使用 JPCAP 实现监听利用的是所谓的“ARP欺骗”技术。具体请参考:
http://fulong258.blog.163.com/blog/static/17895044200801145924745/
最后谈谈Java里面连接操作系统网络协议栈的API。
下表显示了网络层标准的开放系统互连(OSI)模型。
# |
层 |
协议 |
Java SDK的核心APIs |
7. |
应用层 |
HTTP、FTP、SSL等 |
java.net.HttpURLConnection、javax.servlet.HttpServlet |
6. |
表示层 |
# 在Java里,OSI应用层和表示层没有真正区别 |
|
5. |
会话层 |
NetBios、RCP |
# Java SDK核心对OSI会话层没有支持 |
4. |
传输层 |
TCP、UDP |
java.net.Socket、java.net.ServerSocket、java.net.Datagram |
3. |
网络层 |
IP |
Java.net.InetAddress |
2. |
数据链路层 |
PPP |
# Java SDK核心对OSI数据链路层没有支持 |
1. |
物理层 |
以太网、InfiniBand |
# Java SDK核心对OSI物理层没有支持 不过…… 现在有了Java 7 SDP(VM连接InfiniBand和java.net.*、java.io.*核心APIs的桥梁)
|
Java 7 SDP:Java套接字直接协议——直接访问OSI第一层物理层,请参考:
http://www.infoq.com/cn/articles/Java-7-Sockets-Direct-Protocol
5、推荐阅读:
(1)基于fiddler来模拟限速
http://blogread.cn/it/article/4540?f=wb
(2)Fiddler (二) Script 用法
http://www.cnblogs.com/tankxiao/archive/2012/04/25/2349049.html
(3)Fiddler的高级用法-Fiddler Script
(4)Fiddler ScriptSamples
http://fiddlerbook.com/Fiddler/dev/ScriptSamples.asp
(5)fiddlerscript addcolumns
http://docs.telerik.com/fiddler/knowledgebase/fiddlerscript/addcolumns/
相关推荐
Fiddler作为一款强大的HTTP代理服务器,被广大开发者誉为"web调试利器",它能够帮助我们深入理解网络请求的过程,从而进行精确的问题定位和优化。Fiddler的核心功能包括HTTP监控、请求修改、响应设定等,对于前端、...
**Fiddler——Web调试利器** Fiddler是一款强大的Web调试工具,由Telerik公司开发,主要用于捕获、分析和修改HTTP(S)通信数据。它能够帮助开发者、测试人员以及网络安全专家深入理解网络流量,从而解决网页应用的...
Fiddler 是一款免费的记录HTTP(S)通信的代理,支持监察请求和响应、设置断点,以及修改输入输出数据。
Debugging with Fiddler 2012 (英文版 Eric Lawrence 亚马逊5星 热评 畅销书) 网络编程 Web服务开发调试利器 亚马逊11个客户全部评5星,热评畅销书。 Web Services 开发必备。
**Fiddler是一款强大的网络封包分析工具,尤其在JavaScript开发中,对于前端开发者来说,它是一个不可或缺的调试利器。本文将深入探讨如何利用自定义的Fiddler规则实现多环境切换,解决跨域开发问题,并高效地进行...
《Fiddler Web Debugger——网络调试利器》 Fiddler Web Debugger是一款强大的网络抓包工具,主要用于HTTP/HTTPS协议的调试。它的版本号为5.0.20192.25092,特别推出了中文版,使得国内用户在使用过程中能够更加...
《Fiddler for Linux:网络调试利器的跨平台探索》 在IT行业中,网络调试是开发者和运维人员日常工作中不可或缺的一部分。Fiddler,这款由Telerik开发的强大HTTP抓包工具,一直以来以其易用性和全面的功能深受...
它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。 既然是代理,...
它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。 既然是代理,也...
**Fiddler中文版——网络调试利器** Fiddler是一款强大的网络调试工具,它能够捕获HTTP/HTTPS协议的网络流量,帮助开发者、测试人员以及普通用户深入理解网络交互过程,排查网页加载问题,优化应用性能。Fiddler...
这些特性使Fiddler2成为一个全方位的网络调试利器。 **七、1Fiddler2文件** 压缩包中的"1Fiddler2"文件可能包含的是Fiddler2的安装程序或者相关配置文件。对于初学者,可以通过安装这个文件来开始使用Fiddler2;...
《Fiddler 4.6:网络调试利器的深度解析》 Fiddler,这款强大的HTTP代理服务器,是Web开发者不可或缺的工具之一。它能够记录并解析所有HTTP通信,帮助我们深入了解网页应用的工作原理,排查网络问题。本文将围绕...
这使得FiddlerCore成为一个强大的网络工具,不仅适用于常规的Web开发,也适用于物联网(IoT)、移动应用、游戏等领域的网络调试。 总的来说,“FiddlerCore4.7z”压缩包提供了一套完整的工具集,让开发者能够深入理解...
《fiddler5.0:网络调试利器的深度解析》 fiddler5.0,作为一款备受开发者青睐的网络调试工具,它以其强大的功能和易用性在软件/插件领域占据了重要的地位。本文将深入探讨fiddler5.0的安装过程以及其核心功能,...
总的来说,FiddlerCore4.5的修改版是C#开发者在网络调试工具领域的一把利器,它克服了原版的一些限制,使得开发者能够更加高效地进行网络流量的监控和分析。无论是在开发过程中定位问题,还是在产品上线后进行性能...
Fiddler2和Fiddler4是两款强大的Web调试工具,主要用于捕获和分析HTTP/HTTPS网络通信。它们由Telerik公司开发,是开发者、测试人员以及网络管理员进行网页性能优化、问题排查和安全审查的必备工具。Fiddler2是早期...
它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。
《Fiddler4_4.6.2.0:网络调试利器详解》 Fiddler4,版本号4.6.2.0,是Web调试工具的翘楚,以其强大的功能和易用性赢得了广大开发者和测试人员的喜爱。这个安装包(fiddler4_4.6.2.0_setup.1453708442.exe)包含了...
它由Microsoft开发并提供,是.NET Framework平台上的一个免费应用,对于软件开发者,尤其是Web应用开发者而言,是不可或缺的调试利器。 Fiddler的核心功能在于拦截和记录HTTP/HTTPS协议的网络请求。通过它,开发者...
它对于开发者、测试人员和网络安全专家来说是必不可少的工具,可以帮助他们理解、调试和优化Web应用程序。下面我们将深入探讨Fiddler的核心功能和使用方法。 **一、Fiddler的基础知识** 1. **HTTP代理**:Fiddler...