mitmproxy,一个超牛的 APP 爬虫抓包神器

mitmproxy 抓包工具的使用

mitmproxy 官网: https://mitmproxy.org/

mitmproxy 就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。

安装

使用 pip 安装

# --user 表示安装到用户的目录中去
pip3 install mitmproxy --user

也可以直接使用 homebrew 安装,但是还是建议使用 pip 安装,且使用 pipenv 虚拟环境安装,方便管理依赖包。

brew install mitmproxy       

查看是否安装成功

# 使用以下三个命令中的任意一个即可,这三个命令返回的结果均一致
mitmproxy --version
mitmdump --version
mitmweb --version

# Mitmproxy: 6.0.2  # mitmproxy 的版本号
# Python:    3.8.8  # python 的版本号
# OpenSSL:   OpenSSL 1.1.1i  8 Dec 2020  # openssl 协议
# Platform:  macOS-10.16-x86_64-i386-64bit  # 本地电脑型号

启动

mitmproxy 有三种启动命令:

  1. mitmweb:提供了一个 web 页面,交互界面可以通过 localhost:8081 去访问。

  2. mitmproxy:提供命令行界面,可以通过命令过滤请求。

  3. mitmdump:可以通过执行一个 python 脚本去运行

运行在 8888 端口上运行

mitmproxy -p 8888

也可以自己写一个 python 脚本,然后通过 mitmdump 去执行这个 python 脚本

mitmdump -p 8888 -s script.py

# 还可以将截获的数据保存到文件中,比如如下,保存到 outfile.txt 文件中
mitmdump -w outfile.txt

也可以通过浏览器界面去运行

    mitmweb -p 8888       

手机端配置

  1. 将手机和电脑连接到同一个 Wi-Fi 中。

  2. 然后找到电脑的 ip 地址,比如我这里是:192.168.0.101

# macOS 下可通过以下命令查看
ifconfig | grep "inet"
  1. 给手机 Wi-Fi 配置代理。

这里以 iPhone 作为演示讲解。

在手机上找到 Wi-Fi 设置,点进去,选择 配置代理,改为 手动,修改 服务器 这一项,改为电脑的 ip 地址,比如我这里是 192.168.0.101,端口改成 8888,然后点右上角的 存储,之后在浏览器中访问 mitm.it 链接地址(建议使用 iPhone 自带的 Safari 浏览器),选择你自己的机型对应的 Get mitmproxy-ca-cert.pem 进行下载(我这里选择的是 Apple),然后去 设置-通用-描述文件 中找到刚刚下载的描述文件进行安装。

  1. 开启证书

打开 设置-通用-关于本机-证书信任设置,开启 mitmproxy 证书。现在就可以打开任意一个 app 尝试一下抓包啦!

关闭 mitmproxy

电脑端可以直接按 Ctrl+c 退出 mitmproxy,手机端需要关闭掉刚刚对 Wi-Fi 设置的代理。

使用 mitmproxy 命令行运行 mitmproxy 时的快捷键

快捷键说明
j/k上下移动
tab 或者方向键进行界面切换
z清屏
f用来过滤请求地址
q退出当前界面

script.py 示例

import json
import re
from mitmproxy import ctx

def request(flow):
    flow.request.headers['User-Agent'] = 'MitmProxy'  # 更改请求头
    ctx.log.info(str(flow.request.headers))  # 白色日志
    ctx.log.warn(str(flow.request.headers))  # 黄色日志
    ctx.log.error(str(flow.request.headers))  # 红色日志

    request = flow.request
    info = ctx.log.info
    info(request.url)
    info(str(request.headers))
    info(str(request.cookies))
    info(request.host)
    info(request.method)
    info(str(request.port))
    info(request.scheme)
    
    # 可以更改请求的 url
    url = 'https://httpbin.org/get'
    flow.request.url = url

def response(flow):
    # 提取请求的 url 地址
    request_url = flow.request.url
    print('请求到的地址为 =====> %s' % request_url)

    # 通过 jd 字符串,过滤出 京东 App 的请求和返回数据
    if bool(re.search(r'jd', request_url)):
        response_body = flow.response.text
        print('返回体为 ====> %s' % response_body)

        data = json.loads(response_body)
        print('json 格式的数据为 =====> ' % data)
        ware_infos = data.get('wareInfo')
        goods_info = {}

        if ware_infos is not None:
            for ware_info in ware_infos:
                goods_info["wareId"] = ware_info.get("wareId")
                goods_info["wname"] = ware_info.get("wname")
                goods_info["jdPrice"] = ware_info.get("jdPrice")
                goods_info["goodrate"] = ware_info.get("good")
                goods_info["reviews"] = ware_info.get("reviews")
                goods_info["shopId"] = ware_info.get("shopId")
                goods_info["ShopName"] = ware_info.get("goodShop").get("goodShopName")
                print(goods_info)

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值