首页 > 编程语言 >代理 mitmproxy Python非命令行启动 使用笔记(一)

代理 mitmproxy Python非命令行启动 使用笔记(一)

时间:2024-05-06 20:26:29浏览次数:13  
标签:__ Python request flow mitmproxy host 命令行 response

代理 mitmproxy Python非命令行启动 使用笔记(一)

mitmproxy Python非命令行启动

在进行 APP 应用操作时,难免会遇到抓包操作,于是我们这里使用 mitmproxy 来完成这能力

目录

  1. mitmproxy 简介
  2. mitmproxy 常用的命令行启动
  3. mitmproxy 非命令行脚本直接启动,两种方式

简介

mitmproxy 是一组工具,为 HTTP/1、HTTP/2 和 WebSocket 提供交互式、支持 SSL/TLS 的拦截代理,官方文档见这里


常用的命令行启动

  1. 基础启动
mitmweb  # 启动带WEB 可视化界面的代理,默认:host=127.0.0.1,port=8080
mitmproxy  # 启动无可视化代理,默认:host=127.0.0.1,port=8080
  1. 自定义地址端口,允许公共 IP 地址的连接,带脚本插件启动
# host=192.167.6.120,port=8888,允许公共 IP 地址的连接:block_global=false,脚本插件:test_addon.py
mitmweb --listen-host=192.167.6.120 -p=8888 --set block_global=false -s .\test_addon.py
mitmproxy --listen-host=192.167.6.120 -p=8888 --set block_global=false -s .\test_addon.py

注意:为什么要加 block_global=false?,若不加,则只能本地拦截,而移动设备请求无法被拦截
报错如下:Client connection from 192.167.6.166 killed by block_global option


非命令行脚本直接启动

  1. 方式一,通过main.mitmdump函数
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File        : test_mitmproxy.py
@ Author      : yqbao
@ Version     : V1.0.0
@ Description : 通过`main.mitmdump`函数
"""

from mitmproxy.http import HTTPFlow
from mitmproxy.tools import main


class Counter:
    def request(self, flow: HTTPFlow):
        request = flow.request  # 获取请求对象
        print(f"request host = {request.host}")

    def response(self, flow: HTTPFlow):
        if flow.response.status_code != 200:
            return
        response = flow.response  # 获取响应对象
        print(f"response body json = {response.json()}")


if __name__ == '__main__':
    main.mitmdump(['-s', __file__, '--listen-host', '192.167.6.120', '-p', '8888', '--set', 'block_global=false'])

  1. 方式二,通过dump.DumpMaster
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File        : test_mitmproxy.py
@ Author      : yqbao
@ Version     : V1.0.0
@ Description : 通过`dump.DumpMaster`类
"""
import asyncio

from mitmproxy import http, options, optmanager
from mitmproxy.tools import dump


class Counter:
    def request(self, flow: HTTPFlow):
        request = flow.request  # 获取请求对象
        print(f"request host = {request.host}")

    def response(self, flow: HTTPFlow):
        if flow.response.status_code != 200:
            return
        response = flow.response  # 获取响应对象
        print(f"response body json = {response.json()}")


async def func_temp(host: str = '127.0.0.1', port: int = 8080, conf_file: str = None):
    opts = options.Options(listen_host=host, listen_port=port)
    # print(opts.keys())  # 输出选项名称

    # 加载配置文件,如果你的参数在 opts.keys() 中不存在,则必须使用配置文件,否则不需要用
    if conf_file:
        optmanager.load_paths(opts, conf_file)

    # with_termlog设置为True会显示运行中mitmproxy遇到的错误;with_dumper是用来控制是否显示每个请求相关信息的
    dm = dump.DumpMaster(opts, with_termlog=True, with_dumper=False)
    dm.addons.add(Counter())  # python脚本直接运行需要单个add添加
    try:
        await dm.run()
    except BaseException as e:
        print(e)
        dm.shutdown()


if __name__ == '__main__':
    asyncio.run(func_temp(conf_file=r'.\.mitmproxy\config.yaml'))

  1. 配置文件如下,配置文件中的选项,请参考官网,见这里
