代理对应python程序开发是一个很重要的东西,通过代理拿到一些重要的数据,传统的charles软件无法编写程序,只能做系统分析时使用,但是要做到程序控制就无法实现,python的mitmproxy就解决了这个问题,既能运行python程序,又能监控系统数据变化。
环境要求
Mitmproxy: 10.3.0
Python: 3.11.5
OpenSSL: OpenSSL 3.2.1 30 Jan 2024
Platform: Windows-10-10.0.22631-SP0
不能是虚拟环境,就是本机环境,用conda搞得好像都打不成功
mitmproxy 11 版本也没问题
Mitmproxy: 11.0.2
Python: 3.11.5
OpenSSL: OpenSSL 3.4.1 11 Feb 2025
Platform: Windows-10-10.0.22621-SP0 (实际这个是Windows 11版本)
澄清一下,conda 环境也能打包成功,以前说错了,以前可能没考虑到python 3.10 以下代码的openssl 版本的问题,默认python3.10以后的openssl都是3.0以上,所以如果使用3.10以下版本,系统默认是openssl 3.0,就会报错,具体参考以下文章
打包脚本
pyinstaller -F -c proxy.py
打包代码
import argparse
from mitmproxy.tools.main import mitmdump
def main():
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='Run mitmdump with dynamic parameters.')
parser.add_argument('-m', '--mode', type=str, help='Proxy mode (e.g., "upstream:http://127.0.0.1:7890")')
parser.add_argument('-p', '--port', type=str, default='64488', help='Proxy Port (default: "64488")')
parser.add_argument('-s', '--script', type=str, help='Path to the mitmproxy script.')
# 解析命令行参数
args = parser.parse_args()
# 构建 mitmdump 命令参数
command = ["-p", args.port] # 默认端口或者指定端口
if args.mode:
command.extend(["--mode", args.mode])
if args.script:
command.extend(["-s", args.script])
# 运行 mitmdump
mitmdump(command)
if __name__ == '__main__':
main()
使用时的脚本
这里的 main.py 是mitmproxy 的自定义脚本机制,用来修改request和response的,一般需要安装根证书,来解压https包,这个几句话讲不完,这里不做赘述。
proxy.exe --mode "upstream:http://127.0.0.1:7890" --script "main.py" -p 8888
1126

被折叠的 条评论
为什么被折叠?



