欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲(chóng)Mitmproxy安裝使用學(xué)習(xí)筆記

 更新時(shí)間:2021年09月01日 16:54:40   作者:別呀  
這篇文章主要介紹了python爬蟲(chóng)Mitmproxy學(xué)習(xí)筆記分享,有需要的朋友可以收藏學(xué)習(xí)下,希望可以對(duì)你有所幫助,大家一起共同學(xué)習(xí),共同進(jìn)步

一、簡(jiǎn)介和安裝

1.1、概念和作用

概念

Mitmproxy是一個(gè)免費(fèi)的開(kāi)源交互式的HTTPS代理。MITM即中間人攻擊(Man-in-the-Middle Attack)。

作用

代理的作用,轉(zhuǎn)發(fā)請(qǐng)求,保障服務(wù)端與客戶端的通信

查看,記錄,修改數(shù)據(jù),引發(fā)服務(wù)端或客戶端的特定行為

補(bǔ)充:Mitmproxy與Fiddler、Charles異同
相同點(diǎn): a、都是用來(lái)捕獲 HTTP,HTTPS 請(qǐng)求的(其他協(xié)議比如 TCP,UDP,IP,ICMP 等就用Wireshark)
     b、抓包、斷點(diǎn)調(diào)試、請(qǐng)求替換、構(gòu)造請(qǐng)求、模擬弱網(wǎng)等

不同點(diǎn):a、Fiddler只能運(yùn)行在Windows系統(tǒng);Mitmproxy、Charles是跨平臺(tái)的,可運(yùn)行在Windows、Mac或Linux系統(tǒng)等。
    b、Fiddler、Mitmproxy開(kāi)源免費(fèi)、Charles是收費(fèi)的(可破解)。
    c、Mitmproxy支持命令行交互模式、GUI界面,F(xiàn)iddler、Charles僅支持GUI界面
(Fiddler底部有個(gè)命令行工具叫做 QuickExec)

1.2、安裝

pip  install  mitmproxy

pip install -i https://pypi.douban.com/simple  mitmproxy  

如果直接安裝的速度太慢了,可以在命令行中添加國(guó)內(nèi)的鏡像源加快速度,就是第二條命令。注意:python 版本不低于3.6

檢查是否安裝成功:命令行中輸入命令查看mitmdump --version

安裝成功后在Python安裝路徑Script路徑下可以找到 mitmdump.exe 、mitmproxy.exe 、mitmweb.exe 這三個(gè)可執(zhí)行文件。

1.3、工具介紹

mitmproxy:命令行界面,允許交互式檢查和修改http數(shù)據(jù)流,不支持windows

mitmweb: Web界面,用戶可以實(shí)時(shí)看到發(fā)生的請(qǐng)求,過(guò)濾請(qǐng)求,查看請(qǐng)求數(shù)據(jù)

mitmdump: 一個(gè)命令行工具,沒(méi)有界面,不能交互,但是可以通過(guò)啟動(dòng)參數(shù)并結(jié)合自定義腳本進(jìn)行定制化功能的實(shí)現(xiàn),是我們運(yùn)行的環(huán)境

這三個(gè)命令功能一致,且都可以加載自定義腳本,唯一的區(qū)別是交互界面的不同;

mitmproxy,mitmweb主要用來(lái)做調(diào)試,部署項(xiàng)目時(shí)使用mitmdump。

二、設(shè)置代理

2.1、PC端設(shè)置代理

開(kāi)啟代理時(shí)需要把其他的代理都關(guān)掉

開(kāi)啟代理

注:這時(shí)我們剛開(kāi)啟代理,還未安裝證書(shū),如果訪問(wèn)其他網(wǎng)址會(huì)出現(xiàn)報(bào)錯(cuò),如下圖所示:

2.2、PC端安裝證書(shū)

在代理狀態(tài)下,訪問(wèn)http://mitm.it/,PC端與移動(dòng)端操作相同。

(注意:設(shè)置完成后,瀏覽器打開(kāi)網(wǎng)頁(yè)發(fā)現(xiàn)都是未連接網(wǎng)絡(luò),需要先啟動(dòng)mitmweb.exe或者mitmdump.exe程序才能打開(kāi)鏈接)

