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

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

背景

发现使用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. BZOJ2322: [BeiJing2011]梦想封印

    Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantasy Seal)的特技,需要引入如下的概念: 每一位魔法的 ...

  2. js小效果-双色球

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  3. memcache 缓存失效问题(转)

    在大并发的场合,当cache失效时,大量并发同时取不到cache,会同一瞬间去访问db并回设cache,可能会给系统带来潜在的超负荷风险. 解决方法 方法一 在load db之前先add一个mutex ...

  4. WinForm 快捷键设置(转载)

    1.Alt+*(按钮快捷键) 按钮快捷键也为最常用快捷键,其设置也故为简单.在大家给button.label.menuStrip等其他控件的Text属性指定名称时,在其后面加上‘&’然后在加上 ...

  5. 关于Autoit上传文件的问题

    Autoit上传文件需要安装两个软件: 使用这个做文件上传时:在代码中需要添加的代码如下: Runtime.getRuntime().exec("d:/zhpg.exe"); D盘 ...

  6. 设备像素比devicePixelRatio简单介绍

    本文所说devicePixelRatio其实指的是window.devicePixelRatio, 被所有WebKit浏览器以及Opera所支持,随着显示器的发展,这个属性也慢慢登上了前端技术的舞台. ...

  7. Oracle常用命令(持续更新)

    --1.解锁用户 alter user 用户名 account unlock; --2.开启最小补充日志记录(执行的DML操作会被记录下来)  alter database add supplemen ...

  8. php读取指定结束指针文件内容

    fopen操作时文件读取开始指针位于文件开始部分, fseek 以指定文件大小以及开始指针位置确定结束指针位置 具体案例: <?php//打开文件流,fopen不会把文件整个加载到内存$f = ...

  9. Maven详解之聚合与继承

    说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...

  10. 第七周PSP

    团队项目PSP 一:表格     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 8:20 10:34 20 58 68 分析与 ...