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

浙公网安备 33010602011771号