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

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

背景

发现使用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. js 性能基准测试工具-告别可能、也许、大概这样更快更省

    平时写js经常遇到这样做是不是更快点?但又没有具体简单可测试的工具,最近也倒序看博客园司徒正美 js分类下的文章 [ps:去年灵光一闪,发现看博客园排名前100的博客.按照文章分类倒序看是学习最快的方 ...

  2. 【BZOJ1677】[Usaco2005 Jan]Sumsets 求和 递推

    ... #include <iostream> using namespace std; ]; int n,i; int main() { cin>>n; f[]=; ;i&l ...

  3. Java_动态加载类(英文)

    It is possible to load and reload classes at runtime in Java, though it is not as straightforward as ...

  4. 关于VSS上的项目源码管理的注意问题

    1.将项目添加到vss上面去 如果项目取的名字没有问题,则不需要去vss上面去新建项目,直接在解决方案那里右击“添加到vss”中,把第一个输入框中的名字(xxxx.root)全部清除掉.确定即可. 2 ...

  5. C#进程操作

    C#进程操作 转:http://www.cnblogs.com/vienna/p/3560804.html 一.C#关闭word进程  foreach (System.Diagnostics.Proc ...

  6. 相邻div实现一个跟着另一个自适应高度示例代码

    方法一: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> < ...

  7. java pio项目使用

    一.简介 pio是apache的一个针对microsoft office的一个开源项目. Apache POI - the Java API for Microsoft Documents 官网地址: ...

  8. django前端到后端一次简单完整的请求实例

    请求过程: 用户请求---〉django的路由系统---〉根据url不同分发到不同的views函数做对应处理----〉返回html格式的字符串(需要动态请求的到数据库里面拿到数据迁入到html文件中) ...

  9. JAVA 线程同步异步简单实例

    package test; public class testThread { public static void main(String[] args) { Example example = n ...

  10. 已知一个日期和天数, 求多少天后的日期(是那个超时代码的AC版)

    #include <stdio.h> #include <string.h> ; int judge_year(int x) { == || x % == && ...