插件
插件
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论