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列表(list)常用操作方法小结
Feb 02 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
python复制文件到指定目录的实例
Apr 27 Python
Python中文件的读取和写入操作
Apr 27 Python
Python工厂函数用法实例分析
May 14 Python
python七夕浪漫表白源码
Apr 05 Python
python matplotlib拟合直线的实现
Nov 19 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
python画条形图的具体代码
Apr 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 水平的题目
2007/05/30 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python 字典dict使用介绍
2014/11/30 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
matplotlib中legend位置调整解析
2017/12/19 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
python计算无向图节点度的实例代码
2019/11/22 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Python join()函数原理及使用方法
2020/11/14 Python
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
金融学专科生自我鉴定
2014/02/21 职场文书
超市创业计划书
2014/04/24 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python