mitmproxy-一款可以自定义的代理工具

简介:

mitmproxy就是MITM的proxy,即中间人代理

安装:

pip install mitmproxy

安装完成后,系统就会有mitmproxy、mitmdump、mitmweb三个命令

运行:

mitmproxy:启动后会打开一个命令行界面,可以实时看到发生的请求;but不支持Windows系统

mitmdump:启动后没有界面,静默运行代理程序

mitmweb:启动后会在浏览器打开一个web页面,用户可以查看实时发生的请求

启动过程中遇到的问题:

cannot import name 'soft_unicode' from 'markupsafe'

解决办法:pip install markupsafe

Error starting proxy server: OSError(10013, '以一种访问权限不允许的方式做了一个访问套接字的尝试。', None, 10013, None)

问题原因:端口被占用(默认绑定8080端口启动)

解决办法:指定一个未被占用的端口启动:mitmweb -p 8848

编写自定义脚本:

脚本的编写要遵循mitmproxy规定的流程,mitmproxy支持两种方式:

1、编写一个py文件供mitmproxy加载,文件中定义的函数实现了mitmproxy提供的事件,mitmproxy会在某个事件发生时调用对应的函数

import mitmproxy.http
from mitmproxy import ctx

num = 0


def request(flow: mitmproxy.http.HTTPFlow):
    global num
    num = num + 1
    ctx.log.info("We've seen %d flows" % num)

2、编写一个py文件供mitmproxy加载,文件中定义了变量addons,addons是一个数组,数组中每个元素是一个类实例,这些类有若干方法,这些方法实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的方法。这些类称为一个个addon

import mitmproxy.http
from mitmproxy import ctx


class Counter:
    def __init__(self):
        self.num = 0

    def request(self, flow: mitmproxy.http.HTTPFlow):
        self.num = self.num + 1
        ctx.log.info("We've seen %d flows" % self.num)


addons = [
    Counter()
]

mitmproxy事件:

 1、针对HTTP生命周期

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

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

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

示例:

编写包含addon类的py文件

编写addons.py文件,并导入包含addon类的py文件

启动mitmproxy,并加载addons.py文件

mitmweb -s addons.py

posted @ 2023-03-01 17:20  木不藤  阅读(415)  评论(0)    收藏  举报