zoukankan      html  css  js  c++  java
  • mitmproxy安装和简易使用

    一、安装

    前言:如果只是拿 mitmproxy 做一个替代 fiddler 的工具,没有什么定制化的需求,那完全只需要“安装 mitmproxy 工具”即可,去 mitmproxy 官网 上下载一个 installer 便可开箱即用,不需要提前准备好 python 开发环境。但显然,这不是这里要讨论的,我们需要的是“安装 python 的 mitmproxy 包”,本文只提及到python使用的mitmproxy脚本的简易使用(windows)

    1 安装mitmproxy

    直接使用pip安装即可

    pip install mitmproxy

    完成后,系统将拥有 mitmproxymitmdumpmitmweb 三个命令,由于 mitmproxy 命令不支持在 windows 系统中运行(这没关系,不用担心),我们测试一下安装是否成功,执行:

    mitmdump --version

    应当可以看到类似于这样的输出:  

    mitmdump

    2 配置mitmproxy

    用户目录下边

    C:UsersDell.mitmproxy  # 对应用户目录下都有一个.mitmproxy目录

     不知道用不用装,我是都安装了。

     2.1 控制面板==》 网络和 Internet ==》连接  ==》局域网设置   (本地pc设置)

    2.2谷歌浏览器:chrome://settings/system ==》打开您计算机的代理设置  ==》(浏览器拦截,列如抓取web)

    2.3 手机配置就是配置ip代理和端口

    打开手机浏览器:输入http://mitm.it/   

    根据图表点击自己手机对应的证书,进行安装。

     注意:ip地址都为局域网的该机器ip

    3 使用mitmproxy

    直接上代码吧

    from mitmproxy import ctx
    
    # 所有发出的请求数据包都会被这个方法所处理
    # 所谓的处理,我们这里只是打印一下一些项;当然可以修改这些项的值直接给这些项赋值即可
    def request(flow):
        # 获取请求对象
        request = flow.request
        # 实例化输出类
        info = ctx.log.info
        # 打印请求的url
        info(request.url)
    
        # 打印请求方法
        info(request.method)
        # 打印host头
        info(request.host)
        # 打印请求端口
        info(str(request.port))
        # 打印所有请求头部
        info(str(request.he
    aders))
        # 打印cookie头
        info(str(request.cookies))
    
    
    # # 所有服务器响应的数据包都会被这个方法处理
    # # 所谓的处理,我们这里只是打印一下一些项
    def response(flow):
        # 获取响应对象
        response = flow.response
        # 实例化输出类
        info = ctx.log.info
        # 打印响应码
        info(str(response.url))
        # # 打印所有头部
        info(str(response.headers))
        # # 打印cookie头部
        info(str(response.cookies))
        # 打印响应报文内容
        info(str(response.text))
    
        print(response.content)

    启动

    mitmdump.exe  -s   ****.py    上边文件的路径文件

    刷新浏览器 查看控制台打印的数据

    4 实践mitmproxy

    获取cookie或者请求头认证数据

    # -*- coding:utf-8 -*-
    import os
    import sys
    import json
    import base64
    
    import arrow
    import mitmproxy.http
    import redis
    from everett.ext.yamlfile import ConfigYamlEnv
    from everett.manager import ConfigManager
    from mitmproxy import ctx
    
    config = ConfigManager([
        ConfigYamlEnv('./config/common.yaml'),
        ConfigYamlEnv(
            './config/{}.yaml'.format(os.environ.get('BEAR_SEARCH_ENV')))
    ])
    
    
    redis_handler = redis.Redis(host=config(
        'redis_host', parser=str), port=config('redis_port', parser=str), db=15, password=config('redis_password', parser=str))
    
    
    class BearServer(object):
        def request(self, flow: mitmproxy.http.HTTPFlow):
            if 'authorization' in flow.request.headers:
                bear = flow.request.headers['authorization']
    
                if bear:
                    bear = bear.replace('Bearer ', '').strip()
                    bear_list = bear.split('.')
                    if len(bear_list) == 3:
                        bear_info = base64.b64decode(bear_list[1])
    
                        bear_info = json.loads(bear_info)
                        exp_time = int(bear_info.get('exp'))
                        iat_time = int(bear_info.get('iat'))
                        if exp_time > 0:
                            try:
                                redis_handler.zremrangebyscore(
                                    'bear_zset', 0, iat_time)
                                if not redis_handler.zscore('bear_zset', bear):
                                    redis_handler.zadd(
                                        'bear_zset', {bear: exp_time})
                            except Exception as e:
                                raise e
    
                            ctx.log.info('获取到的bear是:{}'.format(bear))
    
    
    addons = [
        BearServer()
    ]

     配合supervisor启动服务

    [program:bear_proxy_server]
    directory=/www/app_bear_proxy
    command=pipenv run mitmdump -s server.py -p 9900 --set block_global=false
    stderr_logfile=/var/log/supervisor/bear_proxy_server/bear_proxy_server_error.log
    stdout_logfile=/var/log/supervisor/bear_proxy_server/bear_proxy_server_out.log
    priority=1
    autostart=true
    autorestart=true
    stopasgroup=true
    killasgroup=true

    很多种用法

    参考:

    <wolfogre's blog:https://blog.wolfogre.com/posts/usage-of-mitmproxy/

    mitmproxy官方:https://docs.mitmproxy.org/stable/

  • 相关阅读:
    C++卷积神经网络实例:tiny_cnn代码具体解释(7)——fully_connected_layer层结构类分析
    不使用while,for,if等实现加法
    JavaScript包管理器综述
    hdu4455 dp
    Leetcode_num2_Maximum Depth of Binary Tree
    拉开大变革序幕(下):分布式计算框架与大数据
    TCP/IP协议组学习笔记
    Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例及配置文件具体解释
    UVA11770
    C++再次理解虚表
  • 原文地址:https://www.cnblogs.com/clbao/p/11597979.html
Copyright © 2011-2022 走看看