• 使用mitmproxy和python脚本自动抓包小程序数据


    mitmproxy

    1、概念:通过控制台来操作的支持http/https的抓包程序。(类似于charles是图形界面形式的抓包程序)

    2、安装:通过python的包管理工具安装:pip3 install mitmproxy

    3、相关组件:mitmdump(可以利用其对接python脚本,实现对mitmproxy抓包出的数据用python脚本进行处理)

    4、配置https证书:mitmproxy在安装启动后会生成一套证书,在手机端和电脑端安装和信任mitmproxy提供的证书,mitmproxy就可以通过转发获取https请求的解密内

    4.1、配置证书步骤:

    a.启动mitmdump:在终端命令行里输入:mitmdump

    b.在/Users/dannihong/.mitmproxy目录下可以看到mitmproxy提供的许多证书,不同的证书适用于不同的开发平台(以下步骤针对的是mac系统和iphone手机配置证书的过程)

     

    c.Mac端配置: 双击mitmproxy-ca-cert.pem,弹出‘钥匙串访问’窗口,找到刚刚双击的证书文件,双击修改其信任设置为‘始终信任’

    d.Iphone端配置:将刚才的mitmproxy-ca-cert.pem隔空投送至iphone,在‘设置’->‘通用’->‘描述文件’里查看刚刚接收的证书文件,选择安装

      

    这里要注意的是,在IOS10.3版本以后,还要设置‘证书的信任设置’:‘设置’->‘关于本机’->‘证书信任设置’

      

     5、使用mitmproxy

    5.1、首先确保手机和电脑连接在同一个局域网内。电脑端运行mitmproxy,相当于开启了一个http/htpps的代理服务。这样手机端在访问互联网数据时,访问服务器request和response的数据都会被mitmproxy获取。

    a.获取电脑当前局域网的ip

    b.手机端配置:在连接的相同的WIFI下,配置HTTP代理:服务器ip就是刚刚获取的电脑局域网ip:192.168.124.4,端口:8080(因为mitmproxy默认在8080端口运行)。

      

    5.2、开启mitmproxy代理:

    有两种命令方式:

    a.终端输入‘mitmproxy’命令:终端会进入一个新的窗口,里面显示手机访问互联网的每个请求

    (左下角显示的是请求数量和当前光标所在的请求位置;右下角表示当前在8080端口运行)

    (回车键进入当前所在的请求详情;tab键可以来回切换Request、Response、Detail内容;通过e、q、a、r键等可以对请求内容进行编辑和重新发送请求,具体用法可以网上搜索mitmproxy的用法)

    b.这篇主要想讲的是通过mitmdump命令结合python脚本实现对数据的自动化处理

    终端输入‘mitmdump’命令,也可以开启mitmproxy代理,在当前终端窗口显示手机端请求内容。

    6、mitmdump常用命令

    mitmdump -w resfile:启动mitmproxy代理,并将抓取的数据保存在resfile文件里

    mitmdump -s script.py:启动mimproxy代理,并将抓取的数据通过script.py里的脚本进行处理

    7、python脚本的写法(两个方法里的形参flow都是HTTPFlow对象)

    a.通过定义request方法可以打印出请求头的信息

    1 def request(flow):
    2     print(flow.request.headers)

    request还有url、cookies、host、method、port、scheme等属性均可输出查看

    b.通过定义response方法可以打印出响应的内容

    1 def response(flow):
    2     print(flow.response.text)

    response有status_code、headers、cookies等属性。这里对我们比较有用且需要处理的信息就是flow.response.text。

    c.对抓包数据的处理

    import json
    import csv
    
    def response(flow): url
    = 'https://shopping.ele.me/h5/mtop.venus.shopcategoryservice.getcategorydetail' if flow.request.url.startswith(url): # 筛选出需要的接口进行分析 text = flow.response.text # 接口返回的内容 res_dict = json.loads(text) # 字符串转字典 data = res_dict['data']['data'][0]['foods'] # 获取商品内容 csvfile = open('test.csv', 'a') # 处理后的数据写入csv文件 csv_wri = csv.writer(csvfile) for food in data: # 遍历商品内容 cate2id = food['categoryIds'][0] # eleme平台对应的二级类目id currentPrice = food['currentPrice'] # 单位是元 defaultSaleUnit = food['defaultSaleUnit'] # 销售规格 leftNum = food['leftNum'] # 库存 monthSell = food['monthSell'] # 月销量 name = food['name'] # 商品名 photos = food['photos'] # 商品图片 upc = food['upc'] # 商品upc csvItem = [upc, name, defaultSaleUnit, currentPrice, leftNum, monthSell, cate2id, photos] csv_wri.writerow(csvItem) csvfile.close()

     8、运行结果

    写完python脚本后,在终端命令行里输入mitmdump -s script.py命令后,操作手机端访问饿了么小程序的某家商铺数据,就可以看到输出至csv文件的内容如下:

  • 相关阅读:
    Android系统源代码下载
    Windows Embedded Compact 7初体验
    windowsmobile 开发环境
    Windows X64汇编入门(1)
    汇编语言的Hello World
    如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
    音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw
    汇编开发环境
    DirectX
    关于DirectShow SDK 和Windows SDK,及DirectX SDK
  • 原文地址:https://www.cnblogs.com/hongdanni/p/13460698.html
Copyright © 2020-2023  润新知