从零开始学mitmproxy抓包工具
Man In The Middle
mitm是Man In The Middle的首字母缩写,意思是位于中间的人,表明mitmproxy是一个代理,可以拦截请求,实现网络抓包。知名的网络抓包工具有Fiddler、Charles、HttpWatch、WireShark、BurpSuite和Postman等,mitmproxy相对来说,没有这么高的知名度,它相比于以上工具的独特优势是,它提供了Python API,可以编写Python代码对网络请求进行流量录制,从而收集接口信息以及转化为接口自动化用例等。mitmproxy官方文档不但有mitmproxy工具使用介绍,还有代理实现原理,对我们学习掌握网络知识有很大帮助。
安装与使用
pip安装
pip install mitmproxy
mitmproxy是Python开发的,用pip就能安装成功。官方给出了二进制安装包等方法,我觉得作为一款用Python开发的工具,用pip直接安装是更Pythonic的。
命令启动
可以通过3种命令启动mitmproxy:
mitmproxy 控制台
mitmweb 网页
mitmdump 命令行
它们的内容都是一样的,只是UI不一样而已。
手动设置代理
打开以后mitmproxy默认会监听http://localhost:8080,需要设置下代理,把代理服务器设置为这个地址。
Windows可以这样设置:
设置后一定要记得点击保存按钮,否则代理不会生效。
实际上,Charles等网络抓包工具会自动配置代理,而mitmproxy需要手动设置代理,开发团队的解释是因为浏览器版本和配置经常会变化,所以他们建议在网上根据环境搜索方法手动设置。
下载证书
访问http://mitm.it/,如果代理配置没有生效,打开后会是这个界面:
正常的话,会出现证书下载页面:
根据平台选择相应证书安装就OK了。
使用
mitmproxy更其他抓包工具用法类似。
官方用视频演示了mitmproxy如何使用:
https://docs.mitmproxy.org/stable/mitmproxytutorial-userinterface/
并且介绍了5种运行模式:
https://docs.mitmproxy.org/stable/concepts-modes/
读者可以自行阅读下。
mitmproxy工作原理
- 客户端(本机)连接代理服务器(http://127.0.0.1:8080),代理服务器连接服务器。
- 客户端给代理服务器发请求,代理服务器把请求发送到服务器。
所有请求经过mitmproxy,就可以实现请求拦截。
对于HTTP来说,直接借助mitmproxy传递请求就可以。而对于HTTPS来说,有个SSL/TLS安全认证,必须安装证书,服务器才会认为mitmproxy的请求是可信任的,请求才会成功传递。
HTTPS的代理过程就要复杂很多,客户端先跟mitmproxy建立连接(12步),然后进行安全认证(36步),最后传递请求(7~8步)。
反向代理
假设在本机使用FastAPI启动了个Mock服务,地址为http://127.0.0.1:5000,通过Postman调接口,怎么使用mitmproxy来拦截请求呢?这就需要用到反向代理。
首先以反向代理模式运行mitmproxy,服务器端口为5000,监听端口为8000:
mitmproxy --mode reverse:http://127.0.0.1:5000 --listen-host 127.0.0.1 --listen-port 8000
然后把请求http://127.0.0.1:5000/login里面的5000端口改成8000,访问:
就能在mitmproxy看到抓到请求了:
这样就能在本地使用Mock服务来调试拦截请求的Python代码了。
反向代理,不需要在本机手动设置代理。
Python API
Python API是mitmproxy的特色功能:
能够在Python代码中对拦截的请求进行处理。
addons提供了很多hook函数,比如request:
"""
Basic skeleton of a mitmproxy addon.
Run as follows: mitmproxy -s anatomy.py
"""
from mitmproxy import ctx
class Counter:
def __init__(self):
self.num = 0
def request(self, flow):
self.num = self.num + 1
ctx.log.info("We've seen %d flows" % self.num)
addons = [
Counter()
]
response:
"""Add an HTTP header to each response."""
class AddHeader:
def __init__(self):
self.num = 0
def response(self, flow):
self.num = self.num + 1
flow.response.headers["count"] = str(self.num)
addons = [
AddHeader()
]
启动时加上-s
参数指定脚本:
mitmdump -s ./anatomy.py
代码就会在请求拦截时生效了。
更多hook函数请参考官方说明:
https://docs.mitmproxy.org/stable/api/events.html
这里就不再详细说明了。
而关于如何使用mitmproxy录制流量自动生成自动化用例的部分,我会开发完成后集成到tep新版本中,届时再做介绍,敬请期待。
参考资料:
mitmproxy官方文档 https://docs.mitmproxy.org/stable/
从零开始学mitmproxy抓包工具的更多相关文章
- mitmproxy抓包工具
中文官网 https://ptorch.com/docs/10/mitmproxy-concepts-options mitmproxy抓包工具 1. mitmproxy 介绍与安装 需要安装pyth ...
- C#一步一步学网络辅助开发(1)--常用抓包工具的使用
这次写的是一个系列,是让大家了解如何进行网络的辅助开发.要进行网络辅助开发抓包工具是必不可少的,下面就让大家熟悉一下常用的一些抓包工具, 1,Fiddler 这个工具是我目前用的最多的一款抓包工具,不 ...
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- Python+Requests接口测试教程(1):Fiddler抓包工具
本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...
- Charles 抓包工具安装和采坑记录
Charles 抓包工具安装和采坑记录 网络抓包是解决网络问题的第一步,也是网络分析的基础.网络出现问题,第一步肯定是通过抓包工具进行路径分析,看哪一步出现异常.做网络爬虫,第一步就是通过抓包工具对目 ...
- linux下抓包工具tcpdump详解
本文转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the ...
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总,使用mono运行filddler
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- Jmeter实现登录bugfree、新建bug、解决bug脚本(抓包工具实现)
环境 Chrome jmeter3.1 fiddler4 win7 32位 Linux CentOs6.4 bugfree3.0.1 链接:http://pan.baidu.com/s/1gfHpbp ...
- 抓包工具Wireshark过滤器
抓包工具WireShark分为两种过滤器: 捕捉过滤器(CaptureFilters) 显示过滤器(DisplayFilters) 捕捉过虑器语法: Protocol Direction Host ...
随机推荐
- sqlcl - Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
运行sqlcl的命令sql出错 bash-4.2$ sql username/password@hostname:1521:databasename Exception in thread " ...
- spring boot 打包war后 部署到外部 tomcat 的具体正确操作【包括修改端口 与 去除请求路径的工程名】
1.前言 工程做好了,总不能放在idea运行吧?不然怎么把项目放到云服务器呢?[这一篇随笔不讲解发布的云服务器的操作,在其他随笔有详细记载.] 解决的方案是把springboot 工程 打包成war文 ...
- JavaWeb中Cookie会话管理,理解Http无状态处理机制
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512995108961387015/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...
- SYCOJ#111、吉祥物
题目-吉祥物 (shiyancang.cn) 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,x; 4 int pos(i ...
- 使用Crossplane构建专属PaaS体验:Kubernetes,OAM和CoreWorkflows
关键点:•许多组织的目标是构建自己的云平台,这些平台通常由内部部署架构和云供应商共建完成.•虽然Kubernetes没有提供开箱即用的完整PaaS平台式服务,但其具备完整的API,清晰的技术抽取和易理 ...
- git 那些事儿 —— 基于 Learn Git Branching
前言 推荐一个 git 图形化教学网站:Learn Git Branching,这个网站有一个沙盒可以直接在上面模拟 git 的各种操作,操作效果使用图形的方式展示,非常直观.本文可以看作是它的文字版 ...
- [开发笔记usbTOcan]软件需求分析和软件架构设计
前面文章进行了系统分析和系统架构设计,手工焊接了一个板子,集合EK-TMC123GXL开发板(请忽略焊接技术) SWE.1 | 软件需求分析 软件需求分析过程的目的是将系统需求的软件相关部分转化为一组 ...
- 【解决了一个小问题】golang中引用一个路径较长的库,导致goland中出现"module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2"
在项目中的go.mod文件中有这样一句: require ( github.com/xxx-devops/xx1/sdk/go v2.2.3 ) 项目的编译没有问题,但是goland中出现如下提示: ...
- spring拦截机制中Filter(过滤器)、interceptor(拦截器)和Aspect(切面)的使用及区别
Spring中的拦截机制,如果出现异常的话,异常的顺序是从里面到外面一步一步的进行处理,如果到了最外层都没有进行处理的话,就会由tomcat容器抛出异常. 1.过滤器:Filter :可以获得Http ...
- springMvc 启动过程
转载自https://www.jianshu.com/p/dc64d02e49ac 这里给出一个简洁的文字描述版SpringMVC启动过程: tomcat web容器启动时会去读取web.xml这样的 ...