%YAML 1.2
---
listen_host: 192.167.6.120
listen_port: 8888
block_global: false
...

参考文章与友情链接
参考文章一
参考文章二
mitmproxy 官方文档
Appium 2.0 官方文档
本文章的原文地址
GitHub主页

标签:__,Python,request,flow,mitmproxy,host,命令行,response
From: https://www.cnblogs.com/yqbaowo/p/18175510

相关文章

  • 代理 mitmproxy config.yaml 模板 使用笔记(二)
    代理mitmproxyconfig.yaml模板使用笔记(二)mitmproxyconfig.yaml模板使用mitmproxy可能需要用到config.yaml来批量配置参数目录config.yaml文件所在位置config.yaml配置模板文件位置配置文件默认读取路径:~/.mitmproxy/config.yaml,见配置项:confdir:'~/.mitmpro......
  • GUI利器 python界面开发PySimpleGUI
    大家好,很多人都想写一个自己的桌面程序,那么PySimpleGUI 是一个非常好的选择,它旨在简化GUI(图形用户界面)的创建过程。它基于几种流行的PythonGUI库,如tkinter、Qt、WxPython和Rem)i,但提供了一个更简单直观的接口。通过PySimpleGUI,即使是没有图形界面开发经验的开发者也可以......
  • 一个惊艳的 python 库:PyWebIO,用 Python 写网站
    大家好,今天给大家介绍另一个简单而强大的web库--PyWebIO,它能让你的Python脚本快速拥有一个交互式的网页界面。想象一下,你不需要懂得前端开发,就能创建出用户友好的网页应用,今天,我们就来聊聊PyWebIO,看看它如何让Pythonweb开发变得更加简单有趣。为什么选择PyWebIO?1. 快速开发......
  • python实战练习题二
    """第一题:求解回文字符串回文是一个正读和反读都一样的字符串。例如:abcba12321是回文字符串hello123456不是回文字符串"""s=input("请输入字符串:")s2=s[::-1]#字符串逆序ifs==s2:print("{}是回文字符串!".format(s))else:pr......
  • python常见的实战练习题一
    """第一题:求解水仙花数水仙花数,也被称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrongnumber),是一个n位数(n≥3),其每个位上的数字的n次幂之和等于它本身。例如,三位数153是一个水仙花数,因为1^3+5^3+3^3=153。在三位数中,除了153,还有370、371和407也是水仙花......
  • Python高阶---反射
    ======================================反射:hasattr:输入一个字符串,判断对象有没有这个方法或属性getattr:获取对象属性或方法的引用。如果是方法,则返回方法的引用;如果是属性,则直接返回属性值;如果该方法或属性不存在,则抛出异常。setattr:动态添加一个方法或属性delatt......
  • 如何用Python开发一个命令行工具
    如何编写一个python命令行工具importargparsedefparse_args():parser=argparse.ArgumentParser()parser.add_argument("-nc","--test_a",type=int,default=10,help="testA")parser.add_argument(&quo......
  • Python高阶---魔法方法
    魔法方法:通过dir(函数名)查看到的方法中以双下划线开始,以双下划线结束的方法。=========================================classStudent:definit(self,name,age):"""负责初始化类的实例,实例是由__new__方法传递过来的,也就是这里的self:paramname::paramage:"""self......
  • Python文本统计与分析从基础到进阶
    本文分享自华为云社区《Python文本统计与分析从基础到进阶》,作者:柠檬味拥抱。在当今数字化时代,文本数据无处不在,它们包含了丰富的信息,从社交媒体上的帖子到新闻文章再到学术论文。对于处理这些文本数据,进行统计分析是一种常见的需求,而Python作为一种功能强大且易于学习的编程语言......
  • [数据分析与可视化] Python绘制数据地图3-GeoPandas使用要点-转载
    [数据分析与可视化]Python绘制数据地图3-GeoPandas使用要点 本文主要介绍GeoPandas的使用要点。GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoPandas。Ge......