一晚上终于找到对的东西,作者很专业,这里作为笔记,想学习好东西还是到作者那里^_^

-----------------------------------------------------------

背景

发现使用Fiddler进行抓包时有一部分请求总是没抓到,查看了一下源代码,发现使用WinINET这套API发送的请求都能正常抓到,而使用WinHTTP这套API发送的请求都没有抓到,遂搜索了一下,果然前人们早已给出答案,解决方案原文可以参看Fiddler作者Eric Lawrence大神的一篇博客Using Fiddler with WinHTTP,博客里表示Fiddler对各种HTTP(s) stacks都是能支持的,只是默认启动时只是接管了WinINET代理设置。

Eric的那篇博客里已经列出了相关的方法和代码,本文只是对其略做改进,让同一段代码可以适配不同的Windows版本。

分析

我们需要让Fiddler抓取WinHTTP的包时,要做的就是让WinHTTP的代理设置改为与WinINET一致,因为WinINET在Fiddler启动后使用Fiddler作为代理。这些通过Windows自带命令就可以做到:

  • 在XP下:
    proxycfg -u

  • 在Win7下(使用管理员权限的命令行):
    netsh winhttp import proxy ie
    注:在Win7 64位系统下需要将System32目录和SysWOW64目录下的netsh命令各执行一次,下方将给出的脚本已覆盖这种情况。

但是如果使用频繁,每次都还要去手动敲命令行还是挺痛苦的,作为能偷懒的地方绝不多放过的少年,一劳永逸的方法当然是让它随Fiddler的启动与关闭自动执行这些命令(当然这就是Eric的博客里讲述的方法)。

实现

这可以通过修改CustomRules.js实现(如果想对Fiddler的扩展机制进行深入了解可以去参阅Fiddler官网的文档)。

操作方法:
打开Fiddler > 点击菜单Rules > 点击Customize Rules...

然后就打开了CustomRules.js文件,寻找到OnAttachOnDetach函数,可以将Fiddler启动后与关闭前需要定制的一些自动动作分别填写在它们里头,我们为实现让Fiddler能抓取WinHTTP发送的请求的目的而修改后的代码如下,添加了UpdateWinHTTPSettings函数,在OnAttachOnDetach里添加了对它的调用,修改完后保存即可生效。

static function OnAttach() {
UpdateWinHTTPSettings();
}
static function OnDetach() {
UpdateWinHTTPSettings();
}
static function UpdateWinHTTPSettings() {
var oPSI: System.Diagnostics.ProcessStartInfo
= new System.Diagnostics.ProcessStartInfo();
var os : OperatingSystem = Environment.OSVersion;
if (os.Version.Major >= 6) {
oPSI.UseShellExecute = true;
oPSI.FileName = "netsh.exe";
oPSI.Verb = "runas";
oPSI.Arguments = "winhttp import proxy ie";
System.Diagnostics.Process.Start(oPSI);
// Re-run 32bit version
oPSI.FileName = oPSI.FileName =
Environment.SystemDirectory.Replace("system32", "syswow64")
+ "\\netsh.exe";
if (System.IO.File.Exists(oPSI.FileName)) {
System.Diagnostics.Process.Start(oPSI);
}
}
else {
oPSI.UseShellExecute = true;
oPSI.FileName = "proxycfg.exe";
oPSI.Verb = "open";
oPSI.Arguments = "-u";
System.Diagnostics.Process.Start(oPSI);
}
}

UpdateWinHTTPSettings函数里做的事情其实很简单,就是使用管理员权限执行文章前面说到的命令。

附注

我使用的完整最新的CustomRules.js文件我上传到了一个Gist里,详见:https://gist.github.com/mzlogin/3c5f9781c5bedff3fcfb,如果想直接使用可以复制脚本内容后放置到“我的文档/Fiddler 2/Scripts/CustomRules.js”,也可以在此目录下使用git抓取我的最新定制js文件。

fiddler note的更多相关文章

  1. 抓包工具fiddler

    具体的可以看这个链接,后来补充了些东西,cnblog复制图片太麻烦了 http://note.youdao.com/yws/public/redirect/share?id=37f8556270b44 ...

  2. Fiddler源代码分享

    frmViewer.cs: namespace Fiddler{    using Microsoft.Win32;    using System;    using System.Collecti ...

  3. Fiddler高级技巧 - 映射路径到本地文件夹

    适用场景: 你是前端开发人员,要开发一个小模块,需要用到线上的环境(账号.数据.跨域等),但你又没有权限往线上传文件 你是移动测试人员,需要将一组接口的返回结果替换为另一组,最简单的办法就是使用Fid ...

  4. 使用tcpdump+Wireshark(或Fiddler)做linux服务器的网络请求分析

    我们的服务器上,一般都没有窗口界面,这时候要抓包,用tcpdump是最方便的.而分析网络请求时,wireshark又是相当方便的,这时候我们就需要把它们两个一起来使用了. tcpdump 抓取数据 命 ...

  5. Debug / Inspect WebSocket traffic with Fiddler【转】

    Introduction I have recently written a project using SignalR, which supports HTML 5 WebSocket.  Howe ...

  6. FreeHttp (a fiddler add in to temper the http)

    introduction FreeHttp is a Fiddler plugin. With FreeHttp you can modify the request or response mess ...

  7. FIDDLER的使用方法及技巧总结

    转自: https://www.cnblogs.com/ink-marks/p/6363275.html 一.FIDDLER快速入门及使用场景 Fiddler的官方网站:http://www.fidd ...

  8. how to use fiddler and wireshark to decrypt ssl

    原文地址: http://security14.blogspot.jp/2010/07/how-to-use-fiddler-and-wireshark-to.html Requirements2 C ...

  9. 为什么有的需要安全连接的的application只有开Fiddler才好用?

      Help! Running Fiddler Fixes My App??? Over the years, the most interesting class of support reques ...

随机推荐

  1. 每日英語2013.09.09(Email常用單字)

    carbon copy 副本抄送 forward 轉交;轉寄(+to) Please check the file carried by this email for the details.細節請看 ...

  2. 基于Solr的HBase多条件查询测试

    背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级 的快 速检索,对于多字段的组合查询却无能为力.针对HBa ...

  3. nginx“虚拟目录”不支持php的解决办法

    这几天在配置Nginx,PHP用FastCGI,想装一个phpMyAdmin管理数据库,phpMyAdmin不想放在网站根目录 下,这样不容易和网站应用混在一起,这样phpMyAdmin的目录就放在别 ...

  4. spring security使用数据库管理用户权限

    <authentication-provider> <user-service> <user name="admin" password=" ...

  5. java动态编译类文件并加载到内存中

    如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270 ...

  6. javascript中的删除方法

    可能呢再开发的过程中呢使用的不是很多,但是碰上呢可以注意下 1.比如: var x = 10; delete x; console.log(x); 结果是多少,是10,不是异常也不是undefined ...

  7. 实时输出TextField中内容

    要想实时输出TextField中内容,要找到textField内容发现改变就会调用的函数,即 - (BOOL)textField:(UITextField *)textField shouldChan ...

  8. 详解 Python 中的下划线命名规则

    在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单 ...

  9. Empire C:Basic 1

    一.首先,从一个C程序开始: ///Name:Hello World ///Author:JA ///Date:2015-2-4 #include <stdio.h> //包含标准库的信息 ...

  10. ThinkPHP 3.2.3 Widget 扩展的使用

    ThinkPHP3.2.3 手册中 Widget 扩展的地址是: http://www.kancloud.cn/manual/thinkphp/1862 Widget 扩展一般用于页面组件的扩展,和自 ...