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登录QQ邮箱发信的实现代码
Feb 10 Python
python list语法学习(带例子)
Nov 01 Python
Python获取远程文件大小的函数代码分享
May 13 Python
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
基于selenium及python实现下拉选项定位select
Jul 22 Python
django下创建多个app并设置urls方法
Aug 02 Python
Python基于百度AI实现抓取表情包
Jun 27 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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中读写文件实现代码
2011/10/20 PHP
php文件读取方法实例分析
2015/06/20 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
vue实现户籍管理系统
2020/05/29 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
Python简单日志处理类分享
2015/02/14 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python深入06——python的内存管理详解
2016/12/07 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
Python中 map()函数的用法详解
2018/07/10 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
创业计划书之香辣虾火锅
2019/09/23 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
js中Object.create实例用法详解
2021/10/05 Javascript