python代理工具mitmproxy使用指南


Posted in Python onJuly 04, 2019

前言

mitmproxy 是 man-in-the-middle proxy 的简称,译为中间人代理工具,可以用来拦截、修改、保存 HTTP/HTTPS 请求。以命令行终端形式呈现,操作上类似于Vim,同时提供了 mitmweb 插件,是类似于 Chrome 浏览器开发者模式的可视化工具。

它是基于Python开发的开源工具,最重要的是它提供了Python API,你完全可以通过Python代码来控制请求和响应,这是其它工具所不能做到的,这点也是我喜欢这个工具的原因之一。

安装

sudo pip3 install mitmproxy

启动

mitmproxy
#或者指定端口
mitmproxy -p 8888

启动 mitmproxy 之后,默认开启8080端口, mitmproxy 命令不支持Windows平台,需要使用 mitmdump 或者 mitmweb 命令代替。Windows系统也可以在官网下载它的EXE文件进行安装。

手机或者浏览器设置好代理之后,就可以进行抓包分析了,打开浏览器访问某个网址,mitmproxy 看到的效果是:

python代理工具mitmproxy使用指南

当前一共有136个请求,当前选择的是第16个请求,请求方法是 GET, 返回的状态码是200,代理的端口是8080,通过 J、K 键可上下切换到不同的请求,回车可以看到当前选中的请求详情,包括三部分,Request和Response还有 Detail

python代理工具mitmproxy使用指南

mitmproxy 快捷键

? 帮助文档 
q 返回/退出程序 
b 保存response body 
f 输入过滤条件
k 上
j 下
h 左
l 右
space 翻页
enter 进入接口详情
z 清屏
e 编辑
r 重新请求

HTTPS 抓包配置

对于HTTPS请求,为了能正常抓到请求,需要先安装证书。没安装证书的请求看到的效果是这样的。

python代理工具mitmproxy使用指南

打开网址http://mitm.it , 选择匹配的平台,下载 HTTPS 证书。并按照对应的步骤进行安装

python代理工具mitmproxy使用指南

mitmweb

$ mitmweb

启动 mitmweb 命令后,会有一个类似Chrome开发者工具的Web页面,功能上类似mitmroxy,一样可以查看每个请求的详情,包括请求、响应,还可以对请求和响应内容进行修改,包括过滤、重新发送请求等常用功能。

python代理工具mitmproxy使用指南

mitmdump

$ mitmdump -s script.py

mitmdump 命令最大的特点就是可以自定义脚本,你可以在脚本中对请求或者响应内容通过编程的方式来控制,实现数据的解析、修改、存储等工作

# script.py
from mitmproxy import http

def request(flow: http.HTTPFlow) -> None:
  # 将请求新增了一个查询参数
  flow.request.query["mitmproxy"] = "rocks"

def response(flow: http.HTTPFlow) -> None:
  # 将响应头中新增了一个自定义头字段
  flow.response.headers["newheader"] = "foo"
  print(flow.response.text)

当你在浏览器请求http://httpbin.org/get ,看到的效果:

python代理工具mitmproxy使用指南

你还可以参考这些链接:

  • 官方文档https://docs.mitmproxy.org/stable/
  • GitHub地址https://github.com/mitmproxy/mitmproxy
  • 更多脚本例子https://github.com/mitmproxy/mitmproxy/tree/master/examples/simple

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用Berkeley DB数据库实例
Sep 26 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
如何用 Python 处理不平衡数据集
Jan 04 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
Python批量修改图片分辨率的实例代码
Jul 04 #Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 #Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 #Python
python中比较两个列表的实例方法
Jul 04 #Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 #Python
远程部署工具Fabric详解(支持Python3)
Jul 04 #Python
Python之修改图片像素值的方法
Jul 03 #Python
You might like
php下连接mssql2005的代码
2011/01/17 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
php静态文件生成类实例分析
2015/01/03 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
浅谈python对象数据的读写权限
2016/09/12 Python
使用python实现简单五子棋游戏
2019/06/18 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
python关于调用函数外的变量实例
2019/12/26 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
编程输出如下图形
2013/11/24 面试题
课程设计心得体会
2013/12/28 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
相亲大会策划方案
2014/06/05 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
优秀员工自荐书
2015/03/06 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
详解Redis瘦身指南
2021/05/26 Redis
Python re.sub 反向引用的实现
2021/07/07 Python
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
Python 全局空间和局部空间
2022/04/06 Python