zoukankan      html  css  js  c++  java
  • mitmproxy 使用mitmdump 过滤请求

    mitmproxy 抓包工具,优点可以使用python进行二次开发,或者进行接口的mock

    官网地址:https://www.mitmproxy.org/

    打算用这个最初的需求是,想对app做接口测试,但是app的接口有200多个,这么多接口,如果人工的的抓包或者获取,很浪费人力,那能不能自动的抓取到所有的请求呢?

    答案是可以,使用mitmdump -s xx.py 可以过滤我们想要的数据,比如存到数据库之类的

    from mitmproxy import ctx

    # 所有的请求都会经过request
    def request(flow):
        info = ctx.log.info
        d = {}
        if flow.request.host == 'xxxxx':  # 过滤请求,如果host是xxx则写入请求相关信息
            d['url'] = flow.request.url
            d['host'] = flow.request.host
            d['headers'] = flow.request.headers
            d['method'] = flow.request.method
            if flow.request.method == 'POST':
            d['body'] = flow.request.get_text()
            fp = open("/Users/dcc/Desktop/aaaa.txt",'a+',encoding='utf-8')
            fp.write(str(d) + ' ')

    # 所有的请求都会经过request
    def response(flow):
        info = ctx.log.info
        # info(str(flow.response.headers))
        # info(str(flow.response.cookies))
        info(str(flow.response.text))
        fp = open("/Users/dcc/Desktop/bbbb.txt",'a+',encoding='utf-8')
        fp.write(str(flow.response.text) + ' ')

    那既然能拿到所有的请求是不是可以为所欲为了呢?具体的应用场景可以自行尝试哈!比如爬虫?

    MOCK功能:

        mock功能也是类似,在request里判断发送的请求是不是自己想要的,然后进行修改

    修改请求:    

    def request(flow):
        if flow.request.url.startswith("http://xxx.x.xxx.com.cn/xxx/xxxx/xxxx"):
            ctx.log.info("modify request form")
        if flow.request.urlencoded_form:
            flow.request.urlencoded_form["code"] = "11111"
        else:
            flow.request.urlencoded_form = [
                ("abc", "1234"),("name","name")
            ]

    修改返回:

    def response(self, flow):
        if flow.request.url.startswith("https://xxx.x.xxx.com.cn/activityInfo/getPrizeInfo=="):
        //获取响应的json字符串,转成python对象进行解析和修改
            response = json.loads(flow.response.get_text())
            response['limitCount'] = 1
            //修改完成后,奖python对象转成json字符串,set进请求的响应体重发送给客户端
            flow.response.set_text(json.dumps(response))
            ctx.log.info('modify limitCount')

    学习最大的乐趣在于分享,我是绝世老中医,欢迎来诊 个人qq:1978529954
  • 相关阅读:
    [USACO07JAN]平衡的阵容Balanced Lineup
    洛谷 P4389 付公主的背包 解题报告
    多项式Ⅱ
    半平面交 板子
    Problem C Dist 解题报告
    二维凸包的板子
    洛谷 P4841 城市规划 解题报告
    广二模拟赛 Problem A: 青春野狼不做理性小魔女的梦 解题报告
    CF 997E 解题报告
    洛谷 P4244 [SHOI2008]仙人掌图 II 解题报告
  • 原文地址:https://www.cnblogs.com/jueshilaozhongyi/p/11890320.html
Copyright © 2011-2022 走看看