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 Web框架Flask中使用七牛云存储实例
Feb 08 Python
python正常时间和unix时间戳相互转换的方法
Apr 23 Python
Python批量查询域名是否被注册过
Jun 21 Python
python 检查文件mime类型的方法
Dec 08 Python
Python 互换字典的键值对实例
Feb 12 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
浅析Python语言自带的数据结构有哪些
Aug 27 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
Pytorch数据拼接与拆分操作实现图解
Apr 30 Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python 多线程Threading初学教程
2017/08/22 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
详解Python高阶函数
2020/08/15 Python
聊聊python中的异常嵌套
2020/09/01 Python
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
医学生个人求职信范文
2013/09/24 职场文书
法学专业个人求职信
2013/09/26 职场文书
机电一体化大学生求职信
2013/11/08 职场文书
教师岗位职责
2015/02/03 职场文书
简历中自我评价范文
2015/03/11 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
党支部鉴定意见
2015/06/02 职场文书
运动会100米加油稿
2015/07/21 职场文书