返回介绍

插件

发布于 2021-07-04 22:55:07 字数 1899 浏览 1087 评论 0 收藏 0

插件

Mitmproxy的插件机制由一组API组成,这些API支持各种复杂性的组件。插件通过响应事件与mitmproxy进行交互,从而使它们能够陷入并改变mitmproxy的行为。它们通过options配置,可以在mitmproxy的配置文件中设置,可以由用户交互更改,也可以在命令行中传递。最后,他们可以公开命令,这允许用户直接调用其动作或将其绑定到交互式工具中的键。

插件是mpmproxy的强大组成部分。实际上,许多mitmproxy自己的功能是在一组内置插件中定义的,实现了从反缓存和粘性Cookie之类的功能到我们的入门Webapp的所有功能。内置的插件有助于进行指导性阅读,您很快就会发现,相当复杂的功能通常可以归结为非常小的,完全独立的模块。Mitmproxy为第三方脚本编写者和扩展程序提供了与它自己的功能完全相同的一组工具。

本文档将向您展示如何使用事件,选项 和命令来构建插件。但是,这不是API手册,并且mitmproxy源代码仍然是规范参考。从命令行探索API的一种简单方法是使用pydoc。例如,以下命令显示了mitmproxy的HTTP流类的API文档:

pydoc mitmproxy.http

您将经常参考mitmproxy API文档,因此请妥善保存pydoc或文档 。

插件的解剖

"""
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()
]

上面是一个简单的插件,用于跟踪我们已经看到的流(或更具体地讲HTTP请求)的数量。每次看到新的流时,它都会使用mitmproxy的内部日志记录机制来宣布其提示。可以在交互式工具的事件日志中或mitmdump的控制台中输出。

将其加载到您选择的mitmproxy工具中,试试一下,并确保它能够达到预期的效果。在这些示例中,我们将使用mitmpdump,但是所有工具的标志都是相同的:

> mitmdump -s ./anatomy.py

以下是有关上述代码的一些注意事项:

  • Mitmproxy拾取addons全局列表的内容,并将找到的内容加载到addons机制中。
  • 插件只是对象-在这种情况下,我们的插件是的实例Counter
  • request方法是事件的示例。插件只需为要处理的每个事件实现一个方法。每个事件都有一个签名,该签名由传递给该方法的参数组成。因为request,这是的实例mitmproxy.http.HTTPFlow
  • 最后,ctx模块是一个holdall模块,它公开了插件中常用的一组标准对象。我们可以将一个ctx对象作为每个事件的第一个参数传递,但是我们发现将它公开为可导入的全局对象更加巧妙。在这种情况下,我们使用该ctx.log对象进行日志记录。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文