人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

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

發(fā)布日期:2022-01-30 16:35 | 文章來源:源碼之家

一、簡介和安裝

1.1、概念和作用

概念

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

作用

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

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

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

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

1.2、安裝

pip  install  mitmproxy

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

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

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

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

1.3、工具介紹

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

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

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

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

mitmproxy,mitmweb主要用來做調(diào)試,部署項目時使用mitmdump。

二、設(shè)置代理

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

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

開啟代理

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

2.2、PC端安裝證書

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

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

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

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

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

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

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

下載安裝證書

三、 mitmdump

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

3.1、插件使用

  • 插件的本質(zhì)就是一個腳本文件,在Python中就是一個類的實例對象。
  • 此處插件是Counter實例對象,request方法是一個事件
  • 對于request事件,它的參數(shù)是一個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()
]

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

可以使用mitmdump -s ./anatomy.py運行插件(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不能寫錯
 #獲取請求頭信息
 print('請求頭',flow.request.headers)
 #完整請求地址
 print('請求url',flow.request.url)
 #域名
 print('域名',flow.request.host)
 #請求路徑  url除域名之外的內(nèi)容
 print('請求路徑',flow.request.path)
 #返回MultiDictView類型的數(shù)據(jù),URL的鍵值參數(shù)
 print('url的鍵值參數(shù)',flow.request.query)
 #請求方法
 print('請求方法',flow.request.method)
 #請求類型
 print('請求類型',flow.request.scheme)
 #獲取請求內(nèi)容
 '''
 print('請求內(nèi)容',flow.request.get_text)
 print('請求內(nèi)容類型',type(flow.request.get_text))
 print('請求內(nèi)容bytes',flow.request.raw_content)
 print('請求內(nèi)容bytes',flow.request.get_content)
 '''
 if 'https://www.baidu.com' in flow.request.url:
  #取得請求參數(shù)wd的值
  print(flow.request.query.get('wd'))
  #取得所有請求參數(shù)
  print(list(flow.request.query.keys()))
  #修改請求參數(shù)
  flow.request.query.set_all('wd',['python'])
  #打印修改過后的參數(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不能寫錯
 #狀態(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會使打印更清晰可觀)

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安裝使用學(xué)習(xí)筆記的詳細(xì)內(nèi)容,更多關(guān)于python爬蟲Mitmproxy的資料請關(guān)注本站其它相關(guān)文章!

海外服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部