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爬虫之urllib2使用指南
Nov 05 Python
Python获取Linux系统下的本机IP地址代码分享
Nov 07 Python
Python中分数的相关使用教程
Mar 30 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
python制作一个桌面便签软件
Aug 09 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
Python Lambda函数使用总结详解
Dec 11 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
OpenCV全景图像拼接的实现示例
Jun 05 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/11/09 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
浅析return false的正确使用
2013/11/04 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
wxPython实现分隔窗口
2019/11/19 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
护理专业自荐信范文
2014/02/26 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
婚内房产协议书范本
2014/10/02 职场文书
北京英语导游词
2015/02/12 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
综治目标管理责任书
2015/05/11 职场文书
员工担保书范本
2015/09/22 职场文书
MySQL的存储过程和相关函数
2022/04/26 MySQL