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的接口测试框架实例
Nov 04 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
python读取TXT每行,并存到LIST中的方法
Oct 26 Python
对python多线程中Lock()与RLock()锁详解
Jan 11 Python
Python3标准库总结
Feb 19 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
Python搭建HTTP服务过程图解
Dec 14 Python
python读取mysql数据绘制条形图
Mar 25 Python
django 实现简单的插入视频
Apr 07 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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生成带有雪花背景的验证码
2006/10/09 PHP
用文本文件制作留言板提示(下)
2006/10/09 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
区分JS中的undefined,null,"",0和false
2007/03/08 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Python input函数使用实例解析
2019/11/22 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
python实现三壶谜题的示例详解
2020/11/02 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
擅自离岗检讨书
2014/09/12 职场文书
婚前协议书范本两则
2014/10/16 职场文书
防汛工作情况汇报
2014/10/28 职场文书
中小企业员工手册范本
2015/05/14 职场文书
战友聚会致辞
2015/07/28 职场文书
如何在Python中妥善使用进度条详解
2022/04/05 Python
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript