《吐血整理》高级系列教程-吃透Fiddler抓包教程(36)-掌握Fiddler中Fiddler Script用法,你会有多牛逼-上篇
1.简介
Fiddler是一款强大的HTTP抓包工具,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大的帮助。Fiddler提供的功能基本上能满足大部分人的基本要求。但是如果我们需要一些更复杂,更便捷的方式的功能来支持我们的工作(比如同时对多个指定的会话设置端点,不带cookie发起会话等),那么Fiddler提供的功能就往往力不从心了,或者使用起来比较复杂。Fiddler提供了Jscript脚本,让我们随心所欲的改造Fiddler,实现一些其他更强大的功能。本文主要介绍的是通过编写Fiddler的Jscript脚本的方法来实现Fiddler功能的拓展。
2.准备篇
1.安装fiddler,http://fiddler2.com/get-fiddler。选择Fiddler2即可。
2.安装FiddlerScript editor,
http://fiddler2.com/docs/default-source/public-downloads/FiddlerSyntaxSetup.exe 这个低版本(比较老的版本,老古董老掉牙的Fiddler)需要自己安装,现在最新版本都已经集成到安装包中,不需要你自己安装了。
官网是这么说的:FiddlerScriptEditor is included in latest version of Telerik Fiddler and is not available as a separate download.(FiddlerScriptEditor 已经包含在最新版的 Fiddler 里面,不需要单独下载)。
Fiddler Script Editor 提供了语法高亮,以及智能提示的功能, 如下图所示:
3.简单了解一下Jscript。JScript 是一种解释型的、基于对象的脚本语言。与javascript比较相似。主要是方便你了解代码的意思。
http://doc.51windows.net/jscript5/?url=/jscript5/dir.htm (一个JScript学习网址)
3.工具篇
3.1Main函数
FiddlerScript 基于JScript.NET 语言。在Fiddler 中点击菜单“Rules > Customize Rules”打开FiddlerScript Editor 编辑器,在这里可以编写Fiddler Script 脚本,只要一保存,Fiddler 将会重新编译脚本并自动加载,如果加载成功,则会播放声音并在Fiddler 状态栏显示"CustomRules.js was loaded at <datetime>" 提示信息,如果编译失败,将会显示错误提示信息。
Main函数是在CustomRules.JS脚本被Fiddler调用时,最先执行的函数。在里面默认都有一个today变量,是获取时间的。在我们打开fiddler的时候,这下面就可以看到具体的内容。如下图所示:
Fiddler的状态栏会提示,CustomRules.js脚本被重新加载的时间。当每次CustomRules.js文件被更新时,Fiddler感知CustomRules.js被修改,并重新加载一次。那么该状态栏也会进行展示。
另外,可以点击Fiddler的菜单栏,Tools=>Reset Script也可以触发fiddler重新加载一次CustomRules.js脚本。
如果我们需要对http请求的请求包和返回包进行修改,那么就可以在OnBeforeRequest和OnBeforeResponse两个函数中进行操作,添加相应的Jscript代码来实现。具体实例在后面介绍。
3.2.FiddlerScript editor
1.点击fiddler的Rules--->Customize Rules--->Fiddler ScriptEditor,FiddlerScript editor工具就会自动的打开CustomRules.js文件。如果该文件是被其他编辑工具打开(如NotePad++),说明我们没有安装fiddlerScript Editor。那么我们需要按照安装一下该脚本编辑工具。
2.直接点击FiddlerScript页签,如下图所示:
这里之所以推荐使用FiddlerScript editor进行脚本的修改,是因为当Fiddler处于打开状态时,该工具会对我们编辑的Jscript进行语法检查。另外,该编辑工具也会根据相应的对象提示属于该对象的函数或成员变量供我们选择。这些都会大大的提高我们的编程效率。
当然,如果我们的编程能力足够强。我们也可以使用NotePad++进行开发,然后保存编辑即可。不过一旦由于语法错误,Fiddler会在运行的时候直接崩溃掉。
接下来我们先认识一下fiddlerScript Editor。界面如下图所示:
如果没有右边的类视图,我们可以点击FiddlerScript Editor菜单栏View,然后勾选上Class Exploer。类视图对我们的脚本编写提供了极大的变量,因为我们不知道,也不可能记得Fiddler提供了哪些对象和函数供我们使用,那么我们可以在开发的过程中,类视图中查找相应的函数。
4.开发篇
4.1增加菜单栏
我们可以对Fiddler的菜单栏进行改造,添加一些自己常使用的功能。下面举一个简单的示例,在菜单栏中增加一些常访问的网站。
增加以下代码,可以在Fiddler的菜单栏进行编辑。
Fiddler.QuickLinkMenu("&Links")
QuickLinkItem("FiddlerCore", "http://fiddler.wikidot.com/fiddlercore")
QuickLinkItem("百度","https://www.baidu.com")
QuickLinkItem("谷歌","https://www.google.com/")
public static function DoLinksMenu(sText: String, sAction: String){
Utilities.LaunchHyperlink(sAction);
}
Utilities对象里全是一些很有用的静态函数。
在文件中CustomRules.js增加了上面的代码后,然后进行保存。就可以看到fiddler的变化。增加了我们自己定义的菜单栏。然后我们点击baidu,就会发现。浏览器会自动访问百度网站。
4.2增加会话的Server IP的显示
如果我们的fiddler没有显示Server IP,那么我们使用Fiddler进行抓包的时候,就不知道该请求是从哪儿返回来的。Httpwatch是有显示server IP功能的,但是httpwatch只能用与IE浏览器。Fiddler确可以做到对任何程序发起的HTTP请求进行捕获(包括一些客户端程序)。
那么我们就可以在CustomRules.JS中添加如下代码即可。
//显示Server IP
public static BindUIColumn("Server IP",60)
function FillServerIpColumn1(oS:Session):String {
return oS.m_hostIP;
}
添加的位置在class Handlers中,如下图所示:
然后Ctrl+S或FiddlerScript Editor的File=>save进行保存。如果Fiddler是已经打开的话,我们会听到一声清脆的声音,表明编辑成功,没有语法错误。
就会发现有如下变化。增加了对http会话的服务器端的IP地址的显示。
提示:
1.在输入以上代码过程中,可以对Session类型的oS对象弹出数据成员或函数成员,我们可以进行选择。在这里我们选择m_hostIP变量即可。
2.我们在实现一些功能之前,就可以到类视图中查找出我们想要的函数。以上弹出的提示变量或函数。我们也可以在类视图中对应的类中找到。如Session类中,有如下变量及函数,如下图所示:
3.如果出现语法编辑错误,在保存时,会弹出错误提示框。提示框给出了出错的原因,我们只需根据相应的提示,进行修改即可。如下图所示:
4.可能我们在工作中临时增加了一些功能,对CustomRules.js文件进行了修改。但是在以后的fiddler使用过程中,不需要该功能。那么我们有两种方法解决:1,对CustomRules.js中增加的代码进行注释掉,2,删除掉fiddler按照目录下的CustomRules.js文件。然后重启Fiddler,Fiddler会采用最新版本的SampleRules.js生成该CustomRules.js文件。
我们可以采用以上类似的做法,增加如下代码,展示会话的请求方法。
public static BindUIColumn("Method", 60)
function FillMethodColumn(oS: Session): String {
return oS.RequestMethod;
}
4.3设置特色URL进行标注
4.3.1命令
1.?关键词:搜索文本
2.快速找到某个请求方式的所有请求
=get,找到所有get请求
=post,找到所有post请求
3.快速找到某个状态码的所有请求
=200 找到所有状态码为200的请求
=404 找到所有状态码为404的请求
4.@host:快速查找该host的接口
5.> < 某个数值:表示高亮所有尺寸大于或小于该数值的会话
4.3.2Jscript脚本
以上命令方式,只能一次性对包含一个特殊字符串的URL进行控制,也只能是字体变成粗体,命中的URL中也有大部分不是我们需要的。那么接下来介绍一种对多条CGI进行标注,且设置背景颜色以及字体颜色。
在CustomRules.JS文件中的OnBeforeRequest函数内(也可以在OnBeforeResponse内)输入以下代码:
if(oSession .uriContains( "showcart" )&&oSession.uriContains("cloud.tencent.com")){
oSession["ui-bold"]="red";
oSession["ui-color"]="red";
oSession["ui-backcolor"]="green";
} if(oSession .uriContains( "mod=event" )&&oSession.uriContains("cloud.tencent.com")){
oSession["ui-bold"]="red";//粗体
oSession["ui-color"]="red";//字体颜色
oSession["ui-backcolor"]="green";//背景颜色
}
其中红色字体标注的字符串就是URL中包含的字符串。通过两个字符串对一个会话进行更加精确的描述。大大提高了命中的URL的准确性。
具体的效果如下,可以看到我们希望的两条CGI请求都给用特色的颜色标注出来了,更加显眼明了。另外,可以同时对多条CGI进行特殊颜色的显示。
5.小结
宏哥觉得Fiddler的功能基本上都可以通过Fiddler Script来实现的,网速限制前边已经讲解了这里就不赘述了。好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢你耐心地阅读!!!
6.拓展
Fidder顶部黄色告警提示 “The system proxy was changed,click to reenable fiddler capture”。如果我们点击出现黄色弹框提示,弹框提示会自动消失,但是过一会还是会出现,看着很烦不舒服。所以宏哥上网查询相关资料并一一排查,最终找到以下几个原因:
1.电脑上安装了银联控件导致的,解决办法就是:直接去卸载掉,然后重启fiddler就可以了!记住一定要卸载干净,注册表也要删掉,不然会fiddler还是会有提示的。
2.电脑开启了防火墙或者是VPN。解决办法:将本机的vpn或者是防火墙关闭,然后重启一下fiddler就好啦。
3.拨号和虚拟专用网络设置下面框中有不用的代理服务器。解决办法:
① 可以点击fiddler里的Tools–>WinINET Options 进到Internet属性对话框
② 将拨号和虚拟专用网络设置下面框中不用的代理服务器删除
③ 点击确定。重启fiddle,问题便可解决。如下图所示:
4.进入到Fiddler–>Rules–>Customize Rules在main()方法上方添加如下代码:
static function DoReattach(o: Object, ea: EventArgs){
ScheduledTasks.ScheduleWork(“reattach”, 1000, innerReattach);
}
static function innerReattach(){
FiddlerApplication.UI.actAttachProxy();
}
static function OnRetire()、{
FiddlerApplication.oProxy.remove_DetachedUnexpectedly(DoReattach);
}
如下图所示:
2.在main()方法中添加如下代码:
FiddlerApplication.oProxy.add_DetachedUnexpectedly(DoReattach);
如下图所示:
《吐血整理》高级系列教程-吃透Fiddler抓包教程(36)-掌握Fiddler中Fiddler Script用法,你会有多牛逼-上篇的更多相关文章
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(34)-Fiddler如何抓取微信小程序的包-上篇
1.简介 有些小伙伴或者是童鞋们说小程序抓不到包,该怎么办了???其实苹果手机如果按照宏哥前边的抓取APP包的设置方式设置好了,应该可以轻松就抓到包了.那么安卓手机小程序就比较困难,不是那么友好了.所 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(23)-Fiddler如何优雅地在正式和测试环境之间来回切换-上篇
1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(31)-Fiddler如何抓取Android系统中Flutter应用程序的包
1.简介 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.Flutter应用程序是用Dart编写的,这是一种由Google在7年多前创建的语言.Flut ...
- 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
1.前言 今天的理性认识主要就是讲解和分享Fiddler的一些理论基础知识.其实这部分也没有什么,主要是给小伙伴或者童鞋们讲一些实际工作中的场景,然后隆重推出我们的猪脚(主角)-Fiddler. 1. ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(9)-Fiddler如何设置捕获Https会话
1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议,不像前十几年前直接是http协议直接裸奔在互联网.还有的小伙伴或者童鞋们按照上一篇宏哥的配置都配置好了,想大展身手抓一下百度的包, ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(10)-Fiddler如何设置捕获Firefox浏览器的Https会话
1.简介 经过上一篇对Fiddler的配置后,绝大多数的Https的会话,我们可以成功捕获抓取到,但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话,需要我们更进一步的配置才能捕获到会 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(11)-Fiddler设置安卓手机抓包,不会可是万万不行的!
1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Fiddler能截获 Android 和 Windows Phone 等 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(12)-Fiddler设置IOS手机抓包,你知多少???
1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Fiddler 能捕获Android 和 Windows Phone 等 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(16)-Fiddler如何充当第三者,再识AutoResponder标签-上篇
1.简介 Fiddler充当第三者,主要是通过AutoResponder标签在客户端和服务端之间,Fiddler抓包,然后改包,最后发送.AutoResponder这个功能可以算的上是Fiddler最 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(21)-如何使用Fiddler生成Jmeter脚本-上篇
1.简介 通过跟随宏哥的脚步学习宏哥的Jmeter系列文章,.我们知道Jmeter本身可以录制脚本,也可以通过BadBoy,BlazeMeter等工具进行录制,其实Fiddler也可以录制Jmter脚 ...
随机推荐
- 项目的依赖包(node_modules)删除
快速删除依赖包一共分为三部 1.打开命令行(管理员身份),执行 npm i -g npkill 2.cd 进入到想删除的项目中,执行 npkill 3.执行完成会进入到npkill页面,等待搜索完成, ...
- count(*), count(1), count(列名)的区别
1.从结果上来看 count(1)和count(*)之间没有区别,因为count(*)count(1)都不会去过滤空值,但count(列名)就有区别了,因为count(列名)会去过滤空值. 2.从执行 ...
- Spring的自动装配和注解
Bean的自动装配 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring的自动装配需要从两个角度来实现,或 ...
- LeetCode------两数之和(3)【数组】
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 ...
- 亚马逊云 RDB数据故障转移(多可用区)
RDB关系数据库(Relational Database,RDB) 创建名为VPC for RDS的vpc 两个可用区,两组公内网 创建安全组 创建RDS数据库实例用的数据库子网组 创建RDS数据库实 ...
- React动画实现方案之 Framer Motion,让你的页面“自己”动起来
前言 相信很多前端同学都或多或少和动画打过交道.有的时候是产品想要的过度效果:有的时候是UI想要的酷炫动画.但是有没有人考虑过,是不是我们的页面上面的每一次变化,都可以像是自然而然的变化:是不是每一次 ...
- ATT&CK框架整理(中英文整理)
工作需要了解了一下ATT&CK框架,留个记录.
- Java多线程-线程关键字(二)
Java中和线程相关的关键字就两:volatile和synchronized. volatile以前用得较少,以后会用得更少(后面解释).它是一种非常轻量级的同步机制,它的三大特性是: 1.保证可见性 ...
- LoadRunner11脚本关联+运行负载+分析结果
一.脚本创建关联和插入检查点 脚本录制完成后,首先需运行脚本回放,验证是否可回放成功,然后找出各事务请求中的关联点! 如本例子中,录制的场景为:打开综合窗口收件-->查询事项-->窗口登记 ...
- Linux 挂载Windows共享文件夹和NAS存储
summary: [Linux 挂载共享存储] 概述 将Windows共享文件夹和NAS存储挂载至Linux. Linux系统环境:CentOS 挂载共享存储 查看外部主机共享了哪些目录 smbcli ...