zoukankan      html  css  js  c++  java
  • fiddler note

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

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

    背景

    发现使用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文件。

  • 相关阅读:
    MySQL No Install zip安装方法
    xaml中绑定单例属性
    wpf 绑定ObservableCollection 的Count属性
    ItemsControl 使用Grid布局
    C# 读取oracle 中文乱码的解决方案
    wpf datagrid 行双击事件
    wpf鼠标捕获与控件交互——UIElement.CaptureMouse
    Mysql备份还原
    删除_desktop.ini病毒文件
    揭露【誉思云】打码软件的诈骗骗局!誉思云是骗人的,不要再浪费钱财!
  • 原文地址:https://www.cnblogs.com/eiguleo/p/4367456.html
Copyright © 2011-2022 走看看