首页 > 编程语言 >代理 mitmproxy Python启动时,配置 block_global 参数,使用笔记(三)

代理 mitmproxy Python启动时,配置 block_global 参数,使用笔记(三)

时间:2024-12-17 21:43:31浏览次数:4  
标签:Python global mitmproxy master options block listen

代理 mitmproxy Python启动时,配置 block_global 参数,使用笔记(三)

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

注意:使用 Python的非命令行启动,之前的文章已经说过了,这里就不赘述,需要的可 前往这里查看,且本片代码以此篇文章中的方式三为例来说明

方案1.使用 master.options.update()(推荐)

此种方式其实不只是配置 block_global参数,其他参数也能配置,如listen_host,listen_port等,但需要注意的是,如果非本机设备连接,则listen_host要使用本机实际 IP,而不是127.0.0.1localhost

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File        : test_mitmproxy_block_global.py
@ Author      : yqbao
@ Version     : V1.0.0
@ Description :
"""
from mitmproxy.options import Options
from mitmproxy.tools.dump import DumpMaster


async def config_mitmproxy(listen_host='127.0.0.1', listen_port=8888):
    """配置 mitmproxy 参数与启动"""
    options = Options()  # 为啥不在这个 Options 中配置 block_global ? 因为里面没有这个参数。
    script = Counter()  # 插件
    addons = [script]

    master = DumpMaster(options)
    # 更新配置参数
    master.options.update(listen_host=listen_host, listen_port=listen_port, block_global=False)
    master.addons.add(*addons)
    try:
        await master.run()  # 启动 mitmproxy 主循环
    except KeyboardInterrupt:
        master.shutdown()  # 当手动中断时,关闭 master


方案2.替换默认的 block 插件

此方案实际是复制默认的 block 插件,然后唯一的改动就是将 block_global 默认值 从 True 改成了 False,同样需要注意,listen_host使用本机实际 IP

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File        : test_mitmproxy_block_global.py
@ Author      : yqbao
@ Version     : V1.0.0
@ Description :
"""
from mitmproxy import ctx,http
from mitmproxy.options import Options
from mitmproxy.proxy import mode_specs
from mitmproxy.tools.dump import DumpMaster


class Block:
    def load(self, loader):
        loader.add_option(
            "block_global",
            bool,
            False,
            """
            Block connections from public IP addresses.
            """,
        )
        loader.add_option(
            "block_private",
            bool,
            False,
            """
            Block connections from local (private) IP addresses.
            This option does not affect loopback addresses (connections from the local machine),
            which are always permitted.
            """,
        )

    def client_connected(self, client):
        parts = client.peername[0].rsplit("%", 1)
        address = ipaddress.ip_address(parts[0])
        if isinstance(address, ipaddress.IPv6Address):
            address = address.ipv4_mapped or address

        if address.is_loopback or isinstance(client.proxy_mode, mode_specs.LocalMode):
            return

        if ctx.options.block_private and address.is_private:
            logging.warning(
                f"Client connection from {client.peername[0]} killed by block_private option."
            )
            client.error = "Connection killed by block_private."

        if ctx.options.block_global and address.is_global:
            logging.warning(
                f"Client connection from {client.peername[0]} killed by block_global option."
            )
            client.error = "Connection killed by block_global."


async def config_mitmproxy(listen_host='127.0.0.1', listen_port=8888):
    """配置 mitmproxy 参数与启动"""
    options = Options(listen_host=listen_host, listen_port=listen_port)
    script = Block()  # 插件
    script1 = Counter()  # 插件
    addons = [script, script1]

    master = DumpMaster(options)
    # 需要先查找默认的 block 插件,并将其删除后,才添加修改后的 block 插件
    block_addon = master.addons.get("block")
    master.addons.remove(block_addon)

    master.addons.add(*addons)
    try:
        await master.run()  # 启动 mitmproxy 主循环
    except KeyboardInterrupt:
        master.shutdown()  # 当手动中断时,关闭 master

