Fiddler如何替换请求的域名

在开发过程当中,经常用到 Fiddler对数据进行抓包,Fiddler有个非常好的功能,就是可以把自己机器设置成一个http代理服务器,这样手机就可以通过此代理上网,从而达到抓包的目的。

因为Fiddler是Windows的桌面软件,而我使用的是linux,所以用不了。之前也用过squid来做http代理功能,而的抓包就交给 wireshark 或用命令行 ngrep,目的可以达到,但是真心没有 Fiddler好用。

于是没办法,在虚拟机的windows里面装上Fiddler,然后设置Virtualbox,重定向一个端口到虚拟机中。比如主机IP为 192.168.2.204,虚拟机IP就不用说了,想通过主机的 8888 商品访问到虚拟机里面的 8888 端口,而虚拟机中的 Fiddler设置的代理服务器端口也是 8888(在选项->连接里面配置),只要设置一下 Virtualbox中的网络配置就好,端口转发中主机端口和子系统端口都填8888,然后IP不用填,如图:

在抓包过程当中,遇到一个实际问题。有时候为了调试方便,需要将线上的服务定位到内网。比如我们线上的服务器域名为 api.ooxx.com。而内网的用于调试的服务器域名为 test.ooxx.com,那么就需要将所有域名 api.ooxx.com替换为 test.ooxx.com,上网查了一下,通过修改Fiddler的脚本文件可以实现。

Fiddler菜单中,Rules->Custon Rules,或按Ctrl+R键,编辑 CustomRules.js 代码文件,在OnBeforeRequest函数里面加上几句代码:


    static function OnBeforeRequest(oSession: Session) {

	if (oSession.HostnameIs("api.ooxx.com")) {
            oSession.hostname="test.ooxx.com";
        }
        ..........
    }

这样就可以了,抓包后就发现所有 api.ooxx.com都变成了 test.ooxx.com。