mitmproxy(一)整理

本文深入讲解了mitmproxy工具包的三个核心组件:mitmproxy、mitmdump和mitmweb的功能与使用场景,详细解释了mitmproxy在Python3.6及更高版本环境下的安装与配置,并对HTTPFlow API进行了全面解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. mitmproxy工程工具包,主要包含了3个组件

  •    mitmproxy:拦截的http(s)记录控制台显示 【window不支持】
  •    mitmdump:命令行接口,可以对接python脚本,通过脚本实现监听后的处理,可定制个人需求
  •    mitmweb:web形式展示

2. 环境
  1.Python3.6及以上 (python -V查看版本)
   2.更新pip(避免部分依赖包未下载)
   3.安装mitmproxy
      pip install mitmproxy #安装依赖包的同时也将环境安装

3. mitmproxy关于httpflow的api说明

  

class         mitmproxy.flow.Error(msg:str,timestamp = None ) →无

    一个错误。

    这不同于协议错误响应(例如,HTTP代码500),它由普通HTTPResponse对象表示。该类负责指示不符合正常协议通信的错误,例如中断连接,超时,协议错误。

    揭示以下属性:

        msg:描述错误时间戳的消息:自时代以来的秒数

    get_state()

        检索对象状态。

    set_state(州)

        从get_state调用返回的数据加载对象状态。

HTTP

class  mitmproxy.http.HTTPRequest(first_line_format,method,scheme,host,port,path,http_version,headers,content,timestamp_start = None,timestamp_end = None,is_replay = False )

    一个mitmproxy HTTP请求。

    class method wrap(request )

        包裹一个现有的mitmproxy.net.http.Request。

    anticache()

        修改此请求以删除可能产生缓存响应的头文件。也就是说,我们删除ETags和If-Modified-Since头。

    anticomp()

        修改此请求以删除将压缩资源数据的标题。

    constrain_encoding()

        基于我们可以适当解码的限制允许的接受编码值。

    content

        用内容编码标题解码的HTTP消息体(例如gzip)
        举:     当内容编码无效且严格为True时,ValueError。

        另请参阅:raw_content,text

    cookies

        请求Cookie。

        一个空的MultiDictView物体,如果cookie怪物吃了他们全部。

    decode(strict = True )

        根据当前的Content-Encoding头解码主体,然后删除头。如果没有Content-Encoding标题,则不执行任何操作。
        举:     当内容编码无效且严格为True时,ValueError。

    encode(e )

        用编码e编码,其中e是“gzip”,“deflate”,“identity”或“br”。任何现有的内容编码都被覆盖,内容未被预先解码。
        举:     ValueError,当指定的内容编码无效时。

    first_line_format

        HTTP请求表单定义在RFC7230中。

        原始形式和星号形式被归为“相对”。

    get_content(strict:bool = True ) →bytes

        用内容编码标题解码的HTTP消息体(例如gzip)
        举:     当内容编码无效且严格为True时,ValueError。

        另请参阅:raw_content,text

    get_text(strict:bool = True ) →typing.Union [str,NoneType]

        HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
        举:     当内容编码或字符集无效且strict为True时,ValueError。

        另请参阅:content,raw_content

    headers

        消息头对象
        返回:     mitmproxy.net.http.Headers

    host

        目标主机。这可以从原始请求解析(例如,从请求行)或从代理模式推断(例如,透明模式下的IP)。GET http://example.com/ HTTP/1.1

        设置主机属性还会更新主机头(如果存在)。

    host_header

        请求的主机/授权头。

        此属性映射到request.headers["Host"]或 request.headers[":authority"]根据是HTTP / 1.x还是HTTP / 2.0。

    http_version

        版本字符串,例如“HTTP / 1.1”

    make(method:str,url:str,content:typing.Union [bytes,str] ='',headers:typing.Union [typing.Dict [str,AnyStr],typing.Iterable [typing.Tuple [bytes,bytes] ]] =())

        用于创建请求对象的简化API。

    method

        HTTP请求方式,例如“GET”。

    multipart_form

        将多部分表单数据作为MultiDictView对象。一个空的multidict.MultiDictView如果内容类型表示非表单数据或内容无法解析。

        键和值是字节。

    path

        HTTP请求路径,例如“/index.html”。保证从斜杠开始,除了可能只是“*”的OPTIONS请求。

    path_components

        URL的路径组件作为字符串元组。组件不引用。

    port

        目标端口

    pretty_host

        类似于host,但使用主机头作为附加的首选数据源。这在透明模式下很有用,host只有IP地址,但可能不会反映实际的目的地,因为主机头可能被欺骗。

    pretty_url

        喜欢url,但使用pretty_host而不是host。

    query

        请求查询字符串作为MultiDictView对象。

    raw_content

        原始(编码)HTTP消息体

        另请参阅:content,text

    replace(pattern,repl,flags = 0,count = 0 )

        将标头,请求路径和请求正文中的repl替换为正则表达式模式。编码内容将在更换前进行解码,然后重新编码。
        返回:     更换的数量。

    scheme

        HTTP请求方案,应为“http”或“https”。

    text

        HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
        举:     当内容编码或字符集无效且strict为True时,ValueError。

        另请参阅:content,raw_content

    timestamp_end

        最后一个字节时间戳

    timestamp_start

        第一个字节时间戳

    url

        URL字符串,由请求的URL组件构成

    urlencoded_form

        URL编码的表单数据作为MultiDictView对象。一个空的multidict.MultiDictView如果内容类型表示非表单数据或内容无法解析。

        从mitmproxy 1.0开始,键和值是字符串。

