婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python爬蟲Mitmproxy安裝使用學習筆記

python爬蟲Mitmproxy安裝使用學習筆記

熱門標簽:高德地圖標注收入咋樣 沈陽防封電銷電話卡 鶴壁手機自動外呼系統違法嗎 萊蕪電信外呼系統 地圖標注多個 B52系統電梯外呼顯示E7 怎么辦理400客服電話 企業微信地圖標注 銀川電話機器人電話

一、簡介和安裝

1.1、概念和作用

概念

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

作用

代理的作用,轉發請求,保障服務端與客戶端的通信

查看,記錄,修改數據,引發服務端或客戶端的特定行為

補充:Mitmproxy與Fiddler、Charles異同
相同點: a、都是用來捕獲 HTTP,HTTPS 請求的(其他協議比如 TCP,UDP,IP,ICMP 等就用Wireshark)
     b、抓包、斷點調試、請求替換、構造請求、模擬弱網等

不同點:a、Fiddler只能運行在Windows系統;Mitmproxy、Charles是跨平臺的,可運行在Windows、Mac或Linux系統等。
    b、Fiddler、Mitmproxy開源免費、Charles是收費的(可破解)。
    c、Mitmproxy支持命令行交互模式、GUI界面,Fiddler、Charles僅支持GUI界面
(Fiddler底部有個命令行工具叫做 QuickExec)

1.2、安裝

pip  install  mitmproxy

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

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

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

安裝成功后在Python安裝路徑Script路徑下可以找到 mitmdump.exemitmproxy.exemitmweb.exe 這三個可執行文件。

1.3、工具介紹

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

mitmweb: Web界面,用戶可以實時看到發生的請求,過濾請求,查看請求數據

mitmdump: 一個命令行工具,沒有界面,不能交互,但是可以通過啟動參數并結合自定義腳本進行定制化功能的實現,是我們運行的環境

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

mitmproxy,mitmweb主要用來做調試,部署項目時使用mitmdump。

二、設置代理

2.1、PC端設置代理

開啟代理時需要把其他的代理都關掉

開啟代理

注:這時我們剛開啟代理,還未安裝證書,如果訪問其他網址會出現報錯,如下圖所示:

2.2、PC端安裝證書

在代理狀態下,訪問http://mitm.it/,PC端與移動端操作相同。

(注意:設置完成后,瀏覽器打開網頁發現都是未連接網絡,需要先啟動mitmweb.exe或者mitmdump.exe程序才能打開鏈接)

根據自己的系統環境下載對應的證書安裝

后面點擊下載的證書按步驟導入就可以了

2.3、移動端設置代理

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

設置完代理,打開瀏覽器訪問http://mitm.it/

下載安裝證書

三、 mitmdump

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

3.1、插件使用

  • 插件的本質就是一個腳本文件,在Python中就是一個類的實例對象。
  • 此處插件是Counter實例對象,request方法是一個事件
  • 對于request事件,它的參數是一個mitmproxy.http.HTTPFlow的對象。

如:(官方文檔例子)

"""
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()
]

上面是一個簡單的插件,用于跟蹤我們已經看到的流(或更具體的HTTP請求)數量。每次看到新的流量時,它都會使用mitmproxy的內部日志記錄機制來宣布其提示。可以在交互式工具的事件日志中或mitmdump的控制臺中找到輸出。

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

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事件

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

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

3.2.2、response事件

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

from mitmproxy import http
def response(flow:http.HTTPFlow):  #注意函數名response不能寫錯
    #狀態碼
    print('狀態碼',flow.response.status_code)
    #返回內容,已解碼
    print('返回內容',flow.response.text)
    #返回內容, bytes類型
    print('返回內容bytes類型',flow.response.content)
    #取得響應的文本
    print('應的文本',flow.response.get_text)
    #修改響應 的文本
    flow.response.set_text('你的響應內容被修改了!')

3.3、下載圖片

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

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爬蟲Mitmproxy安裝使用學習筆記的詳細內容,更多關于python爬蟲Mitmproxy的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python代理工具mitmproxy使用指南
  • 詳解安裝mitmproxy以及遇到的坑和簡單用法
  • Python抓包程序mitmproxy安裝和使用過程圖解
  • Python3自定義http/https請求攔截mitmproxy腳本實例
  • 爬蟲小技巧利用Mitmproxy破解app

標簽:銀川 安慶 三亞 湘西 烏魯木齊 呼倫貝爾 葫蘆島 呼倫貝爾

巨人網絡通訊聲明:本文標題《python爬蟲Mitmproxy安裝使用學習筆記》,本文關鍵詞  python,爬蟲,Mitmproxy,安裝,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python爬蟲Mitmproxy安裝使用學習筆記》相關的同類信息!
  • 本頁收集關于python爬蟲Mitmproxy安裝使用學習筆記的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 文山县| 沧州市| 扬州市| 社会| 麻江县| 乃东县| 宣化县| 淮滨县| 清新县| 右玉县| 汕头市| 慈利县| 梧州市| 社旗县| 桐柏县| 金门县| 无极县| 南投市| 旬阳县| 米易县| 安新县| 当雄县| 饶阳县| 沁阳市| 邯郸市| 定兴县| 保山市| 唐海县| 微博| 南和县| 锡林郭勒盟| 蕲春县| 柳州市| 庄河市| 滁州市| 托克托县| 浦县| 台安县| 保山市| 台南县| 吕梁市|