零、背景


我之前写过关于 charles 的使用笔记,为什么现在又要来写同类型的 mitmproxy 工具呢?下面我会娓娓道来他比 charles 多出的强大功能。

一、介绍


mitmproxy 是一个支持 HTTP 和 HTTPS 的抓包程序, 类似 Fiddle、Charles , 只不过它通过 CMD 的形式操作。

mitmproxy 还有两个关联组件:

一个是 mitmdump ,它是 mitmproxy 的命令行接口,利用它可以对接 Python 脚本,实现监听后的处理;

另一个是 mitmweb ,它是一个Web 程序,通过它以清楚地观察到 mitmproxy 捕获的请求。(跟 charles 差不多)

二、安装与配置


1、安装

(1)方法一:通过 pip 安装

pip3 install mitmproxy

会自动附带安装 mitmdump 和mitmweb。

(2)方法二:通过 brew 安装

brew install mitmproxy

2、配置

抓 HTTPS 需要配置 CA 证书

(1) 电脑端(以 mac 为例)

运行起 mitmdump命令。

然后找到 ~/.mitmproxy/mitmprox-ca-cert.pem 文件,双击,弹出 Keychain Access窗口,找到名为 mitmproxy 的 CA 证书,选择 Always Trust。

(2) 手机端(以 Android 为例)

同样将 ~/.mitmproxy/mitmprox-ca-cert.pem 文件发送给手机,在手机端打开后,填入证书名和点击确认按钮,如下图:

三、使用


下面的例子都以爬手机端为例,记得让手机和 PC 处于同一个局域网。

1、mitmproxy

1、命令行运行 mitmproxy命令,会启动一个代理,默认监听 8080 端口。

2、手机设置里修改网络的代理设置:

3、现在就可以在命令行里查看经过的网络请求了

4、也可查看请求的具体详情:

5、还有编辑、重发功能

2、mitmweb

可以理解成界面版的 mitmproxy。

略。

3、mitmdump

上面介绍的功能其实 Fiddle、 Charles 也有,那么mitmproxy 的优势何在哪?

这就要提到 mitmdump 了,有了它我们可以直接对接 Python 脚本对请求进行处理。比如对数据的解析、存储、修改等。

示例 demo:


from mitmproxy import ctx def request(flow):
# 获取
request = flow.request
# 修改
request.headers['User-Agent'] = 'MitmProxy' # 日志输出
print(request.host)
ctx.log.info(request.host) # 颜色同上
ctx.log.warn(request.host) # 颜色:黄
ctx.log.error(request.host) # 颜色:红 def response(flow):
response = flow.response
ctx.log.info(str(response.status_code))

详细文档:https://mitmproxy.readthedocs.io/en/v2.0.2/mitmdump.html

4、拓展 —— httpbin.org

通过 mitmdump 对 request 做了修改,想要看修改后达成的效果,推荐客户端去访问这个网址:http://httpbin.org/get 即可知晓。

四、坑


1、爬的成功率不高,失败的会报错 :Cannot establish TLS with client……

会是 https 抓不到的问题?但我的电脑和手机端的 CA 证书都装了呀,费解。

解决方案:待解决


参考资料

《python 3 网络爬虫开发实践》

mitmproxy 使用笔记的更多相关文章

  1. (转)MitmProxy+APPnium安装使用

    MitmProxy+APPnium安装使用 2019年08月19日 11:09:48 jiageibuuuyi 阅读数 61更多 分类专栏: python学习笔记   版权声明:本文为博主原创文章,遵 ...

  2. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  5. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  6. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  7. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  8. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  9. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

随机推荐

  1. Block-wise 2D kernel PCA/LDA for face recognition-笔记

    In the present work, we propose a framework for kernel-based 2D feature extraction algorithms tailor ...

  2. Android Native Binder,在Native层与App交互数据

    Binder底层是基于C实现的,因此可以作为Native进程与App层交互数据的渠道.其应用场景为:Native Service.Hal驱动设置.应用层JNI服务等. Android 4.4引入SEA ...

  3. 理解Redis的单线程模式

    0.概述 本文基于的Redis版本为4.0以下,在Redis更高版本中并不是完全的单线程了,增加了BIO线程,本文主要讲述主工作线程的单线程模式. 通过本文将了解到以下内容: Redis服务器采用单线 ...

  4. Spring Boot 最简单整合Shiro+JWT方式

    简介 目前RESTful大多都采用JWT来做授权校验,在Spring Boot 中可以采用Shiro和JWT来做简单的权限以及认证验证,在和Spring Boot集成的过程中碰到了不少坑.便结合自身以 ...

  5. 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)

    [摘要] ​主要讲解物联网的技术积累,本期我们先带领大家学习漫谈LiteOS之漫谈开发板第一集-串口,本文基于GD32450i-EVAL对串口以及其通信做了一个简要的分析,以及开发过程中遇到的一些技术 ...

  6. 【HUAWEI Mate30】抽奖啦!华为IoT新福利上线!

    华为云OceanConnect IoT云服务包括应用管理.设备管理.系统管理等能力,实现统一安全的网络接入.各种终端的灵活适配.海量数据的采集分析,从而实现新价值的创造. 华为云OceanConnec ...

  7. 使用ModelArts自动学习完成猫狗声音分类

    准备数据 点击下载猫狗声音数据集至本地: 解压,文件包结构大概如下图所示 data ├── test │ ├── cats │ │ ├── cat_20.wav │ │ ├── ...... │ │ ...

  8. 区块链学习笔记:DAY05 如何使用公有云区块链服务

    这是最后一节课了,主要讲华为云在云区块链提供的服务,如何基于华为云BCS来构建应用 先来个简单的比喻: 1.有关BaaS的范围定义 包含物理主机.虚拟主机.容器服务.区块链.智能合约和服务 2.华为云 ...

  9. Spring通过IOC帮我们做火鸡

    一.IOC--setter注入 1.准备dmo 首先准备一只火鸡 public class Turkey { private int id; private String name; public i ...

  10. shell 读取文件第几列

    读取文件的第2列和第4列: cat filename.txt | awk '{ print $2 $4 }' 求文件file1.txt的第二列 和 file2.txt(单列文件)的交集: cat fi ...