mitmproxy 官方文档
本文章的原文地址
GitHub主页

标签:Python,global,mitmproxy,master,options,block,listen
From: https://www.cnblogs.com/yqbaowo/p/18613323

相关文章

  • 基于python+django的家教预约网站-家教信息管理系统
    该系统是基于python+django开发的家教预约网站。是给师妹做的课程作业。大家在学习过程中,遇到问题可以在github给作者留言。效果演示前台地址:http://jiajiao.gitapp.cn后台地址:http://jiajiao.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址ht......
  • 2024年最值得使用的18个Python库
    如果说Python是一把锋利的瑞士军刀,那么Python库就是它的多功能模块,让编程变得更加高效和简单。在2024年,Python生态依然蓬勃发展,各类新兴与经典库层出不穷,究竟有哪些库值得我们投入时间学习和使用?这一份清单将成为你提升生产力的利器!2024年,哪些Python库在实际开发中最具价值?无......
  • 《用Python解锁PC传感器数据采集的奇妙世界》
    《用Python解锁PC传感器数据采集的奇妙世界》一、Python采集PC传感器数据的背景与意义(一)物联网发展下的现状(二)Python介入的意义二、Python采集PC传感器数据的国内外研究现状(一)国外研究情况(二)国内研究情况三、Python采集PC传感器数据的常用库和工具(一)ctypes......
  • 【如何获取股票数据16】Python、Java等多种主流语言实例演示获取股票行情api接口之沪
    最近一两年内,股票量化分析逐渐成为热门话题。而从事这一领域工作的第一步,就是获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的主要任务是从这些数据中提炼出有价值的信......
  • 学习Python第三天
    第一课:Python中的注释一、什么是注释:是指程序员在代码中对代码功能解释说明的标注行文字,可以提高代码的可读性。注释的内容将被Python解释器忽略,不被计算机执行。二、注释的分类:单行注释:以“#”作为单行注释的符号,作用范围内从“#”开始直到换行为止;多行注释:Python中并没有单......
  • 文件拖动到 Python 脚本上执行
    将文件拖拽到.py文件上以处理它(从DropHandler说起)windows默认情况下,拖动文件到一个python脚本上面,会把这个python脚本挤走,而不会执行python脚本。因为windows认为python脚本不是一个合法的可拖放的目的对象(droptarget)观察能够在win10下支持拖拽效果的的两类文件.vbs和bat它......
  • python毕设 健身俱乐部信息管理程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于健身俱乐部信息管理的研究,现有研究多集中于传统的运营模式、营销等方面12。专门针对利用Python进行健身俱乐部信息管理系统构建与......
  • Python字符串及正则表达式(十):字符串常用操作、字符串编码转换
    前言:在编程的世界里,字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果,还是火车站的列车时刻表,这些信息最终都需要以文本的形式呈现给用户。这些文本的背后,是程序经过精确计算、逻辑判断和数据整理的结果,它......
  • Python所有方向的学习路线,千万别做无用功了,正确掌握学习方法!
    一直以来都有很多想学习Python的朋友们问我,学Python怎么学?爬虫和数据分析怎么学?想学习web开发能教教我吗?我先告诉大家一个点,不管你是通过各种渠道自学,还是说你大学在学习,甚至于说有别的编程的基础。你一定要注重一个东西:完整的知识体系。这里插播一条粉丝福利,如果你正在学习......
  • Python爬虫接单多少钱(爬虫接单一个月能赚多少)?你绝对想不到!!!
    一、Python爬虫怎么赚钱?1、找爬虫外包工作网络爬虫最通常的挣钱方式通过外包网站,做中小规模的爬虫项目,向甲方提供数据抓取,数据结构化,数据清洗等服务。新入行的程序员大多数都会先尝试这个方向,直接靠技术手段挣钱,也是技术人员最擅长的方式,但是由于竞争人员太多,价格可能不是......