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

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

之前写了一篇博客介绍了mitmproxy,不过有些同学对这个工具到底该怎么使用还是有点不清楚,于是自己花了一天时间把自己对这个工具的理解和使用过程进行了一番整理,形成了这篇文章。接下来我就以一些简单的场景来说明mitmproxy的用法。

实践环境

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

mitmproxy安装与设置

  1. 下载mitmproxy。推荐下载二进制安装包(当前版本为0.11.3),因为使用pip安装会由于墙的原因安装失败。下载成功之后解压,便可直接点击名为“mitmproxy”的文件了。
  2. 在iMac上运行和设置mitmproxy。由于直接点击运行是没有设置mitmproxy参数的,所以我们需要在命令行里面输入mitmproxy进行设置:
     
    1
    $ [YOUR_DOWNLOAD_PATH]/mitmproxy -b 192.168.0.104 -p 9527

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


    mitmproxy初始运行界面

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


    mitmproxy帮助界面

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

    mitmproxy抓包显示

mitmproxy常见操作

mitmproxy的操作主要是通过命令行来解决的,很多操作和vi相同。一般说来,“q”代表返回。当mitmproxy回到抓包列表界面时,输入“q”就代表退出mitmproxy了。

清除抓包结果

当你处于抓包列表界面时,觉得太多的信息让你十分恼火,直接输入大写字母C便可以清楚所有的抓包结果。

查看抓包

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


mitmproxy抓包的Request详细信息

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


mitmproxy抓去response信息

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


mitmproxy 展示模式

mitmproxy修改抓包

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


mitmproxy编辑request

我从mitmproxy给出的提示中选择了“method”,也就是编辑当前包的http方法,于是mitmproxy便给出了常见的方法:在这些方法中,我要选择“trace”,便输入高亮的字母“t”即可,最后原来“Request”里面的方法就变成了TRACE了:


mitmproxy 修改request method

但是这个时候修改的request还没有生效,因为现在mitmproxy所展示的抓包信息只是记录了Android和server端之间的通信,因此我们现在编辑的抓包是已经传输过了,所以怎么办呢?很简单,重新request一下,输入字母“r”(代表“replay”)。这个时候我们就可以看到我们修改过的request得到的结果了:


mitmproxy 抓包replay效果

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

mitmproxy拦截

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

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


mitmproxy 拦截

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


mitmproxy条件拦截效果

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


mitmproxy 拦截 选择数据包

与之前的类似,输入“e”,进行request编辑模式,然后输入“h”代表要编辑request的头部:


mitmproxy 编辑拦截包的头部

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


mitmproxy 拦截header添加键值对

至此,我对拦截的request header已经修改完毕,现在要做的就是我要认可接受这个修改,然后发给服务器。所以我们输入“a”(代表“accept”)即可,等到服务器响应后,注意,mitmproxy便又了拦截服务器发过来的response(注意那个“Response intercepted”):


mitmproxy 拦截response

现在如果你想修改这个response也可以,方式同上面修改request一样。这个时候我再输入“a”,代表我接受了这个response,然后这个response便可发给客户端了:


mitmproxy 拦截response之后accept

更多类型的mitmproxy拦截

同时mitmproxy还支持不同类型的条件过滤,之前在拦截字符串前面加上特定的参数比如我要拦截所有的POST request怎么办?输入:~m POST 即可(m代表method):


mitmproxy 拦截特定的request 方法

拦截所有的request: ~q

拦截特定的header: ~h

拦截特定的domain: ~d

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

其他还有很多类型,请参看mitmproxy官方文档

