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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
详解Python中with语句的用法
Apr 15 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
python matplotlib库直方图绘制详解
Aug 10 Python
为什么说Python可以实现所有的算法
Oct 04 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
详解python中groupby函数通俗易懂
May 14 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
python可视化之颜色映射详解
Sep 15 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与Web页面交互操作实例分析
2020/06/02 PHP
javascript动态加载实现方法一
2012/08/22 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python爬取三国演义的实现方法
2016/09/12 Python
python连接mysql实例分享
2016/10/09 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
模具设计与制造专业应届生求职信
2013/10/18 职场文书
事业单位请假制度
2014/01/13 职场文书
抽样调查项目计划书
2014/04/24 职场文书
求职信怎么写范文
2014/05/26 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
管理失职检讨书范文
2015/05/05 职场文书
党员转正介绍人意见
2015/06/03 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android