mitmproxy 使用笔记
零、背景
我之前写过关于 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 使用笔记的更多相关文章
- (转)MitmProxy+APPnium安装使用
MitmProxy+APPnium安装使用 2019年08月19日 11:09:48 jiageibuuuyi 阅读数 61更多 分类专栏: python学习笔记 版权声明:本文为博主原创文章,遵 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
随机推荐
- 英语口语考试资料Food
新东方推荐文章:Food and Health The food we eat seems to have profound effects on our health. Although scien ...
- 简单实现TodoList
Todolist实例 储备知识js的splice的用法 实例逻辑 1 在data里面做一个存一条条留言的列表,往里面添加或者删除留言内容. 2 做一个变量和input双向绑定,然后做一个点击事件把这个 ...
- 请问1^x+2^x+3^x+\cdots +n^x的算式是什么呢?
目录 总结 请问\(1^x+2^x+3^x+\cdots +n^x\)的算式是什么呢? 一.求和式\(\sum\limits_{i=1}^n{i}\)的算式 如何证明求和简式\(\sum_{i=1}^ ...
- 小白学 Python 爬虫(15):urllib 基础使用(五)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- DataFrame 链式赋值
在运行以下Python代码时,Pandas抛出SettingWithCopyWarning警告: row_data = df_pred.loc[key] row_data['col'] = new_v ...
- mybatis错题
第一题 解析: MyBatis的动态SQL中没有else元素,when元素的test属性中直接书写表达式即可,即test=”表达式”. 第二题 解析: resource属性和url属性是必须的属性,但 ...
- Pycharm-2018.3.1专业版破解教程
1.去官网下载并安装2018.3.1(目前最新)专业版本的Pycharm:(https://www.jetbrains.com/pycharm/download/#section=windows). ...
- 【CSS】330- 手把手教你玩转 CSS3 3D 技术
点击上方"前端自习课"关注,学习起来~ CSS3的3D起步 要玩转css3的3d,就必须了解几个词汇,便是透视(perspective).旋转(rotate)和移动(transla ...
- Shell排序 C&&C++
Shell排序 Shell排序是大量数据需要排序时,更为高效的插入排序.它的算法思想基于插入排序的算法思想 流程: (1)将n个元素数组分成n/2个数字序列,第一个数据和第n/2个数据为一对,等等 ...
- vue中通过.sync修饰符实现子组件修改父组件数据
vue父子通讯是单向数据流,也就是子组件不能修改父组件的值,但是在一些情况下是需要这样做的. 先看官方文档: 接下来举例实现 1.实现一个双向数据绑定,子组件改变的时候,父组件也在改变 父组件 < ...