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中的__init__ 、__new__、__call__小结
Apr 25 Python
python操作xml文件详细介绍
Jun 09 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
python学生管理系统代码实现
Apr 05 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
在Python 不同级目录之间模块的调用方法
Jan 19 Python
python+mysql实现学生信息查询系统
Feb 21 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
python 怎样进行内存管理
Nov 10 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
基于mysql的论坛(5)
2006/10/09 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
javascript验证身份证号
2015/03/03 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
应届生会计求职信
2013/11/11 职场文书
师范生求职自荐信
2014/06/14 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
尼克胡哲观后感
2015/06/08 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis