Fiddler简介
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式.
Fiddler使用c#语言开发,是一个开源软件。它包含一个简单却功能强大的基于JScript .NET 事件脚本子系统,它的灵活性非常棒,可以支持众多的http调试任务,并且能够使用c#语言进行扩展。他还提供一系列接口以支持插件开发。
Fiddler是基于代理模式工作的,简单来说,当你打开Fiddler软件,他会开始监听本机8888端口。然后将系统默认代理设置为127.0.0.1:8888。这样本机所有使用系统代理的软件包括浏览器会先把数据发送到Fiddler,然后Fiddler再将数据发送到服务器。服务器返回的数据先发送给Fiddler,再由Fiddler发送到指定的程序。在这个过程中Fiddler起到了转发数据(代理)的作用。由于数据无论是请求还是响应都通过Fiddler进行转发,所以Fiddler有权限对数据进行获取、存储、修改等操作。
Fiddler安装
打开http://www.telerik.com/fiddler,点击Free download进行下载。
安装过程很简单绿色,选择好安装路径,点击Install就可以了。这里特别注意下,你要记住你的安装路径,因为Fiddler默认不会创建桌面快捷方式,需要你去安装目录打开程序或者手动创建快捷方式。
Fiddler安装
界面简介
Fiddler界面
使用及设置
Fiddler功能繁杂,不好以图文的形式把每一项讲清楚。下面我讲一些日常使用的、关键的按钮、功能和设置。
安装完成后我们一般先进行几项很重要的设置,首先点击Tools->options->Connections
Fiddler
在这里我们可以修改Fiddler监听的端口,勾选红圈标示出来的这项,允许远程计算机连接。以便在以后我们抓取手机等移动设备的数据包。勾选之后在手机Wifi设置里设置代理为 “内网IP:8888"(如 192.168.1.2:8888)就可以抓取手机的HTTP数据包。
然后再将标签页切换到HTTPS,以设置Fiddler可以抓取https数据包
Fiddler设置
勾选以上几项,期间会弹出证书安装,一路确认下去。完成之后,你的Fiddler就可以抓取本机的https数据包
Fiddler工具栏
工具栏中我们主要介绍红圈选中的几个功能。X是用来清空当前数据记录的。
Decode选中之后会自动尝试解压响应的内容,包括但不限于以下格式(gzip、deflate、bzip2、brotli)。
"Keep 1000 sessions"表示显示多少条数据记录,默认显示全部,这里建议设置为500或者1000,默认全部的话,时间久了会把你电脑内存耗光.
Any Process 这个按钮可以拖动选择抓指定应用程序的包,比如拖动到firefox就只显示firefox的数据包。默认显示全部应用程序。
Save按钮可以把当前的数据记录保存到硬盘,以便在方便的时候重新打开分析
Clear Cache是清除浏览器缓存,基本不用
TextWizard是个功能非常强大的编码解码工具,支持多种格式。会经常用到
TextWizard
鼠标放到Online按钮上,会显示你当前的网卡信息、内网IP。方便给手机设置代理的时候查看。
当在左侧选择一条数据记录时,右侧会显示该请求的具体信息
请求数据
Headers会显示请求头的一些信息,例如是GET还是POST、浏览器UA、cookie等
Textview和SyntaxView功能基本一样,用来显示post数据的原始明文格式(UTF-8),如果是二进制数据则显示乱码
WebForms会更清晰的展示你的post内容(仅限于&连接格式的post内容,如果是json格式,这里不显示)
HexView,以16进制显示你的整个请求包
Auth,显示授权信息
Cookie,用来显示请求携带的cookie信息
raw,以明文(utf-8)显示整个请求头信息包含post内容
json,以json格式显示post内容
xml,以xml格式显示post内容
以下是服务器响应的响应信息截图
Headers显示响应头信息
TextView和SyntaxView作用相似,用来显示服务器返回的具体内容。当返回内容非常大的时候TextView会卡死很久才显示。SyntaxView比TextView响应快很多
ImageView,如果服务器返回的是图片流的话,会在这个标签显示图片
HexView,以16进制显示返回内容
WebView,如果返回的是html代码,这个标签会解析html并显示网页
Auth,显示返回的授权信息
Caching,显示缓冲
Cookie,显示服务器返回的cookie
Raw,以明文(utf-8)显示完整的响应数据包
Json,以json格式显示返回内容
XML,以xml格式显示返回内容
Composer工具介绍
Composer工具在Fiddler中使用率非常高,常常用来模拟一些数据的提交
上图我们使用Composer工具,模拟提交了百度翻译的数据包。我们提交一个请求,询问服务器China的意思是什么?
服务器给我们返回以上词义。返回格式为json格式。
Fiddler命令行
在命令行中我们基本只需要掌握bpu命令就可以了,这是一个数据劫持命令
我们在命令行中输入bpu http://fanyi.baidu.com/sug 然后回车,Fiddler会监听并劫持发往和返回http://fanyi.baidu.com/sug的所有数据,并支持中途编辑修改。
我们把我们提交的china关键词改成japan,发现服务器给我们返回了japan的翻译
通过这个命令,我们既可以修改请求,也可以修改响应。常常用来劫持数据,例如你玩的某个游戏里,你有100个金币,通过劫持数据,你可以吧自己的金币数量修改成1万甚至更多。
抓包实战
我们通过一个示例,来强化上面的学习。我们来使用Fiddler抓取百度翻译输入china的数据包,然后使用我们熟悉的编程语言来写一个翻译软件。
首先我们打开百度翻译(http://fanyi.baidu.com/#en/zh/),输入china,观察Fiddler中抓到的数据。
通过逐条查看,或者搜索china字样,我们找到了一个异步请求数据包,这个包是用来做词义联想的,虽然不是最终的翻译数据包,但是该包相对简单也可以实现翻译功能,我们就来模拟这个包实现翻译功能。
我们按住这条记录,拖动到Composer工具里,简单调试去除一下无用的头部信息,看浏览器是否能正常返回。我们精简后的请求为下图示例
下面我们使用python编程模拟这个请求
import http
import json
from urllib import parse
keyword=input('请输入要翻译的单词:')
#构造请求头信息
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3964.2 Safari/537.36'
,'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
conn = http.client.HTTPConnection("fanyi.baidu.com") #创建HTTP连接
body = {'kw': keyword} #构造post信息
body = parse.urlencode(body) #对post内容进行url编码
conn.request("POST","/sug",body=body,headers=headers) #开始请求
response = conn.getresponse() #获取响应
if(response.status==200): #判断服务器响应代码为200的话即返回正常
result = response.read().decode('utf-8'); #获取响应数据
result = json.loads(result) #解析json
print('翻译内容为:',result['data'][0]['v']) #输出翻译内容
else:
print('出现错误') #如果服务器响应代码不是200,是500或者404或者其他错误代码,都显示为错误