classmitmproxy.http.HTTPResponse(http_version,status_code,reason,headers,content,timestamp_start = None,timestamp_end = None,is_replay = False )

    一个mitmproxy HTTP响应。

    classmethodwrap(response )

        包裹一个现有的mitmproxy.net.http.Response。

    content

        用内容编码标题解码的HTTP消息体(例如gzip)
        举:     当内容编码无效且严格为True时,ValueError。

        另请参阅:raw_content,text

    cookies

        响应饼干。一个可能是空的 MultiDictView,其中的键是cookie名字符串,值是(value,attr)元组。值是一个字符串,而attr是包含cookie属性的MultiDictView。在attrs中,一元属性(例如HTTPOnly)由Null值指示。

        注意事项:
            更新attr

    decode(strict = True )

        根据当前的Content-Encoding头解码主体,然后删除头。如果没有Content-Encoding标题,则不执行任何操作。
        举:     当内容编码无效且严格为True时,ValueError。

    encode(e )

        用编码e编码,其中e是“gzip”,“deflate”,“identity”或“br”。任何现有的内容编码都被覆盖,内容未被预先解码。
        举:     ValueError,当指定的内容编码无效时。

    get_content(strict:bool = True ) →bytes

        用内容编码标题解码的HTTP消息体(例如gzip)
        举:     当内容编码无效且严格为True时,ValueError。

        另请参阅:raw_content,text

    get_text(strict:bool = True ) →typing.Union [str,NoneType]

        HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
        举:     当内容编码或字符集无效且strict为True时,ValueError。

        另请参阅:content,raw_content

    headers

        消息头对象
        返回:     mitmproxy.net.http.Headers

    http_version

        版本字符串,例如“HTTP / 1.1”

    make(status_code:int = 200,content:typing.Union [bytes,str] = b'',headers:typing.Union [typing.Dict [str,AnyStr],typing.Iterable [typing.Tuple [bytes,bytes]] ] =())

        用于创建响应对象的简化API。

    raw_content

        原始(编码)HTTP消息体

        另请参阅:content,text

    reason

        HTTP原因短语,例如“未找到”。这是始终None为HTTP2请求,因为HTTP2响应不包含原因短语。

    refresh(现在=无)

        这个相当复杂和启发式功能刷新服务器响应重播。

                它调整日期,到期和最后修改的标题。
                它调整cookie过期。

    replace(pattern,repl,flags = 0,count = 0 )

        将消息的头文件和正文中的repl替换为正则表达式模式。编码体将在更换前进行解码,之后重新编码。
        返回:     更换的数量。

    status_code

        HTTP状态代码,例如200。

    text

        HTTP消息体使用内容编码头(例如gzip)和内容类型头字符集进行解码。
        举:     当内容编码或字符集无效且strict为True时,ValueError。

        另请参阅:content,raw_content

    timestamp_end

        最后一个字节时间戳

    timestamp_start

        第一个字节时间戳

