文章目錄
- mitmproxy
- 1. 網絡代理
- 2. 安裝
- 3. Https請求
- 3.1 啟動mitmproxy
- 3.2 獲取證書
- 3.3 配置代理
- 3.4 運行測試
- 4. 請求
- 4.1 讀取請求
- 4.2 修改請求
- 4.3 攔截請求
- 5. 響應
- 5.1 讀取響應
- 5.2 修改響應
- 6. 案例:共享賬號
- 6.1 登錄bilibili獲取cookies
- 6.2 在代理請求中設置cookies
mitmproxy
mitmproxy是一個代理工具(軟件安裝 或 Python模塊安裝),實現代理請求(攔截請求或修改請求)。
1. 網絡代理
網絡代理是一種位于客戶端和服務器之間的中間服務器,它充當客戶端與目標服務器之間的中間人。當客戶端發送請求時,請求首先被發送到代理服務器,然后由代理服務器轉發給目標服務器,并將目標服務器的響應返回給客戶端。
代理服務器的作用可以有多種形式,包括:
- 隱藏真實的客戶端IP地址:代理服務器可以屏蔽客戶端的真實IP地址,使目標服務器無法直接獲取到客戶端的真實位置信息。這種方式可以提供一定的匿名性和隱私保護。
- 緩存和加速:代理服務器可以緩存目標服務器的響應,當其他客戶端請求相同的資源時,代理服務器可以直接返回緩存的響應,減少了對目標服務器的訪問,提高了訪問速度和網絡效率。
- 過濾和訪問控制:代理服務器可以根據設置的規則對請求進行過濾和訪問控制。例如,可以通過代理服務器實現對特定網站或內容的屏蔽,或者對特定客戶端的訪問進行限制。
- 突破網絡限制:在某些情況下,代理服務器可以用于突破網絡限制。例如,當訪問某些網站受到地理位置限制或網絡審查時,可以通過使用代理服務器來繞過這些限制。
- 負載均衡:代理服務器可以作為負載均衡器,將請求分發到多個目標服務器上,以實現更好的性能和可靠性。
mitmproxy是一款流行的開源代理工具,用于攔截、修改和觀察網絡流量。它可以用于網絡安全測試、調試和逆向工程等場景。
2. 安裝
在安裝前需要去下載Visual C++ Build Tools for Visual Studio 2015
安裝到電腦。
https://my.visualstudio.com/Downloads?q=Visual%20Studio%202015%20update%203
解壓 mu_visual_cpp_build_tools_2015_update_3_x64_dvd_dfd9a39c.iso
文件,然后默認安裝。
用pip安裝mitmproxy:
pip install mitmproxy
3. Https請求
如果想要讓mitmproxy支持:http和https請求,就需要安裝證書。
3.1 啟動mitmproxy
>>>mitmdump -q -p 8888 -s test.py
from mitmproxy import httpdef request(flow: http.HTTPFlow):print("請求->", flow.request.url)def response(flow: http.HTTPFlow):...
3.2 獲取證書
在電腦
C:\Users\Administrator\.mitmproxy
中去獲取。
雙擊下載證書
3.3 配置代理
3.4 運行測試
4. 請求
4.1 讀取請求
from mitmproxy import http
from mitmproxy.http import Requestdef request(flow):print("請求-->", flow.request.url)print("請求-->", flow.request.host)print("請求-->", flow.request.path)print("請求-->", flow.request.query)print("請求-->", flow.request.cookies)print("請求-->", flow.request.headers)print("請求-->", flow.request.method)print("請求-->", flow.request.content)def response(flow: http.HTTPFlow):pass
4.2 修改請求
from mitmproxy import httpdef request(flow):flow.request.url = "https://www.baidu.com/"def response(flow: http.HTTPFlow):pass
4.3 攔截請求
可以攔截請求,并放回指定內容
from mitmproxy import http
from mitmproxy.http import HTTPFlow
from mitmproxy.http import Responsedef request(flow: HTTPFlow):if flow.request.url.startswith("https://dig.chouti.com/"):flow.response = Response.make(200, # (optional) status codeb"Hello World", # (optional) content{"Content-Type": "text/html"} # (optional) headers)def response(flow: http.HTTPFlow):pass
也可以直接kill請求
from mitmproxy import http
from mitmproxy.http import Request
from mitmproxy.http import HTTPFlowdef request(flow: HTTPFlow):if flow.request.url.startswith("https://dig.chouti.com/"):flow.kill()def response(flow: http.HTTPFlow):pass
5. 響應
5.1 讀取響應
from mitmproxy import http
from mitmproxy.http import HTTPFlowdef request(flow: HTTPFlow):...def response(flow: http.HTTPFlow):print(flow.request.url)print(flow.response.status_code)print(flow.response.cookies)print(flow.response.headers)print(flow.response.content)
5.2 修改響應
from mitmproxy import http
from mitmproxy.http import HTTPFlow, Responsedef request(flow: HTTPFlow):...def response(flow: http.HTTPFlow):flow.response = Response.make(200, # (optional) status codeb"Hello World", # (optional) content{"Content-Type": "text/html"} # (optional) headers)
6. 案例:共享賬號
6.1 登錄bilibili獲取cookies
from mitmproxy import http
from mitmproxy.http import HTTPFlowdef request(flow: HTTPFlow):print(flow.request.url)print(flow.request.cookies)def response(flow: http.HTTPFlow):...
6.2 在代理請求中設置cookies
from mitmproxy import http
from mitmproxy.http import HTTPFlowdef request(flow: HTTPFlow):print(flow.request.url)print(flow.request.cookies)flow.request.cookies = [['_uuid', 'A98A10A1C-9F33-6339-17E4-CD8671029FB5A86227infoc'],['buvid3', '6F2EA161-81E8-FC5D-692F-FF62C048B83B86528infoc'], ['b_nut', '1709354487'],['buvid4','FDE22D0E-55C2-7A05-BE12-D69A19F71C7586528-024030204-nzup34dDLssl%2BNgRMbI%2BUQ%3D%3D'],['enable_web_push', 'DISABLE'], ['FEED_LIVE_VERSION', 'V8'],['header_theme_version', 'CLOSE'], ['CURRENT_FNVAL', '4048'],['rpdid', "|(~|mm|k)~l0J'u~|mJlRl|m"], ['b_lsid', '6FDF9248_18DFEAFE967'],['home_feed_column', '5'], ['browser_resolution', '1536-239'], ['bili_ticket','eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDk2MzcwNzEsImlhdCI6MTcwOTM3NzgxMSwicGx0IjotMX0.qxpceIj8gLlNQ33eR9d5jxfizfYD_AWX_zpvHAFixY4'],['bili_ticket_expires', '1709637011'], ['bp_video_offset_250595597', '904259047290568723'],['fingerprint', 'bc08d5f7f0d84ff74bf64c3b8cead4fc'], ['buvid_fp_plain', 'undefined'],['buvid_fp', 'bc08d5f7f0d84ff74bf64c3b8cead4fc'], ['SESSDATA','e3f51de8%2C1724929938%2Cb3219%2A32CjDQyE1hfakSZT7vrNGmyYTP3Es7buyebKSAFmqg5JIZOH4RfRvNZRNydfq3JlRMLlcSVjd4SE0xc2I5T0dtVXFMMzBLbnhXZW5QNTNyeUZLVjNteDVaRUZ4V1FSQ2gwSXBCb09NLVFzc2cyRmpsNkJPOE9jVE9xdGlIS3gwZHlQWTJaX182SkZnIIEC'],['bili_jct', 'a74e7345a811680a745797300a7ae525'], ['DedeUserID', '250595597'],['DedeUserID__ckMd5', 'dd8e5953de09a630'], ['sid', 'qmre1dgw']]def response(flow: http.HTTPFlow):...
在配置完cookies后在被代理的電腦打開bilibili會顯示為登錄狀態
若多臺電腦接入代理則可以共享這個賬號