本文涵盖fiddler抓包工具的工作原理、界面介绍、一些使用技巧和常用功能。
一、工作原理
①通过代理的方式获取程序http通讯的数据,用来检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求。fiddler启动时,会自动将代理设置到127.0.0.1,端口设为8888。
②支持监视、设置断点、修改输入输出数据等功能
③可以使用.net框架语言扩展编写脚本。
④fiddler官方帮助文档:在fiddler的命令窗口中输入help 命令,打开http://fiddler2.com/fiddler/help/quickexec.asp
二、界面介绍
2.1界面组成
fiddler的界面包括菜单栏,工具栏,会话列表(即数据流列表),请求显示栏,返回显示栏以及命令行窗口几部分。
2.2会话列表表头
Result:http服务器的返回代码,例如200,404,502等等
Protocol:使用的协议,fiddler只能筛选http和https协议
Host:返回的服务器的域名
URL:返回的服务器的url
Body:返回的数据的大小(如果为0,说明有cache)
Caching:缓存的状态和有效时间
Content-Type:返回的代码的内容
Process:本地发起连接的程序进程
三、一些使用技巧
3.1快捷键的使用
ctrl+f:查找会话
ctrl+h:查看会话的头部(Inspector--Header)
ctrl+t:查看会话的文本(Inspector--TextView)
ctrl+up:查看上一条会话
ctrl+down:查看下一条会话
ctrl+x:清屏
ctrl+a:选择所有会话
ctrl+i:把当前选择的会话的url插入到命令行中
r:重新发送请求(貌似不是真发了请求)
3.2命令行操作
help:打开官方的使用页面介绍,所有的命令都会列出来
cls:清屏,或者使用快捷键ctrl+x
bpu+域名:截获请求
bpu:停止截获请求
bpafter+域名:截获返回
bparter:停止截获返回
3.3解决response乱码
response乱码可能是因为HTML被压缩了,没有解压缩,也可能是解压缩后使用的字体不对。还有一种现象是下载的图片在ImageView无法查看,解决方法如下:
①如果在Response Raw上方有"Response is encoded any may need to be decoded before inspection. click here to transform"提示,点击该提示。
②选中工具栏中的“Decode”,这样会自动解压缩。
③在注册表HKEY_CURRENT_USER\Software\Microsoft\Fiddler2中添加一个字符串变量HeaderEncoding=GB18030,重启fiddler即可。
四、常用功能
4.1捕获https会话
fiddler一般不会捕获https会话,需要设置:菜单栏Tools(工具)--Fiddler Option(fiddler选项)s—HTTPS—勾选“Capture HTTPS CONNECTs(捕获https连接)”,“DecryptHTTPS traffic(解密https通信)”和“Ignore server certificate erroers(忽略服务器证书错误)”。
4.2查看http统计(可分析页面性能)
①选择一条数据,点击右侧Statistics标签,可以查看Request Count(请求数),Bytes Sent(发送字节),Bytes Received(接收字节),也可以详细查看实际性能。
②点击“Show chart”,显示统计图标,在饼形图中可以看出每个阶段占用的时间比例。
③如果选择多条请求,还可以获得多条请求的总体时间,并且分辨出哪些请求耗时最多,从而有针对的优化。
4.3设置断点拦截request和response
4.3.1一般操作
设定断点:工具栏Rules--Automatic Breakpoint--Before Requests,或者直接点击主界面左下角第三个显示窗
,直至显示截图的图标。这种方法会中断所有的会话。
取消断点:工具栏Rules--Automatic Breakpoint—Disabled,即是直接点击主界面左下角第三个显示窗,直至没有任何图标。
为已拦截的断点放行:点击右侧Run to Completion放行单条request,或者工具栏Resume(全部恢复)放行所有断点。
注:该操作设定的是request断点,若设置response断点,选择after response。
4.3.2命令行方式
设定断点:例如,我只想拦截dl.bizhi.sogou.com这个域名,只需在命令行输入“bpu dl.bizhi.sogou.com”—回车即可。这种方法只有设定域名的会话会被拦截,其他会话不会被拦截。
取消断点:输入“bpu”—回车
为已拦截的断点放行:点击右侧Run to Completion放行单条request,或者工具栏Go(全部恢复)放行所有断点。
注:该操作设定的是request断点,若设置response断点,输入bpafter dl.bizhi.sogou.com,取消输入bpafter。
4.4构造请求(待深入)
使用Composer伪造请求。
①选择要伪造的请求,把它拖拽到Composer下的界面中,可以看到详细信息
②在请求的下拉框中伪造为测试需要的请求
③点击execute,重新发送该请求
4.5改写返回数据
4.5.1用设置断点的方式改写
设定断点(设定断点方式见3.5)—点击右侧ChooseResponse—Find a file—添加要返回的伪数据—Run to Completion。用该方法还可以返回各种网络错误代码。
4.5.2用自动返回的方式改写
①选择要被改写的会话— “自动响应(AutoResponder)”标签—勾选“Enable automatic responses”-“Add”,此时,该语句被添加到下面列表中。
②选择该请求,后面下拉列表中选择“Find a file” —添加要返回的伪数据—保存。
③再次让客户端发送请求,会发现fiddler把该请求自动返回成了设定的文件。
用该方法同样可以返回各种网络错误代码。
用该方法还可以使一类具有相同关键字的请求返回相同结果:选择一个请求,在Rule Editor中修改请求语句:在相同的关键字前面加“regex:”代表模糊匹配,后面加“.*”代表匹配任意多的任意字符。该方法适用正则表达式。
4.6保存返回的内容
例如,要把请求的图片保存到本地。
现在做法:右键—Copy—Just Url—打开浏览器,粘贴到地址栏—待图片显示到浏览器后保存到本地。
技巧:选择请求—右键—Save—Response—Response Body。
4.7保存当前web session内的信息
如果觉得当前已经出现的信息比较重要,想回去好好研究,那么就可以选择菜单中的File——Save,然后选择全部会话或分类会话,然后就可以保存了。保存的文件为fiddler独有的文件格式,这种文件可以用其它机器的fiddler打开查看。
4.8比较两组数据流
①需要安装软件WinMerge
②在会话列表中选择两条需要对比的数据,右键—compare,程序会自动打开WinMerge软件,进行对比。标颜色的部分为有差异的部分。
4.9文本编码和解码
点击工具栏TextWizard
打开编码器,这里提供了多种编码方式—在上面的文本框输入需要被编码的内容—左面单选按钮选择一种编码方式—下面的文本框自动显示编译的结果。
如果勾选“View bytes”,则会以单个字节显示。
4.10模拟限速
菜单栏Rules—Performance—Simulate Modem speeds。
这种限速方法并非真正限速网络,而是fiddler自己下载完毕后,在fiddler和程序之间变为Modem传输速度而已,如果想要改变速度大小,需要修改脚本。
1)打开脚本:
①fiddler脚本实际是一个CustomRules.json文件,位于C:\Documents and Settings\[your user]\My Documents\Fiddler2\Scripts\目录下。修改脚本时可以直接修改该文件。
②可以在fiddler中打开该文件:菜单栏Rules—Customize Rules,默认使用notepad打开。
③建议安装Fiddler Script Editor,安装后,在右侧直接显示FiddlerScript标签,编辑后直接点击Save Script即可。这里介绍该方法。
2) 修改脚本:
①在Go to中选择“OnBeforeRequest”
②在OnBeforeRequest方法下修改request的速度:
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "300";
③在Go to中选择“OnBeforeResponse”
④在OnBeforeResponse方法下修改response的速度:
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "150";
从脚本中可以看出,②是限制了请求上传的速度,把速度限制为300ms/kb,④是限制了请求返回的速度,把速度限制为150ms/kb。所以说,如果下载一个50kb的壁纸,大概需要7.5秒的时间(50x150/1000=7.5s)。
4.11查询会话
(1)菜单栏Edit—Find Session(或者使用快捷键ctrl+f)--find中输入要查询的关键词。
(2)这里可以设置查询规则:
①查询request或者查询response
②查询headers或者查询bodies
③是否匹配大小写(Match case)
④是否使用正则表达式(Regular Expression)
⑤是否搜索二进制(Search binaries)
⑥是否解码加密内容(Decode compressed content)
⑦仅搜索被选择的会话(Search only selected sessions)
⑧不标记旧的查询结果(Unmarked old results)
⑨查询后用黄色背景表示(Result Highlight)
4.12筛选会话
在右侧Filters标签中设置过滤规则—勾选Use Filters,fiddler提供了多种过滤方式:
①按域名过滤
②按进程过滤
③按Request Headers过滤
④按Response Headers过滤
⑤按断点过滤
⑥按返回的状态码过滤
⑦按文件类型和大小过滤
例如,我只想查看dl.bizhi.sogou.com和imgstore.cdn.sogou.com的域名的会话,在Hosts分类的下拉列表中,选择Show only the following Hosts,在下面的文本框中输入想要查看的两个域名—点击Actions—Run Filterset now。可以看见,经过过滤之后,左面的会话列表就只剩下了dl.bizhi.sogou.com和imgstore.cdn.sogou.com两个域名的会话了。
4.13只拦截一个程序
在工具栏上,长按“any process”,直到变成pick target后,把鼠标拖动到壁纸窗口上,窗口变黑,这时,工具栏的名称变成sgwallpaper:1064。这时,监控的就只是搜狗壁纸进程了。搜狗壁纸进程后面的1064是该程序的PID号,若关闭了壁纸程序,则需要再次获取一下进程。
→
→
4.14抓取移动设备的数据
因为抓包需要用到pc的无线网络,如果物理机没有,则要用到虚拟机的相关功能:
①设置虚拟机:设置连接方式为Bridged(桥接)--勾选Replicate physical network connection state(复制物理网络)。
②设置fiddler:菜单栏Tools--Fiddler Options--Connection标签--勾选Allow remote computers to connect,默认设置Fiddler listens on port:8888,即端口为8888。
③设置移动设备:打开wify--设置http代理:服务器填写虚拟机的ip地址,端口为8888。
到此为止,抓包环境搭建好了,访问网络时就可以在fiddler中看到数据了。
注意:移动设备使用的wify和虚拟机所插的要是同一个路由。
4.15把请求跳转到测试服务器
需求:客户端发送的请求在10.11.194.227上,而测试需要使用10.129.40.212上的测试文件,可以使用fiddler使请求10.11.194.227跳转到10.129.40.212
①在fiddler的安装目录下找到302的配置文件,复制一下,随便起个自己认得的名字,把location地址写到自己搭建的服务器
HTTP/1.1 302 Redirect
FiddlerTemplate: True
Location: http://10.129.40.212/ini/伪造的文件
Content-Length: 0
②在fiddler中为10.11.194.227的请求设置一个aoturesponse,Test URL中选择该文件即可。
4.16查看网络请求的头信息
点击那条请求,然后在右边区域选择inspectors——Headers,这里就包括请求和返回的所有头信息内容。
4.17模拟其他User_Agent
程序或者浏览器发出的请求,一般都是自己的UA,fiddler可以把它们伪装成用户想要的UA。方法是选择菜单中的Rules——User-Agents,然后选择一个UA,或者选择Custom自定义一个。这样后续的网络请求就都变为这个UA的了。