根據(jù)自己的系統(tǒng)環(huán)境下載對(duì)應(yīng)的證書(shū)安裝

后面點(diǎn)擊下載的證書(shū)按步驟導(dǎo)入就可以了

2.3、移動(dòng)端設(shè)置代理

以夜神模擬器為例(注意保證手機(jī)和電腦在同局域網(wǎng)下)

設(shè)置完代理,打開(kāi)瀏覽器訪問(wèn)http://mitm.it/

下載安裝證書(shū)

三、 mitmdump

官方文檔:https://docs.mitmproxy.org/stable/addons-overview/

3.1、插件使用

  • 插件的本質(zhì)就是一個(gè)腳本文件,在Python中就是一個(gè)類的實(shí)例對(duì)象。
  • 此處插件是Counter實(shí)例對(duì)象,request方法是一個(gè)事件
  • 對(duì)于request事件,它的參數(shù)是一個(gè)mitmproxy.http.HTTPFlow的對(duì)象。

如:(官方文檔例子)

"""
Basic skeleton of a mitmproxy addon.
Run as follows: mitmproxy -s anatomy.py
"""
from mitmproxy import ctx
class Counter:
    def __init__(self):
        self.num = 0
    def request(self, flow):
        self.num = self.num + 1
        ctx.log.info("We've seen %d flows" % self.num)
addons = [
    Counter()
]

上面是一個(gè)簡(jiǎn)單的插件,用于跟蹤我們已經(jīng)看到的流(或更具體的HTTP請(qǐng)求)數(shù)量。每次看到新的流量時(shí),它都會(huì)使用mitmproxy的內(nèi)部日志記錄機(jī)制來(lái)宣布其提示??梢栽诮换ナ焦ぞ叩氖录罩局谢騧itmdump的控制臺(tái)中找到輸出。

可以使用mitmdump -s ./anatomy.py運(yùn)行插件(anatomy.py是創(chuàng)建的文件名)。

3.2、常用事件

def request(self, flow: mitmproxy.http.HTTPFlow):
​ """
​ The full HTTP request has been read.
​ """
def response(self, flow: mitmproxy.http.HTTPFlow):
​ """
​ The full HTTP response has been read.
​ """

3.2.1、request事件

