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中enumerate的用法实例解析
Aug 18 Python
Python的面向对象思想分析
Jan 14 Python
Python查找相似单词的方法
Mar 05 Python
Python中请不要再用re.compile了
Jun 30 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
Python基础之操作MySQL数据库
May 06 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
Python 中的 copy()和deepcopy()
Nov 07 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
php封装的验证码类分享
2017/02/26 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
js实现无缝滚动图
2017/02/22 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
js实现动态时钟
2020/03/12 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
销售会计工作职责
2013/12/02 职场文书
团组织关系介绍信
2019/06/24 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
HTML基本元素标签介绍
2022/02/28 HTML / CSS
Golang 对es的操作实例
2022/04/20 Golang