首页 > 其他分享 >代理工具 Mitmproxy(二)

代理工具 Mitmproxy(二)

时间:2023-11-03 10:36:58浏览次数:40  
标签:mitmproxy http self flow 代理 Mitmproxy HTTP 工具 response

这一节教大家编写 Mitmproxy 自定义脚本,这才是 Mitmproxy 真正强大的在方。

Mitmproxy官方给了很多例子:

https://docs.mitmproxy.org/stable/addons-examples/

我们演示一个简单的例子 http-add-header.py, 为每一个 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()
]

mitmweb

为了直观的看到请求和响应的数据,我们使用 mitmweb 命令运行脚本。

>  mitmweb -s .\http-add-header.py 
Web server listening at http://127.0.0.1:8081/
Loading script .\http-add-header.py
Proxy server listening at http://*:8080
...

这个命令就比较厉害了,它启动默认浏览器,并打开一个web版的抓包工具。

代理工具 Mitmproxy(二)_服务端

打开postman 或其他任何接口调用工具,随便访问一个接口。例如

http://httpbin.org/get

代理工具 Mitmproxy(二)_服务端_02

然后,你会发现mitmproxy已经抓取到请求了,并且为每一个请求的response的响应头增加了一个字段。

代理工具 Mitmproxy(二)_HTTP_03

有没有很强大。那么我们可以用它来干啥。

  • 修改request/response 参数。
  • 打断点,解析某个请求的结果并修改里面的参数。
  • 过滤请求,只记录某个 host 的请求信息。
  • 将某些接口的数据拦截-解析-保存到数据库。

当然,我上面这些大部分你用 fiddler/charles 工具也能完成,但Mitmproxy 可玩性更高,也更加强大。

HTTP生命周期

我们工作中测试的大部分接口都是HTTP的。所以,我们要了解一个HTTP的生命周期。

def http_connect(self, flow: mitmproxy.http.HTTPFlow):

(Called when) 收到了来自客户端的 HTTP CONNECT 请求。在 flow 上设置非 2xx 响应将返回该响应并断开连接。CONNECT 不是常用的 HTTP 请求方法,目的是与服务器建立代理连接,仅是 client 与 proxy 的之间的交流,所以 CONNECT 请求不会触发 request、response 等其他常规的 HTTP 事件。

def requestheaders(self, flow: mitmproxy.http.HTTPFlow):

(Called when) 来自客户端的 HTTP 请求的头部被成功读取。此时 flow 中的 request 的 body 是空的。

def request(self, flow: mitmproxy.http.HTTPFlow):

(Called when) 来自客户端的 HTTP 请求被成功完整读取。

def responseheaders(self, flow: mitmproxy.http.HTTPFlow):

(Called when) 来自服务端的 HTTP 响应的头部被成功读取。此时 flow 中的 response 的 body 是空的。

def response(self, flow: mitmproxy.http.HTTPFlow):

(Called when) 来自服务端端的 HTTP 响应被成功完整读取。

def error(self, flow: mitmproxy.http.HTTPFlow):

(Called when) 发生了一个 HTTP 错误。比如无效的服务端响应、连接断开等。注意与“有效的 HTTP 错误返回”不是一回事,后者是一个正确的服务端响应,只是 HTTP code 表示错误而已。

标签:mitmproxy,http,self,flow,代理,Mitmproxy,HTTP,工具,response
From: https://blog.51cto.com/fnngj/8162032

相关文章

  • 代理工具 Mitmproxy (一)
    你在用哪款代理/抓包工具?你可能会回答fiddler,charles等HTTP/HTTPS抓包工具,或者是网卡级的wireshark工具。这里再推荐一款代理工具mitmproxy,前些天公司项目中有用到,这里做个简单的介绍。mitmproxy是一个免费开源的交互式HTTPS代理。github地址:https://github.com/mitmproxy/m......
  • 自己上手写性能测试工具(一)
    国庆重新学习了一下go的gin高性能测试框架。用JMeter来测试gin与flask接口的性能,差别很大。为什么我自己不尝试写一个性能工具,性能工具的核心就是并发和请求。请求可以选择Python的requests库。并发可以通过python的进程、线程、协程模拟。这么一想,也不是很难了,上手撸一个。依......
  • 自己上手写性能测试工具(二)
    上周教大家如何通过Python实现性能测试工具,最后留了一下问题,今天我们继续来实现命令行工具。依赖库requests==2.22.0gevent==20.9.0numpy==1.19.2click==7.1.2click库今天的主角是click库。中文文档:https://www.osgeo.cn/click/index.html第一个例子(hello.py):importclick@c......
  • Windows生产力工具推荐
    相信大部分同学还是Windows用户,作为一个长期Windows/MacOS双系统长期用户,Windows在用的好,工作效率也很高,下面就推荐几款Windows下面的生产力工具。utools用过MacOS的同学一定忘不了他的Spotlight(聚焦搜索),非常高效。当然Windows也有搜索,但是,他搜索能力比较一般,比如我搜索QQ关键字......
  • 微软自动化测试工具palywright
    前言我们介绍许多e2e的自动化测试工具一类是基于Selenium的测试框架:robotframeworkgaugeSeleniumBaseseldom(我自己维护的)另一类是基于JS语言的测试工具:cypresspuppeteer前都本身就是基于Selenium的自动化测试工具,后者在测试人员这个圈子也是未能撼动Selenium的地位,我认为有两个......
  • 自己上手写性能工具(三)
    自己上手写性能测试工具(一)自己上手写性能测试工具(二)我又来更新第三篇了,因为我又改进了一些功能。显示性能测试进度前些天逛github发现了tqdm,他可以动态显示程序的执行进度。根据前面开发的功能,在运行性能时,如果并发用户和请求数很大,那么终端就处于执行状态,不会有任何信息输出,直到运......
  • 22. 从零用Rust编写正反向代理,一个数据包的神奇HTTP历险记!
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmpro......
  • 0. 实验工具准备以及后续实验目的
    该系列课程需要使用到RISC-V(极简指令集)版本的四个工具:1.QEMU5.1+2.GDB8.3+3.GCC4.Binutils下面逐个介绍这四个工具。GCCGNUCompilerCollections,GNU系统中的编译器套件。GDBGNUDebugger,GNU系统中的调试器。QEMU开源的硬件虚拟化仿真器(Emulator)。是一个托管的虚......
  • 【工具包使用】csv文件解析
    前言  注意:1.数据格式及特点,如何确认是不是重复的元素及其后续操作;2.数据类型;参考1. python解析csv文件-掘金;完......
  • Linux 防火墙管理工具
    netfilter介绍防火墙是作用与内网和外网之间,根据定义的策略来过滤流量的软件或者硬件。在Linux内核中,自带了防火墙模块netfilter,通过netfilter可以是实现网络流量的过过滤,以及NAT、连接跟踪等功能。通过用户空间的iptables、firewalld等工具,可以实现相关规则的定义,将这些规则传......