当前位置: 首页 > 知识库问答 >
问题:

米旋草硒

庄阿苏
2023-03-14

我正在尝试使用mitmproxy来捕获使用Selenium的python脚本生成的流量。我的脚本设法通过代理传递我的请求,但是流量看起来不像我期望的那样(见下文)。我的脚本如下:

#!/usr/bin/python3

from selenium import webdriver
from selenium.webdriver.common.proxy import *
from selenium.webdriver.firefox.options import Options


def main():

    options = Options()
    options.accept_untrusted_certs = True
    options.add_argument("--headless")
    myProxy = "0.0.0.0:8080"
    options.proxy = Proxy({
        'proxyType': ProxyType.MANUAL,
        'httpProxy': myProxy,
        'sslProxy': myProxy,
        'noProxy': ''
    })
    driver = webdriver.Firefox(options=options)

    driver.get('http://example.com')

    driver.quit()


if __name__=="__main__":
    main()

为了观察上述脚本生成的响应,我将mitmDum与以下脚本一起使用:

from mitmproxy import ctx

def response(flow):
    print(flow.response.data.content)

它产生以下输出:

127.0.0.1:35966: clientconnect
b\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff}TMs\xdb\x10\xbd\xfbWl\xd5K2#$'i\x1a\x8f-i\xfa\x99i\x0fi\x0fi\x0f=\x12\xb1\xb2\x98\x08P\x01\xc9\xf6t\xf2\xdf\xbbB\x8e#7\x99\x9a\x91\x81]x\xbb\xef\xb1\x90\xbd\x12\xa6\xf4\xbb\x16\xa1\xf6\xaa)f\xd9c\x87\\x143\xa0_\xe6\xa5o\xb0\xf8\xbc\xe5\x

flow.response.data.content似乎已加密。令人困惑的是,如果我简单地运行mitmproxy(不是mitmdump)并打开相应的流,我可以在交互式UI中观察到未加密的响应。另外,当我通过curl命令发出这个请求时:

curl --proxy http://0.0.0.0:8080 https://example.com

如我所料,我通过mitmproxy和mitmdump获得了未加密的流量。只有通过selenium mitmdump,我才会遇到这个问题。

我已将mitmagent证书添加到我的Firefox配置文件和系统中,但无济于事。

共有2个答案

吕高昂
2023-03-14

这个问题不是加密的问题,而是编码的问题。查看flow.response.data.headers可以发现响应具有gzip编码。使用以下带有mitmDump的脚本:

from mitmproxy import ctx
import zlib

def response(flow):

    try:
        content = zlib.decompress(flow.response.data.content, 16+zlib.MAX_WBITS)
    except:
        content = flow.response.data.content

    print(content)

正确解码数据以打印预期结果。在更强大的脚本中,我们可以通过从标头读取编码来决定如何解码数据。

郗欣嘉
2023-03-14

问题是您打印了 flow.response.data.内容.data 不是公共 API,请参阅文档)。如果您要改用 flow.response.content,则中释应自动解压缩内容:

def response(flow):
    print(flow.response.content)
 类似资料:
  • 草稿是没有日期的文章。它们是你还在创作中而暂时不想发表的文章。想要开始使用草稿,你需要在网站根目录下创建一个名为 _drafts 的文件夹(如在目录结构章节里描述的),并新建你的第一份草稿: |-- _drafts/ | |-- a-draft-post.md 为了预览你拥有草稿的网站,运行带有 --drafts 配置选项的 jekyll serve 或者 jekyll build。此两种方法

  • 青草课堂是使用PHP开发的基于腾讯云服务的开源在线教育网站,不过,目前它有许多功能有待完善。 前端UI框架: layui 前端框架: jquery 服务器支持: 腾讯云 验证码提供: Geetest 程序使用 WTFPL 协议进行许可,可以随意修改甚至商业使用

  • 我有一个简单的问题,困扰了我几天:什么是香草?有些人把它称为一个框架,你可以从官方页面下载一个库。 但当我检查一些示例或TodoMVC时,它们只是使用经典的raw JavaScript函数,甚至没有包括来自官方页面的库或任何东西。此外,官方网页上的链接“docs”指向JavaScript的Mozilla规范。 我的问题是:VanillaJS是raw JavaScript吗?如果是的话,为什么人们把

  • 本文向大家介绍clojure IntelliJ IDEA +草书,包括了clojure IntelliJ IDEA +草书的使用技巧和注意事项,需要的朋友参考一下 示例 下载并安装最新版本的IDEA。 下载并安装最新版本的Cursive插件。 重新启动IDEA后,Cursive应该可以立即使用。按照用户指南微调外观,键绑定,代码样式等。 注:像IntelliJ,Cursive是一个商业产品,有30

  • 我使用spring boot 1.5.6版本和thymeleaf 3.0.0。 我有一个控制器,很简单: start应用程序如下: 当我运行该应用程序时,我将http://localhost:8080放在chrome地址栏中。我得到的是你好世界。所以我想spring boot&thymeleaf模板解析器可以找到index.html文件。但是根本不解析和。我通过chrome开发工具检查了页面的源代

  • 输出旋钮的转动位置(0~100) 用法 Your browser does not support the video tag. 案例:保险箱 说明:使用旋钮制作密码器,通过显示屏显示密码。输入密码正确后指示灯亮起,按下按钮保险箱被开启。 所需模块:电源、蓝牙模块、按钮、旋钮、显示屏、双舵机驱动、舵机驱动包、转接线10cm。