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之入门(四)运算
May 27 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
python将视频转换为全字符视频
Apr 26 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python SocketServer源码深入解读
Sep 17 Python
详解基于python-django框架的支付宝支付案例
Sep 23 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
Python接口测试环境搭建过程详解
Jun 29 Python
浅谈Python __init__.py的作用
Oct 28 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 静态化实现代码
2009/03/20 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
php查看网页源代码的方法
2015/03/13 PHP
JavaScript加强之自定义event事件
2013/09/21 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
python中去空格函数的用法
2014/08/21 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python hashlib模块用法实例分析
2018/06/12 Python
Django框架多表查询实例分析
2018/07/04 Python
浅谈django orm 优化
2018/08/18 Python
python实现支付宝转账接口
2019/05/07 Python
python语言元素知识点详解
2019/05/15 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
美国眼镜网:GlassesUSA
2017/09/07 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
《分一分》教学反思
2014/04/13 职场文书
学生会主席演讲稿
2014/04/25 职场文书
我爱读书演讲稿
2014/05/07 职场文书
远程教育培训心得体会
2016/01/09 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
MYSQL 运算符总结
2021/11/11 MySQL
MySQL实现配置主从复制项目实践
2022/03/31 MySQL