mitmproxy 采坑记录

13 篇文章 0 订阅
8 篇文章 0 订阅

最近在使用mitmproxy,遇到了一些问题,记录一下,希望帮到有缘人,我的环境是win10专业版

  • 问题1

    pip install mitmproxy 后使用mitmdump --version报错

    (py3_spider) F:\apps\interpreter>mitmdump --version
    Traceback (most recent call last):
      File "f:\apps\interpreter\python3.6.4\lib\runpy.py", line 193, in _run_module_as_main
        "__main__", mod_spec)
      File "f:\apps\interpreter\python3.6.4\lib\runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "F:\apps\interpreter\.virtualenv\py3_spider\Scripts\mitmdump.exe\__main__.py", line 4, in <module>
      File "f:\apps\interpreter\.virtualenv\py3_spider\lib\site-packages\mitmproxy\__init__.py", line 8, in <module>
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    AttributeError: module 'asyncio' has no attribute 'WindowsSelectorEventLoopPolicy'
    

    问题原因

    版本不兼容,pip install mitmproxy 默认安装最新版

    解决方法

    pip install mitmproxy==5.0.0, 问题解决

    H:\use_mitmproxy>mitmdump --version
    Mitmproxy: 5.0.0
    Python:    3.6.4
    OpenSSL:   OpenSSL 1.1.0j  20 Nov 2018
    Platform:  Windows-10-10.0.19041-SP0
    
  • 问题2

    cmd 命令行输入mitmdump -s demo1.py,提示No module named ‘mitmproxy_script

    H:\use_mitmproxy>mitmdump -s demo1.py
    Loading script ./demo1.py
    in script ./demo1.py: No module named '__mitmproxy_script__'
    Proxy server listening at http://*:8080
    

    问题表现为,demo1.py中的脚本逻辑不会执行

    问题原因

    被调用脚本中有导入自己写的包,命令行调用脚本引起的导包路径不存在的问题

    解决方法

    在被调用的脚本中导入自己写的模块前,添加如下代码

    import os, sys
    path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    if path not in sys.path:
        sys.path.append(path)
    
    from use_mitmproxy.tables import zf_Token
    

    最后一行是我自己的模块

  • 问题3

    脚本中监控的域名(网页),无响应内容,就像卡死了一样

    问题原因

    脚本def request(self, flow: mitmproxy.http.HTTPFlow):中写的有return 语句,阻止了请求,自然也就没有响应信息,就像下面这样

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import mitmproxy.http
    
    
    class Demo():
    
        def request(self, flow: mitmproxy.http.HTTPFlow):
            if "www.baidu.com" in flow.request.url:
                print(flow.request.url)
                return
            pass
    
        def response(self, flow: mitmproxy.http.HTTPFlow):
            pass
    
    
    addons = [
        Demo(),
    ]
    

    可以参考,下面的文章中关于针对 HTTP 生命周期的介绍,里面讲的比较详细

    使用 mitmproxy + python 做拦截代理

    解决方法

    删除return语句

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mitmproxy是一款功能强大的抓包工具,它支持HTTP、HTTPS和WebSocket的抓包和修改。对于WebSocket,mitmproxy提供了一种方便的方式来拦截和修改WebSocket通信,让你能够更好地了解WebSocket通信的细节。 要拦截WebSocket流量,你需要在mitmproxy的配置文件中进行相应的设置。具体步骤如下: 1. 打开mitmproxy的配置文件,一般位于~/.mitmproxy/config.yaml。 2. 添加以下代码: ``` websocket: - name: Intercept WebSocket traffic pattern: ws://.*example\.com/.* script: ~/intercept_websocket.py ``` 其中,pattern字段用于匹配WebSocket通信的地址,script字段用于指定处理WebSocket通信的脚本。 3. 创建一个名为intercept_websocket.py的脚本,用于处理WebSocket通信。在该脚本中,你可以使用mitmproxy提供的WebSocket类来处理WebSocket通信。 下面是一个简单的示例代码: ``` from mitmproxy import websocket def websocket_message(flow: websocket.WebSocketFlow): # 打印收到的消息 print(flow.messages[-1].content) # 修改消息内容 flow.messages[-1].content = "Hello, world!" ``` 该脚本中的websocket_message函数会在收到WebSocket消息时被调用,你可以在该函数中处理WebSocket通信。在上面的示例中,我们打印了收到的消息,并将消息内容修改为"Hello, world!"。 4. 重启mitmproxy,并在浏览器中访问WebSocket地址。此时,mitmproxy会拦截WebSocket通信,并调用intercept_websocket.py中的websocket_message函数来处理WebSocket消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值