Android 抓包,监控流量工具之 mitmproxy的更多相关文章

  1. Android抓包方法(三)之Win7笔记本Wifi热点+WireShark工具

    Android抓包方法(三) 之Win7笔记本Wifi热点+WireShark工具 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等 ...

  2. HttpCanary——最强Android抓包工具!

    迎使用HttpCanary——最强Android抓包工具! HttpCanary是一款功能强大的HTTP/HTTPS/HTTP2网络包抓取和分析工具,你可以把他看成是移动端的Fiddler或者Char ...

  3. Android抓包方法(二)之Tcpdump命令+Wireshark

    Android抓包方法(二) 之Tcpdump命令+Wireshark 前言 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等.学会抓包分 ...

  4. Android 抓包并通过 Wireshark 分析

    分析 Android 中 app 的网络数据交互,需要在 Android 上抓包,常用工具为 tcpdump ,用 tcpdump 生成 Wireshark 识别的 pcap 文件,把 pcap 文件 ...

  5. Android抓包方法(一)之Fiddler代理

    Android抓包方法(一) 之Fiddler代理 前言: 做前端测试,基本要求会抓包,会分析请求数据包,查看接口是否调用正确,数据返回是否正确,问题产生是定位根本原因等. 不管是之前做HTML5手机 ...

  6. Android抓包方法(转)

    Android抓包方法(转) 作者:Findyou 地址:http://www.cnblogs.com/findyou/p/3491014.html 前言: 做前端测试,基本要求会抓包,会分析请求数据 ...

  7. fiddler+android抓包工具配置使用

    今天临时增加一个工作,手机需要抓包,查看了不同的抓包工具,最后确定使用fiddler抓包工具进行操作,这里以android为例记录一下工具的配置和使用操作. fiddler的安装 网上有很多fiddl ...

  8. 【Android测试工具】Android抓包解析全过程

    需求原因 在android开发中,遇到socket编程,无法从log日志中查看到与之通讯的socket发送和返回的数据包是什么,这里介绍一个工具,tcpdump工具和wireshark工具查看抓到的内 ...

  9. android抓包工具——使用fiddler4在安卓手机抓包

    Fiddler是一款非常流行并且实用的http抓包工具,它的原理是在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应,因此,它比一般的firebug或者是chrome自带的抓包 ...

随机推荐

  1. JS时间戳与日期类型格式相互转换

    function datetime_to_unix(datetime){     var tmp_datetime = datetime.replace(/:/g,'-');     tmp_date ...

  2. HDU 5806 - NanoApe Loves Sequence Ⅱ (BestCoder Round #86)

    若 [i, j] 满足, 则 [i, j+1], [i, j+2]...[i,n]均满足 故设当前区间里个数为size, 对于每个 i ,找到刚满足 size == k 的 [i, j], ans + ...

  3. linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”

    计算机编程中经常会用到hash表,而在C++中,使用STL编程更是少不了的.本文将介绍STL中hash_map的使用.在hash_map中使用自定义类型作为key值的方法以及在使用char *类型作为 ...

  4. C# 调用c++报错可能性分析

    1.在调用之前,可以用工具(Dependency)检测下c++库所依赖的文件,看是否有错误.如果有错误,请先下补充所需运行环境. 2.如果c++ 函数 形参需要C#传入结构体,可如下: [Struct ...

  5. 微信JS-SDK说明文档及常见问题处理

    概述 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微 ...

  6. Java集合框架:Set、List、Map等介绍

    目录 1.Java集合类基本概念 2.Java集合类架构层次关系 1.Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上来讲,数组是我们一个很好的选择,前提是我们事先已经明确知道 ...

  7. 使用jquery插件uploadify上传文件的方法与疑问

    我是学生一枚,专业也不是计算机,但又要用到很多相关技术,所以在技术基础不牢靠的情况下,硬着头皮在做.最近在做一个小项目需要上传图片,而且是需要用ajax的方式.但是利用jquery的ajax方法总会有 ...

  8. 竹林蹊径-深入浅出Windows内核开发作者的博客

    http://blog.csdn.net/blog_index http://blog.csdn.net/blog_index/article/details/6012054 http://downl ...

  9. AdminCMD

    program AdminCMD; {$APPTYPE CONSOLE} uses Windows, ShellApi, SysUtils; function RunAsAdmin(const iEx ...

  10. Web常用函数介绍(LoadRunner相关)

    介绍大纲:1. web_url2. web_image3. web_link4. web_submmit_form 详细介绍: 一. web_url web_url 语法: Int Web_url(c ...