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:\Users\Dell\.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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM