mitmproxy&mitmdump手机爬虫

mitmproxy的介绍和安装配置
  • mitmproxy的作用
    • mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler、Charles的功能,只不过它通过控制台的形式操作。
    • mitmproxy还有两个关联组件,一个是mitmdump,它是mitmproxy的命令行接口,利用它可以对接Python脚本,实现监听后的处理;另一个是mitmweb,它是一个Web程序,通过它以清楚地观察到mitmproxy捕获的请求。
    • 可以保存Http会话并进行分析
    • 模拟客户端发起请求,模拟服务器端返回的响应
    • 利用反向代理将流量发给指定的服务器
    • 支持Mac和Linux上的透明代理
    • 利用Python对Http请求和响应进行实时的处理
  • mitmproxy和mitmdump的区别
    • mitmproxy起到了代理服务的功能,手机和PC在同一个局域网内,可以将mitmproxy设置为手机的代理,这样数据都是通过mitmproxy妆发出去的,起到了中间人的作用
    • mtmdump可以实现将抓取到的请求和响应直接交给某个Python程序进行处理,比如提取和入库操作
  • mitmproxy相关链接
    • GitHub:https://github.com/mitmproxy/mitmproxy
    • 官方网站:https://mitmproxy.org
    • PyPI:https://pypi.python.org/pypi/mitmproxy
    • 官方文档:http://docs.mitmproxy.org
    • mitmdump脚本:http://docs.mitmproxy.org/en/stable/scripting/overview.html
    • 下载地址:https://github.com/mitmproxy/mitmproxy/releases
    • DockerHub:https://hub.docker.com/r/mitmproxy/mitmproxy
  • mitmproxy的安装
    • linux下使用pip安装
      • pip3 install mitmproxy
        • 这是最简单和通用的安装方式,执行完毕之后即可完成mitmproxy的安装,另外还附带安装了mitmdump和mitmweb这两个组件。
    • windows下安装
    • Linux下源码安装
      • 下载源码包,下载地址: https://github.com/mitmproxy/mitmproxy/releases/
        • 它包含了最新版本的mitmproxy和内置的Python 3环境,以及最新的OpenSSL环境
      • tar -zxvf mitmproxy-2.0.2-linux.tar.gz
      • sudo mv mitmproxy mitmdump mitmweb /usr/bin
  • 证书配置
    • 证书配置的说明
      • 对于mitmproxy来说,如果想要截获HTTPS请求,就需要设置证书。
      • mitmproxy在安装后会提供一套CA证书,只要客户端信任了mitmproxy提供的证书,就可以通过mitmproxy获取HTTPS请求的具体内容,否则mitmproxy是无法解析HTTPS请求的。
    • 证书配置步骤
      • 启动mitmdump
        • mitmdump
      • 找到家目录.mitmproxy目录里面的CA证书
        • mitmproxy-ca.pem        PEM格式的证书私钥
        • mitmproxy-ca-cert.pem       PEM格式证书,适用于大多数非Windows平台
        • mitmproxy-ca-cert.p12        PKCS12格式的证书,适用于Windows平台
        • mitmproxy-ca-cert.cer           与mitmproxy-ca-cert.pem相同,只是改变了后缀,适用于部分Android平台
        • mitmproxy-dhparam.pem     PEM格式的秘钥文件,用于增强SSL安全性
  • 在各平台上配置证书的过程
    • Windows平台
      • 1.双击mitmproxy-ca.p12,会出现导入证书的页面向导
      • 2.直接点击下一步,会出现密码设置的提示,这里不需要设置密码,直接点击下一步按钮即可
      • 3.接下来选择证书的存储区域。这里点击第二选项,将所有的证书都放入下列存储,然后点击浏览按钮,选择证书的存储位置为收信人的根证书颁发急购,接着点击确定按钮,点击下一步
      • 4.过程中出现安全警告直接点击是
    • Android
      • 1.在Android手机上,需要将证书mitmproxy-ca-cert.pem文件发送到手机上,例如直接复制文件。
      • 2.接下来,点击证书,便会出现一个提示窗口,这时输入证书的名称,然后点击“确定”按钮即可完成安装。
    • iOS
      • 1.将mitmproxy-ca-cert.pem文件发送到iPhone上,推荐使用邮件方式发送,然后在iPhone上可以直接点击附件并识别安装。
      • 2.点击“安装”按钮之后,会跳到安装描述文件的页面,点击“安装”按钮,此时会有警告提示,继续点击右上角的“安装”按钮,安装成功之后会有已安装的提示。
      • 3.如果你的iOS版本是10.3及以上版本,还需要在“设置”→“通用”→“关于本机”→“证书信任设置”将mitmproxy的完全信任开关打开。
mitmproxy的使用
  • 启动mitmproxy服务
    • mitmproxy    这样就会在8080端口上运行一个代理服务
  • 将mitmproxy设置为手机端的代理
    • 将PC的ip设置为手机的代理ip,Settings > Wi-Fi > hold current Wi-Fi network > Modify Network > Show advanced options > Proxy settings
  • 发送请求
    • 在手机端进行网络请求,便可以在mitmproxy的界面上看到对应的请求
  • 查看/处理请求和响应
    • 查看请求的详情
      • 光标移动到对应的请求位置,点击ENTER
    • 在请求中查看Request/Response/Detail
      • 将光标移动到对应的分栏上,点击Tab
    • 重新编辑请求
      • 1.在请求中,点击e键进行编辑
      • 2.按照高亮的部分,选择想要编辑的内容(比如: q:修改请求方参数,m:修改请求方式)
        • 进入修改页面后,可以直接对内容进行修改
        • 点击a可以增加一行参数
        • 修改完成后点击Esc退出修改,q返回上一级页面
      • 3.敲击a进行修改的保存
      • 4.对修改后的请求重新发起请求
mitdump的使用
  • 编写请求和响应的处理脚本
    • 日志输出
      • 介绍
        • ctx模块提供了不同等级的log将会打印不一样的颜色
      • 使用示例
        • from mitmproxy import ctx 
    • def request(flow):
      • flow.request.headers['User-Agent'] = 'MitmProxy'
      • ctx.log.info("info")
      • ctx.log.warn("warn")
      • ctx.log.error("error")
  • Request对象处理
    • 介绍
      • 我们可以通过request() 方法实现对请求进行修改
      • request对象包含的属性: url、headers、cookies、host、method、scheme、port
    • 使用示例
      • def request(flow):
        • request = flow.request
        • print(request.url)
  • Response对象处理
    • 介绍
      • 可以通过response() 方法实现对响应的操作,比如入库等操作
      • response对象包含的属性: status_code、deaders、cookies、text
    • 使用示例
      • def response(flow):
        • response = flow.response
        • print(response.text)
  • 启动mitmproxy服务
    • mitmdump  [OPTIONS]
      • -w: 可以指定将接货的数据都保存到此文件中
      • -s: 可以指定scripts.py 脚本文件,用来处理请求和响应,它需要放在当前命令的执行目录下
  • 将mitmdump设置为手机端的代理
    • 将PC的ip设置为手机的代理ip,Settings > Wi-Fi > hold current Wi-Fi network > Modify Network > Show advanced options > Proxy settings
  • 发送请求
    • 在手机端进行网络请求,便可以在mitmdump的日志中便可以看见对应的请求



刘小恺(Kyle) wechat
如有疑问可联系博主