mitmproxy


##################################

mitmproxy
参考文档:
https://www.cnblogs.com/grandlulu/p/9525417.html
简介:
pip3 install mitmproxy
mitmdump --version
mitmproxy、mitmdump、mitmweb
mitmdump -s addons.py

"C:Program Files (x86)GoogleChromeApplicationchrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
"G:Program FilesMozilla Firefoxfirefox.exe" --proxy-server=127.0.0.1:8081 --ignore-certificate-errors

事件:***http生命周期
addons文件

---------------------------------------

mitmproxy功能:
正向代理,截获请求
安装:
pip3 install mitmproxy
# 查看是否安装成功
mitmdump --version
运行:
# mitmproxy 命令不支持在 windows 系统中运行
mitmproxy、mitmdump、mitmweb
mitmproxy 提供一个实时命令行界面
mitmweb 命令启动后,会提供一个 web 界面
mitmdump 命令启动后,没有界面,程序默默运行,结合自定义脚本(实际生产中基本使用这个)

mitmweb 启动 mitmproxy
mitmproxy 绑定了 *:8080 作为代理端口,并提供了一个 web 交互界面在 127.0.0.1:8081。
使用 Edge 或其他浏览器打开 127.0.0.1:8081
关闭所有 Chrome 窗口
"C:Program Files (x86)GoogleChromeApplicationchrome.exe" --proxy-server=127.0.0.1:8080 --ignore-certificate-errors
"G:Program FilesMozilla Firefoxfirefox.exe" --proxy-server=127.0.0.1:8081 --ignore-certificate-errors
用 Chrome 打开一个网站(模拟client行为)
Edge上查看(查看proxy拦截的请求)

脚本:
编写一个 py 文件供 mitmproxy 加载
1.文件中定义了若干函数,这些函数实现了某些 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.文件定义了变量 addons,addons 是个数组,每个元素是一个类实例,
这些类有若干方法,这些方法实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的方法
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()
]
事件:
1. 针对 HTTP 生命周期
# 收到了来自客户端的 HTTP CONNECT 请求,仅是 client 与 proxy 的之间的交流
def http_connect(self, flow: mitmproxy.http.HTTPFlow):
# 来自客户端的 HTTP 请求的头部被成功读取。此时 flow 中的 request 的 body 是空的。
def requestheaders(self, flow: mitmproxy.http.HTTPFlow):
# 来自客户端的 HTTP 请求被成功完整读取。
def request(self, flow: mitmproxy.http.HTTPFlow):
# 来自服务端的 HTTP 响应的头部被成功读取。此时 flow 中的 response 的 body 是空的。
def responseheaders(self, flow: mitmproxy.http.HTTPFlow):
# 来自服务端端的 HTTP 响应被成功完整读取。
def response(self, flow: mitmproxy.http.HTTPFlow):
# 发生了一个 HTTP 错误。比如无效的服务端响应、连接断开等。注意与“有效的 HTTP 错误返回”不是一回事,后者是一个正确的服务端响应,只是 HTTP code 表示错误而已。
def error(self, flow: mitmproxy.http.HTTPFlow):
2. 针对 TCP 生命周期
3. 针对 Websocket 生命周期
4. 针对网络连接生命周期
5. 通用生命周期

启动:
mitmdump -s addons.py

##################################

原文地址:https://www.cnblogs.com/xujinjin18/p/11180851.html