Android 抓包,监控流量工具之 mitmproxy

转:http://greenrobot.me/devpost/how-to-debug-android-http-get-started/

mitmproxy实践教程之调试 Android 上 HTTP流量

以前写了一篇博客介绍了mitmproxy,不过有些同窗对这个工具到底该怎么使用仍是有点不清楚,因而本身花了一天时间把本身对这个工具的理解和使用过程进行了一番整理,造成了这篇文章。接下来我就以一些简单的场景来讲明mitmproxy的用法。html

实践环境

iMac一台、华为B199(Android 4.4)手机一部,这二者都连着同一个wifi。mitmproxy安装版本为0.11.3。iMac的ip地址为:192.168.0.104android

mitmproxy安装与设置

  1. 下载mitmproxy。推荐下载二进制安装包(当前版本为0.11.3),由于使用pip安装会因为墙的缘由安装失败。下载成功以后解压,即可直接点击名为“mitmproxy”的文件了。
  2. 在iMac上运行和设置mitmproxy。因为直接点击运行是没有设置mitmproxy参数的,因此咱们须要在命令行里面输入mitmproxy进行设置:

    注意,此处的[YOUR_DOWNLOAD_PATH]为你下载mitmproxy二进制文件解压后所对应的目录,就我而言的目录就是:~/Downloads/osx-mitmproxy-0.11.3 .  其中ip设置为iMac的ip,端口则按照你的我的喜爱来。
    初始界面以下:

     

    mitmproxy初始运行界面
    mitmproxy初始运行界面

    输入“?”即可查看帮助界面(输入“q”回到正常界面):git

    mitmproxy帮助界面
    mitmproxy帮助界面
  3. 在Android上设置代理。按照以前的步骤将Android所链接的wifi代理ip设置为:192.168.0.1,端口设置为:9527 。如今Android已经连上代理,iMac端便开始展现它所抓取到的包了(我在刷微博:)):
    mitmproxy抓包显示
    mitmproxy抓包显示

     

mitmproxy常见操做

mitmproxy的操做主要是经过命令行来解决的,不少操做和vi相同。通常说来,“q”表明返回。当mitmproxy回到抓包列表界面时,输入“q”就表明退出mitmproxy了。github

清除抓包结果

当你处于抓包列表界面时,以为太多的信息让你十分恼火,直接输入大写字母C即可以清楚全部的抓包结果。json

查看抓包

在步骤3中咱们能够看到一个黄色的指标,咱们能够经过上下箭头(或者使用 “j”/”k”来上下选择)。直接回车即可以查看指标所选定的包的详细信息:服务器

mitmproxy详细信息
mitmproxy抓包的Request详细信息

此时,咱们可使用tab键在“Request”和“Response”之间切换。这是“Response”的详细信息(这是一个张图片,因此下面乱码了):dom

mitmproxy抓去response信息
mitmproxy抓去response信息

当咱们发现“Response”的信息比较乱的时候,咱们能够选择合适的形式来展现,这个时候咱们只要输入“m”即可以看到mitmproxy提供的不一样展示形式,输入对应高亮的字母即可以看到相应的结果(输入“s”即可以以json形式展现):工具

mitmproxy 展现模式
mitmproxy 展现模式

mitmproxy修改抓包

若是这个时候咱们须要编辑“Request”怎么办,很简单,输入字母“e”便可(注意图片最下方出现的提示(Edit request (query,path,url,header,form,raw body,method)?:post

mitmproxy编辑request
mitmproxy编辑request

我从mitmproxy给出的提示中选择了“method”,也就是编辑当前包的http方法,因而mitmproxy便给出了常见的方法:屏幕快照 2015-01-27 下午2.20.09在这些方法中,我要选择“trace”,便输入高亮的字母“t”便可,最后原来“Request”里面的方法就变成了TRACE了:spa

mitmproxy 修改request method
mitmproxy 修改request method

 

可是这个时候修改的request尚未生效,由于如今mitmproxy所展现的抓包信息只是记录了Android和server端之间的通讯,所以咱们如今编辑的抓包是已经传输过了,因此怎么办呢?很简单,从新request一下,输入字母“r”(表明“replay”)。这个时候咱们就能够看到咱们修改过的request获得的结果了:

mitmproxy 抓包replay效果
mitmproxy 抓包replay效果

此时咱们输入“q”即可以回到以前的抓包列表了。这些都是历史抓包纪录,能不能实时地抓包呢?固然能够,这就是下面要说的拦截(Intercept)了。

mitmproxy拦截

何为拦截?以前开篇就介绍过mitmproxy是一个中间人代理工具,它位于客户端和Server 端之间,它能够获取客户端的Request而后修改,发送给Server 端;Server端获得Request以后在发出相应的Response又会被mitmproxy拦截,若是你想修改response,即可修改后再发给客户端。注意:这与以前修改抓包信息不一样的是,前者的抓包已经发送给了服务器,而mitmproxy拦截则是获取了抓包,还未发送给服务器。也就是说若是我拦截了我手机上全部的request,那么个人手机将没法获取来自服务器的response。

那么咱们若是进行拦截,怎么进行特定的拦截?输入字母“i”(表明Intercept filter)便可,此时界面便会让你输入想要拦截的条件:

mitmproxy 拦截
mitmproxy 拦截

mitmproxy的条件拦截在默认状况下是过滤抓包的URL的。也就是说当你直接输入要拦截的条件(好比输入“weibo”),那么接下来要出现抓包会将匹配的抓包总体变黄:

mitmproxy条件过滤效果
mitmproxy条件拦截效果

这些橘黄色的数据包都表明被拦截了,还未发送给服务器,这个时候你就能够对这些数据包进行修改,咱们选择一个数据包enter进入:

mitmproxy 拦截 选择数据包
mitmproxy 拦截 选择数据包

与以前的相似,输入“e”,进行request编辑模式,而后输入“h”表明要编辑request的头部:

mitmproxy 编辑拦截包的头部
mitmproxy 编辑拦截包的头部

输入enter即可对高亮的User-Agent的值进行修改,上图的weibo版本以前是5.0的,被我改为了6.0 。咱们还能够对header进行添加属性,输入“a”便可,而后使用tab分别键入key和value。这里我添加了“test-test”键值对:

mitmproxy 拦截header添加键值对
mitmproxy 拦截header添加键值对

至此,我对拦截的request header已经修改完毕,如今要作的就是我要承认接受这个修改,而后发给服务器。因此咱们输入“a”(表明“accept”)便可,等到服务器响应后,注意,mitmproxy便又了拦截服务器发过来的response(注意那个“Response intercepted”):

mitmproxy 拦截response
mitmproxy 拦截response

如今若是你想修改这个response也能够,方式同上面修改request同样。这个时候我再输入“a”,表明我接受了这个response,而后这个response即可发给客户端了:

mitmproxy 拦截response以后accept
mitmproxy 拦截response以后accept

 

更多类型的mitmproxy拦截

同时mitmproxy还支持不一样类型的条件过滤,以前在拦截字符串前面加上特定的参数好比我要拦截全部的POST request怎么办?输入:~m POST 便可(m表明method):

mitmproxy 拦截特定的request 方法
mitmproxy 拦截特定的request 方法

拦截全部的request: ~q

拦截特定的header: ~h

拦截特定的domain: ~d

拦截特定的响应代码(404之类的): ~c

其余还有不少类型,请参看mitmproxy官方文档

相关文章
相关标签/搜索