美文网首页
mitmproxy的插件(二十六)

mitmproxy的插件(二十六)

作者: 梦捷者 | 来源:发表于2019-07-10 23:44 被阅读0次

mitmproxy详细文档:https://docs.mitmproxy.org/stable/

一、插件的基本介绍

  • mitmproxy真正强大的地方在于自定义脚本插件。
  • mitmproxy的插件机制由一组支持任何复杂组件的API组成。
  • 通过响应事件,插件与mitmproxy交互,这允许它们之间有联系并可以改变mitmproxy的行为。

二、一个插件的具体剖析

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()
]
  • 插件的本质就是一个脚本文件,在python中就是一个类的实例对象
  • 上面是一个简单的插件,它跟踪我们看到的流的数量(更具体的说是HTTP请求的个数)。每当它看到一个新的流,他就会使用mitmproxy的内部日志记录机制来输出它的计数。
  • 运行脚本命令如下:
mitmdump -s (./some_script.py)---这括号里面填写路径
注意事项:
  • Mitmproxy选择addons全局列表的内容并将其内容加载到插件机制中。
  • 插件只是对象,上面的代码中,我们的插件是Counter的一个实例。
  • request方法是事件的实例。每当有请求来的话就会触发request方法,进行self.num + 1操作。每个事件(即request事件)都有一个参数。对于request事件,它的参数是一个mitmproxy.http.HTTPFlow的对象。
  • 最后,ctx是有个全局模块,它公开了一个组常用于插件的标准对象。我们可以将ctx对象作为第一个参数传递给每个事件,但是我们发现它只是将它作为一个可全局导入的公开。在这种情况下,我们使用ctx.log对象进行日志记录。

三、相应的脚本

mitmproxy插件机制有一个简写,允许将模块作为一个整体被视为插件对象,如果事件中有flow的话,不管在外面还是里面,当有请求来的时候,就会触发事件的启动。这允许我们将事件处理函数放在模块范围中。例如:

def request(flow):
    flow.request.headers["myheader"] = "value"
  • 加上上面的方法事件后就会在每个请求头上加上{'myheader':'value'}

相关文章

网友评论

      本文标题:mitmproxy的插件(二十六)

      本文链接:https://www.haomeiwen.com/subject/xogjkctx.html