您好,登錄后才能下訂單哦!
這篇文章主要介紹“python爬蟲Mitmproxy的安裝使用方法”,在日常操作中,相信很多人在python爬蟲Mitmproxy的安裝使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python爬蟲Mitmproxy的安裝使用方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一、簡介和安裝
1.1、概念和作用
概念
作用
1.2、安裝
1.3、工具介紹
二、設置代理
2.1、PC端設置代理
2.2、PC端安裝證書
2.3、移動端設置代理
三、 mitmdump
3.1、插件使用
3.2、常用事件
3.2.1、request事件
3.2.2、response事件
3.3、下載圖片
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)
pip install mitmproxy
或
pip install -i https://pypi.douban.com/simple mitmproxy
如果直接安裝的速度太慢了,可以在命令行中添加國內的鏡像源加快速度,就是第二條命令。注意:python 版本不低于3.6
檢查是否安裝成功:命令行中輸入命令查看mitmdump --version
安裝成功后在Python安裝路徑Script路徑下可以找到 mitmdump.exe
、mitmproxy.exe
、mitmweb.exe
這三個可執行文件。
mitmproxy
:命令行界面,允許交互式檢查和修改http數據流,不支持windows
mitmweb
: Web界面,用戶可以實時看到發生的請求,過濾請求,查看請求數據
mitmdump
: 一個命令行工具,沒有界面,不能交互,但是可以通過啟動參數并結合自定義腳本進行定制化功能的實現,是我們運行的環境
這三個命令功能一致,且都可以加載自定義腳本,唯一的區別是交互界面的不同;
mitmproxy,mitmweb主要用來做調試,部署項目時使用mitmdump。
開啟代理時需要把其他的代理都關掉
注:這時我們剛開啟代理,還未安裝證書,如果訪問其他網址會出現報錯,如下圖所示:
在代理狀態下,訪問http://mitm.it/,PC端與移動端操作相同。
(注意:設置完成后,瀏覽器打開網頁發現都是未連接網絡,需要先啟動mitmweb.exe或者mitmdump.exe程序才能打開鏈接)
后面點擊下載的證書按步驟導入就可以了
以夜神模擬器為例(注意保證手機和電腦在同局域網下)
設置完代理,打開瀏覽器訪問http://mitm.it/
官方文檔:https://docs.mitmproxy.org/stable/addons-overview/
插件的本質就是一個腳本文件,在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是創建的文件名)。
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. """
(注意:記得在代理狀態下執行,命令: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'))
(注意:記得在代理狀態下執行,命令: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('你的響應內容被修改了!')
(注意:記得在代理狀態下執行,命令: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的安裝使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。