classmitmproxy.http.HTTPFlow(client_conn,server_conn,live = None,mode ='regular' )

    HTTPFlow是表示单个HTTP事务的对象的集合。

    request=无

        HTTPRequest 目的

    response=无

        HTTPResponse 目的

    error=无

        Error 目的

        请注意,Flow可以同时具有响应和错误对象。例如,当从服务器收到响应时,可能会发生这种情况,但发送回客户端时发生错误。

    server_conn=无

        ServerConnection 目的

    client_conn=无

        ClientConnection 目的

    intercepted=无

        这个流程目前被截获吗?

    mode=无

        代理层在接收此请求时有什么模式?

    backup(force = False )

        保存此Flow的备份,可以恢复使用对.revert()的调用。

    intercept()

        拦截此流。处理将停止,直到恢复被调用。

    kill()

        杀死这个请求。

    modified()

        这个流程是否被修改?

    resume()

        继续流动 - 在一个intercept()之后调用。

    revert()

        恢复到最后备份状态。

    replace(pattern,repl,* args,** kwargs )

        在流的请求和响应中用repl替换正则表达式模式。编码内容将在更换前进行解码,然后重新编码。

        返回所做的替换次数。

记录

类mitmproxy.log.Log(主)

    中央记录器,暴露于脚本作为mitmproxy.ctx.log。

    debug(txt )

        使用级别调试登录。

    info(txt )

        记录级别信息。

    alert(txt )

        记录级别警报。警报与信息具有相同的紧急性,但是向交互式工具发出信号,即使用户当前没有查看事件日志,用户的注意力也应被绘制到输出。

    warn(txt )

        记录级别警告。

    error(txt )

        记录级别错误。
 

 

<think>好的,用户需要的是在Mac上使用mitmproxy进行抓包的教程。首先,我需要整理现有的引用内容,看看有哪些相关信息可以利用。根据引用[1],用户提到了安装mitmproxy的三个工具:mitmdump、mitmproxy和mitmweb,并且提到了在macOS上的安装步骤以及启动mitmweb的方法。引用[3]提到安装证书的位置在~/.mitmproxy文件夹下,而引用[4]则解释了mitmweb的用途。 接下来,我需要将这些信息整合成个结构清晰的教程。可能需要分为安装、启动、配置设备代理、安装证书、抓包步骤和进阶使用几个部分。同时,用户可能需要知道如何查看本机IP地址,这在引用[1]中有提到使用ifconfig命令。 还要注意用户可能遇到的问题,比如证书安装失败或无法捕获HTTPS流量,这时候需要根据引用[3]和引用[4]中的信息提供解决方法。另外,引用[2]提到中文官网和文档,可能对用户有帮助,应该包含进去。 需要确保按照用户的要求使用正确的LaTeX格式,但在这个问题中主要是命令行和步骤说明,可能不太涉及数学公式,但如果有任何需要的地方,比如路径中的波浪线~,可能需要用$...$包裹。例如,路径是$~/.mitmproxy$。 最后,生成相关问题时要围绕教程内容,可能涉及不同工具的区别、HTTPS抓包问题、数据分析工具以及安卓模拟器的配置等。</think>### macOS上mitmproxy抓包使用教程 #### 、工具安装 通过Homebrew安装mitmproxy套件: ```bash brew install mitmproxy ``` 该命令会安装三个组件: - `mitmproxy`(命令行交互工具) - `mitmweb`(Web图形界面) - `mitmdump`(无界面批处理工具) 验证安装版本: ```bash mitmdump --version ``` 输出示例:`Mitmproxy: 6.0.2 Python: 3.9.2`[^1] #### 二、启动工具 1. **图形界面启动**: ```bash mitmweb ``` 启动后自动打开浏览器访问`http://127.0.0.1:8081`[^4],代理端口默认8080 2. **命令行界面启动**: ```bash mitmproxy -p 8080 ``` #### 三、设备配置 1. **查看本机IP**: ```bash ifconfig | grep "inet " | grep -v 127.0.0.1 ``` 示例输出:`inet 192.168.1.22` 2. **安卓/iOS设备设置**: - WiFi代理设置:服务器IP填写上述地址,端口8080 - 浏览器访问`mitm.it`安装证书(iOS需在设置中手动信任证书) #### 四、证书安装(Mac端) 证书存放路径:`$~/.mitmproxy/$`[^3] ```bash open ~/.mitmproxy # 打开证书目录 ``` 双击`mitmproxy-ca-cert.pem`安装到钥匙串,并设置为始终信任 #### 五、抓包流程 1. 启动mitmweb/mitmproxy 2. 配置设备代理 3. 安装CA证书 4. 在界面中实时查看流量: - 按`F`键快速过滤请求 - 按`Enter`查看请求详情 - 使用`L`键切换请求列表布局 #### 六、进阶用法 ```bash # 保存会话记录 mitmweb -w session.mitm # 重放流量 mitmweb -n -r session.mitm # 流量过滤 mitmweb --ignore-hosts '.*example.com' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangyingchengqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值