zoukankan      html  css  js  c++  java
  • mitmproxy 使用笔记

    零、背景


    我之前写过关于 charles 的使用笔记,为什么现在又要来写同类型的 mitmproxy 工具呢?下面我会娓娓道来他比 charles 多出的强大功能。

    一、介绍


    mitmproxy 是一个支持 HTTP 和 HTTPS 的抓包程序, 类似 Fiddle、Charles , 只不过它通过 CMD 的形式操作。

    mitmproxy 还有两个关联组件:

    一个是 mitmdump ,它是 mitmproxy 的命令行接口,利用它可以对接 Python 脚本,实现监听后的处理;

    另一个是 mitmweb ,它是一个Web 程序,通过它以清楚地观察到 mitmproxy 捕获的请求。(跟 charles 差不多)

    二、安装与配置


    1、安装

    (1)方法一:通过 pip 安装

    pip3 install mitmproxy

    会自动附带安装 mitmdump 和mitmweb。

    (2)方法二:通过 brew 安装

    brew install mitmproxy

    2、配置

    抓 HTTPS 需要配置 CA 证书

    (1) 电脑端(以 mac 为例)

    运行起 mitmdump命令。

    然后找到 ~/.mitmproxy/mitmprox-ca-cert.pem 文件,双击,弹出 Keychain Access窗口,找到名为 mitmproxy 的 CA 证书,选择 Always Trust。

    (2) 手机端(以 Android 为例)

    同样将 ~/.mitmproxy/mitmprox-ca-cert.pem 文件发送给手机,在手机端打开后,填入证书名和点击确认按钮,如下图:

    三、使用


    下面的例子都以爬手机端为例,记得让手机和 PC 处于同一个局域网。

    1、mitmproxy

    1、命令行运行 mitmproxy命令,会启动一个代理,默认监听 8080 端口。

    2、手机设置里修改网络的代理设置:

    3、现在就可以在命令行里查看经过的网络请求了

    4、也可查看请求的具体详情:

    5、还有编辑、重发功能

    2、mitmweb

    可以理解成界面版的 mitmproxy。

    略。

    3、mitmdump

    上面介绍的功能其实 Fiddle、 Charles 也有,那么mitmproxy 的优势何在哪?

    这就要提到 mitmdump 了,有了它我们可以直接对接 Python 脚本对请求进行处理。比如对数据的解析、存储、修改等。

    示例 demo:

    
    from mitmproxy import ctx
    
    def request(flow):
        # 获取
        request = flow.request
        # 修改
        request.headers['User-Agent'] = 'MitmProxy'
    
        # 日志输出
        print(request.host)
        ctx.log.info(request.host)  # 颜色同上
        ctx.log.warn(request.host)  # 颜色:黄
        ctx.log.error(request.host)  # 颜色:红
    
    
    def response(flow):
        response = flow.response
        ctx.log.info(str(response.status_code))
    

    详细文档:https://mitmproxy.readthedocs.io/en/v2.0.2/mitmdump.html

    4、拓展 —— httpbin.org

    通过 mitmdump 对 request 做了修改,想要看修改后达成的效果,推荐客户端去访问这个网址:http://httpbin.org/get 即可知晓。

    四、坑


    1、爬的成功率不高,失败的会报错 :Cannot establish TLS with client……

    会是 https 抓不到的问题?但我的电脑和手机端的 CA 证书都装了呀,费解。

    解决方案:待解决


    参考资料

    《python 3 网络爬虫开发实践》

  • 相关阅读:
    Maven报错找不到jre
    SpringBoot学习记(一)第一个SpringBoot Web服务
    (转!)大话websocket
    (转!)Netdata---Linux系统性能实时监控平台部署
    Jmeter(四十三)WebSocket Sampler 和 Ajax Request
    Jmeter(四十二)Jmeter工作原理
    Centos7安装docker(转!)
    es6 数组去重
    数组对象根据某个值相同合并分组
    await在forEach不起作用解决【await is a reserved word】
  • 原文地址:https://www.cnblogs.com/xjnotxj/p/11532629.html
Copyright © 2011-2022 走看看