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) + '\n')

 

# 所有的請求都會經過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) + '\n')

那既然能拿到所有的請求是不是可以為所欲為了呢?具體的應用場景可以自行嘗試哈!比如爬蟲?

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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM