python代理工具mitmproxy使用指南
作者:FOOFISH-PYTHON之禅 发布时间:2021-06-17 14:15:31
前言
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 看到的效果是:
当前一共有136个请求,当前选择的是第16个请求,请求方法是 GET, 返回的状态码是200,代理的端口是8080,通过 J、K 键可上下切换到不同的请求,回车可以看到当前选中的请求详情,包括三部分,Request和Response还有 Detail
mitmproxy 快捷键
? 帮助文档
q 返回/退出程序
b 保存response body
f 输入过滤条件
k 上
j 下
h 左
l 右
space 翻页
enter 进入接口详情
z 清屏
e 编辑
r 重新请求
HTTPS 抓包配置
对于HTTPS请求,为了能正常抓到请求,需要先安装证书。没安装证书的请求看到的效果是这样的。
打开网址http://mitm.it , 选择匹配的平台,下载 HTTPS 证书。并按照对应的步骤进行安装
mitmweb
$ mitmweb
启动 mitmweb 命令后,会有一个类似Chrome开发者工具的Web页面,功能上类似mitmroxy,一样可以查看每个请求的详情,包括请求、响应,还可以对请求和响应内容进行修改,包括过滤、重新发送请求等常用功能。
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 ,看到的效果:
你还可以参考这些链接:
官方文档https://docs.mitmproxy.org/stable/
GitHub地址https://github.com/mitmproxy/mitmproxy
更多脚本例子https://github.com/mitmproxy/mitmproxy/tree/master/examples/simple
来源:https://foofish.net/mitmproxy-toturial.html
猜你喜欢
- 1 配置 Python3 环境单击 工具 > 编译系统 > 新建编译系统...弹出:替换里面的内容为:{ &nbs
- 多线程多线程是个提高程序运行效率的好办法,本来要顺序执行的程序现在可以并行执行,可想而知效率要提高很多。但是多线程也不是能提高所有程序的效率
- 我认为多选列表具有完美的功能——只需按下Ctrl键,同时点击鼠标从列表中选择多个项目。以下是一个典型的多选列表框: 上面那个列表框
- 在今天网络开发方面,JavaScript起了很关键的作用;像jQuery, MooTools, Prototype等等JavaScript框
- 为了安全我们经常给access数据库加上密码,这样就算让本人下载了数据库,那么想看到数据库中的数据也不是那么简单的,起码多了一层障碍!我们平
- 一、Pandas Series对象Pandas 是基于 NumPy 设计实现的 Python 数据分析库,Pandas 提供了大量的能让我们
- 最近发现session的知识有点脱节了,默认设置愣是搞半天,看来忘了不少。今天把一些通用设置贴上来,以备随时回顾。配置文件中设置默认操作(通
- springboot配置文件抽离,便于服务器读取对应配置文件,避免项目频繁更改配置文件,影响项目的调试与发布1.创建统一配置中心项目coni
- 1、安装 python3sudo apt install python32、卸载 python2.7 (可选)sudo apt remove
- 说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework、
- 一、前言在Python中,除了可以自定义模块外,还可以引用其他模块,主要包括使用标准库和第三方模块。下面分别进行介绍。二、导入和使用标准模块
- Django(python)简单实现android的服务器端1. 所需工具PyCharm--python编辑工具,这里要写Django,因此
- python脚本替换指定行实现步骤 本文主要介
- 有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用shell(先写的,一次只能查看一个网卡),另一个用Python(
- 前言使用pandas进行数据分析的时候,我们经常需要对DataFrame的行或者列进行索引。使用pandas进行索引的方法主要有三种:直接使
- 这篇文章主要介绍了Pandas数据离散化原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 一、初步认识socket被翻译成套接字,尽管有些人诟病,但我觉得还挺贴切的。其功能是提供低级别的网络服务,最常用的就是根据IP来传输数据。所
- 本文实例讲述了Python序列对象与String类型内置方法。分享给大家供大家参考,具体如下:前言在Python数据结构篇中介绍了Pytho
- int()是Python的一个内部函数 Python系统帮助里面是这么说的>>> help(int) Help
- 之前在做数据分析的过程中,需要对数据进行实时的写入,比如对新生成的数据写入之前已经生成的txt或csv文件中。现在想想其实很简单,所以做一个