(注意:記得在代理狀態(tài)下執(zhí)行,命令:mitmdump -s ./xxx.py

from mitmproxy import http
def request(flow:http.HTTPFlow):  #注意函數(shù)名request不能寫(xiě)錯(cuò)
    #獲取請(qǐng)求頭信息
    print('請(qǐng)求頭',flow.request.headers)
    #完整請(qǐng)求地址
    print('請(qǐng)求url',flow.request.url)
    #域名
    print('域名',flow.request.host)
    #請(qǐng)求路徑  url除域名之外的內(nèi)容
    print('請(qǐng)求路徑',flow.request.path)
    #返回MultiDictView類型的數(shù)據(jù),URL的鍵值參數(shù)
    print('url的鍵值參數(shù)',flow.request.query)
    #請(qǐng)求方法
    print('請(qǐng)求方法',flow.request.method)
    #請(qǐng)求類型
    print('請(qǐng)求類型',flow.request.scheme)
    #獲取請(qǐng)求內(nèi)容
    '''
    print('請(qǐng)求內(nèi)容',flow.request.get_text)
    print('請(qǐng)求內(nèi)容類型',type(flow.request.get_text))
    print('請(qǐng)求內(nèi)容bytes',flow.request.raw_content)
    print('請(qǐng)求內(nèi)容bytes',flow.request.get_content)
    '''
    if 'https://www.baidu.com' in flow.request.url:
        #取得請(qǐng)求參數(shù)wd的值
        print(flow.request.query.get('wd'))
        #取得所有請(qǐng)求參數(shù)
        print(list(flow.request.query.keys()))
        #修改請(qǐng)求參數(shù)
        flow.request.query.set_all('wd',['python'])
        #打印修改過(guò)后的參數(shù)
        print(flow.request.query.get('wd'))

3.2.2、response事件

(注意:記得在代理狀態(tài)下執(zhí)行,命令:mitmdump -s ./xxx.py

from mitmproxy import http
def response(flow:http.HTTPFlow):  #注意函數(shù)名response不能寫(xiě)錯(cuò)
    #狀態(tài)碼
    print('狀態(tài)碼',flow.response.status_code)
    #返回內(nèi)容,已解碼
    print('返回內(nèi)容',flow.response.text)
    #返回內(nèi)容, bytes類型
    print('返回內(nèi)容bytes類型',flow.response.content)
    #取得響應(yīng)的文本
    print('應(yīng)的文本',flow.response.get_text)
    #修改響應(yīng) 的文本
    flow.response.set_text('你的響應(yīng)內(nèi)容被修改了!')

3.3、下載圖片

(注意:記得在代理狀態(tài)下執(zhí)行,命令:mitmdump -q -s ./xxx.py 加-q會(huì)使打印更清晰可觀)

import os
index = 0
def response(flow):
    global index
    print('===========下載==============')
    print(flow.request.url)
    if flow.request.url[-3:] == 'jpg':
        dir = 'images'
        if not os.path.exists(dir):
            os.mkdir(dir)
        filename = dir+'/'+str(index)+'.jpg'
        with open(filename,'wb') as f:
            f.write(flow.response.get_content())
            index+=1

以上就是python爬蟲(chóng)Mitmproxy安裝使用學(xué)習(xí)筆記的詳細(xì)內(nèi)容,更多關(guān)于python爬蟲(chóng)Mitmproxy的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python之Socket網(wǎng)絡(luò)編程詳解

    python之Socket網(wǎng)絡(luò)編程詳解

    這篇文章主要為大家詳細(xì)介紹了python之Socket網(wǎng)絡(luò)編程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • python連接mongodb密碼認(rèn)證實(shí)例

    python連接mongodb密碼認(rèn)證實(shí)例

    今天小編就為大家分享一篇python連接mongodb密碼認(rèn)證實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python設(shè)計(jì)模式之組合模式原理與用法實(shí)例分析

    Python設(shè)計(jì)模式之組合模式原理與用法實(shí)例分析

    這篇文章主要介紹了Python設(shè)計(jì)模式之組合模式,結(jié)合具體實(shí)例形式分析了Python組合模式的相關(guān)概念、原理、定義及使用方法,需要的朋友可以參考下
    2019-01-01
  • Python+matplotlib繪制條形圖和直方圖

    Python+matplotlib繪制條形圖和直方圖

    Matplotlib是Python的繪圖庫(kù),它能讓使用者很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。本文將為大家介紹如何用matplotlib繪制條形圖和直方圖,感興趣的朋友可以學(xué)習(xí)一下
    2022-04-04
  • python 實(shí)現(xiàn)圖片批量壓縮的示例

    python 實(shí)現(xiàn)圖片批量壓縮的示例

    這篇文章主要介紹了python 實(shí)現(xiàn)圖片批量壓縮的示例,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • python爬取淘寶商品詳情頁(yè)數(shù)據(jù)

    python爬取淘寶商品詳情頁(yè)數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了python爬取淘寶商品詳情頁(yè)數(shù)據(jù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Windows下為Python安裝Matplotlib模塊

    Windows下為Python安裝Matplotlib模塊

    這篇文章主要介紹了如何在Windows下為Python安裝Matplotlib模塊的方法,非常的詳細(xì),而且附上了官方的下載地址,小伙伴們操作起來(lái)應(yīng)該毫無(wú)壓力了。
    2015-11-11
  • 簡(jiǎn)單解決Python文件中文編碼問(wèn)題

    簡(jiǎn)單解決Python文件中文編碼問(wèn)題

    這篇文章主要介紹了簡(jiǎn)單解決Python文件中文編碼問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • Windows平臺(tái)Python編程必會(huì)模塊之pywin32介紹

    Windows平臺(tái)Python編程必會(huì)模塊之pywin32介紹

    在Windows平臺(tái)上,從原來(lái)使用C/C++編寫(xiě)原生EXE程序,到使用Python編寫(xiě)一些常用腳本程序,成熟的模塊的使用使得編程效率大大提高了
    2019-10-10
  • 總結(jié)Pyinstaller的坑及終極解決方法(小結(jié))

    總結(jié)Pyinstaller的坑及終極解決方法(小結(jié))

    這篇文章主要介紹了總結(jié)Pyinstaller的坑及終極解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論