Windows和夜神模擬器上抓包程序mitmproxy的安裝使用詳解
**
windows
**
一、介紹說明
mitmproxy是一個支持HTTP和HTTPS的抓包程序,有類似Fiddler、Charles的功能,只不過它是一個控制臺的形式操作。
mitmproxy還有兩個關(guān)聯(lián)組件。一個是mitmdump,它是mitmproxy的命令行接口,利用它我們可以對接Python腳本,用Python實現(xiàn)監(jiān)聽后的處理。另一個是mitmweb,它是一個Web程序,通過它我們可以清楚觀察mitmproxy捕獲的請求。
mitmproxy的功能:
1、攔截HTTP和HTTPS請求和響應(yīng)
2、保存HTTP會話并進(jìn)行分析
3、模擬客戶端發(fā)起請求,模擬服務(wù)器端返回響應(yīng)
4、利用反向代理將流量轉(zhuǎn)發(fā)給指定的服務(wù)器
5、支持Mac和linux上的透明代理
6、利用Python對HTTP請求與響應(yīng)進(jìn)行實時處理
mitmproxy運(yùn)行與自己的PC上,在PC的8080端口運(yùn)行,然后開啟一個代理服務(wù),這個服務(wù)實際上是一個HTTP/HTTPS的代理。
手機(jī)和PC在一個局域網(wǎng)內(nèi),設(shè)置代理是mitmproxy的代理地址,這樣手機(jī)在訪問互聯(lián)網(wǎng)的時候流量數(shù)據(jù)包就會流經(jīng)mitmproxy,mitmproxy再去轉(zhuǎn)發(fā)這些數(shù)據(jù)包到真實的服務(wù)器,服務(wù)器返回數(shù)據(jù)包時再由mitmproxy轉(zhuǎn)發(fā)回手機(jī),這樣mitmproxy就相當(dāng)于起了中間人的作用,抓取到所有request和response,另外這個過程還可以對接mitmproxy,抓取到的request和response的具體內(nèi)容都可以直接用python來處理,比如:得到response之后我們可以直接進(jìn)行解析,然后存入數(shù)據(jù)庫,這樣就完成了數(shù)據(jù)的解析和存儲過程。
二、安裝以及配置
下載地址如下:
https://mitmproxy.org/downloads/#4.0.4/
在windows平臺下安裝:
輸入上面的下載地址下載mitmproxy-4.0.4-windows-installer.exe,下載后直接雙擊安裝包即可安裝。
注意 :在 Windows 上不支持 mitmproxy 的控制臺接口,但是可以使用 mitmdump和mitmweb。
證書配置
對于mitmproxy來說,如果想要截獲HTTPS請求,就需要設(shè)置證書。mitmproxy在安裝后會提供一套CA證書,只要客戶端信任了mitmproxy提供的證書,就可以通過mitmproxy獲取HTTPS請求的具體內(nèi)容,否則mitmproxy是無法解析HTTPS請求的。
首先,運(yùn)行mitmdump命令產(chǎn)生CA證書,并在用戶目錄下的.mitmproxy 目錄里面找到CA證書,如下圖所示。
在windows平臺下
點(diǎn)擊mitmproxy-ca.p12,就會出現(xiàn)導(dǎo)入證書的引導(dǎo)頁,如下圖所示:
然后直接點(diǎn)擊下一步即可,如果不需要設(shè)置密碼,繼續(xù)點(diǎn)擊下一步。
接下來需要選擇證書的存儲區(qū)域,如下圖所示。
這里點(diǎn)擊第二個選項“將所有的證書都放入下列存儲”,然后點(diǎn)擊“瀏覽”按鈕,選擇證書存儲位置為 受信任的根證書頒發(fā)機(jī)構(gòu)”,接著點(diǎn)擊“確
定”按鈕,然后點(diǎn)擊“下一步”按鈕。
最后,如果有安全警告彈出,直接點(diǎn)擊“是”按鈕即可。這樣就完成了CA證書的配置了。
在Android平臺下
在Android手機(jī)上,需要將mitmproxy-ca-cert.pem文件發(fā)送到手機(jī)上,接下來點(diǎn)擊證書會出現(xiàn)一個提示窗口。
這時候輸入證書名稱,例如:mitmproxy,然后點(diǎn)擊確定則完成了安裝。
三、mitmdump的使用
mitmdump是mitmproxy的命令行接口,同時還可以對接Python對請求進(jìn)行處理,這是相對于fiddler和Charles這些工具更加方便的地方,有了它我們可以不用手動截獲和分析HTTP請求和響應(yīng),只需要寫好請求與響應(yīng)的處理邏輯即可。它還可以實現(xiàn)數(shù)據(jù)的解析、存儲等工作,這些過程都可以通過Python來實現(xiàn)。
1、我們可以使用命令啟動mitmproxy,并把截獲的數(shù)據(jù)保存到文件中
命令如下:
mitmdump -w outfile
其中outfile的名稱任意,截獲的數(shù)據(jù)都會被保存到此文件中。
還可以指定一個腳本來處理截獲的數(shù)據(jù),使用-s參數(shù)即可
mitmdump -s script.py
這里指定了當(dāng)前處理腳本為script.py,它需要放置在當(dāng)前命令執(zhí)行的目錄下。
我們可以在腳本里寫入如下的代碼:
def request(flow) : flow.request.headers['User-Agent'] = 'MitmProxy' print(flow.request.headers)
我們定義了 一個request ()方法,參數(shù)為 flow ,它其實是一個 HTTP Flow 對象,通過 request 屬性即可獲取到當(dāng)前請求對象 。然后打印輸出了請求的請求頭,將請求頭的 User-Agent 改成了MitmProxy。運(yùn)行之后在手機(jī)端訪問 http: //httpbin.org get 。
手機(jī)端返回結(jié)果的 Headers 實際上就是請求的 Headers, User-Agent 被修改成了 mitmproxy ,PC控制臺輸出了修改后Headers 內(nèi)容,其 User-Agent 的內(nèi)容正是 mitmproxy。所以,通過這上面三行代碼我們就可以完成對請求的改寫。
print()方法輸出結(jié)果可以呈現(xiàn)在 PC 端控制臺上,可以方便地進(jìn)行調(diào)試。
2、日志的輸出
mitmdump提供了專門的日志輸出功能,可以設(shè)定不同級別以不同顏色輸出結(jié)果,我們可以把腳本修改成以下內(nèi)容:
from mitmproxy import ctx def request(flow): flow .request . headers['User-Agent'] ='mitmProxy' ctx.log.info(str(flow.request.headers)) ctx.log.warn(str(flow.request.headers)) ctx.log.error(str(flow.request.headers))
在這里調(diào)用了ctx模塊,它有一個log功能,調(diào)用不同的輸出方法就可以輸出不同顏色的結(jié)果,以方便我們做調(diào)試。例如:info()方法輸出的內(nèi)容是白色的,warn()方法輸出的內(nèi)容是黃色的,error()方法輸出的內(nèi)容是紅色的。
不同的顏色對應(yīng)不同級別的輸出,我們可以將不同的結(jié)果合理劃分級別輸出,以更直觀方便地查看調(diào)試信息。
3、request的使用
我們在上面也實現(xiàn)了request()方法并且對Headers進(jìn)行了修改。下面我們介紹下request其他常用的一些功能,如下:
from mitmproxy import ctx def request(flow): request = flow.request info = ctx.log.info info(request.url) info(str(request.headers)) info(str(request.cookies)) info(request.host) info(request.method) info(str(request.port)) info(request.scheme)
在手機(jī)上打開百度,就可以看到pc端控制臺輸出了一系列的請求,在這里我們找到第一個請求??刂婆_打印輸出了request的一些常見的屬性,如URL、headers、cookies、host、method、scheme即請求鏈接、請求頭、請求cookies、請求host、請求方法、請求端口、請求協(xié)議這些內(nèi)容。
同時我們還可以對任意屬性進(jìn)行修改,就像最初修改headers一樣,直接賦值即可,例如把請求的URL修改了,如下:‘
def request(flow): url ='https://httpbin.org/get' flow.request.url = url
我們只需要用簡單的腳本就可以成功把請求修改為其他的站點(diǎn),通過這種方式修改和偽造請求就變得很容易。
通過這個例子我們也可以知道,有時候URL雖然是正確的,但是內(nèi)容并非是正確的,我們需要進(jìn)一步提高自己的安全防范意識。
所以我們能很容易地獲取和修改request的任意內(nèi)容,比如:可以用修改cookies、添加代理的方式來規(guī)避反爬。
4、響應(yīng)的使用
對于爬蟲來說,我們會更加關(guān)心響應(yīng)的內(nèi)容,因為response body才是爬取的結(jié)果。對于響應(yīng)來說,mitmdump也提供了對應(yīng)的處理接口,就是response()方法。
from mitmproxy import ctx def response(flow): response = flow.response info = ctx.log.info inf(str(response.status_code)) info(str(response.headers)) info(str(response.cookies)) info(str(response .text))
在這里打印輸出了響應(yīng)的狀態(tài)碼status_code、響應(yīng)頭headers、cookies、響應(yīng)體text這幾個屬性,其中最重要的是text屬性也就是網(wǎng)頁的源代碼。
通過response()方法獲取每個請求的響應(yīng)內(nèi)容,然后再進(jìn)行響應(yīng)的信息提取和存儲,我們就可以完成數(shù)據(jù)爬取啦!
**
夜神模擬器
**
說明:
Android證書分為“用戶證書”和“系統(tǒng)證書”兩種,在設(shè)置->安全->"查看安全證書"列表中,可以看到“系統(tǒng)”和“用戶”兩個列表。用戶通過瀏覽器下載安裝或者通過WLAN高級設(shè)置安裝的證書均為用戶證書。 安裝為系統(tǒng)證書有什么好處呢?
(1)安裝用戶證書必須要設(shè)置開機(jī)密碼,而且設(shè)置后就不能取消,除非先刪掉所有的用戶證書。如果安裝為系統(tǒng)證書就不需要設(shè)置開機(jī)密碼,自動化操作時更方便。
(2)Android 7以上版本APP默認(rèn)不信任用戶證書,只信任系統(tǒng)證書,安裝為用戶證書,對APP的HTTPS抓包會失敗。安裝為全局證書才能被所有APP信任,方可進(jìn)行HTTPS抓包。
默認(rèn)情況下,針對 Android 7.0+ (API level 24+) 的應(yīng)用不再信任用戶或管理員添加的CA證書來進(jìn)行安全連接。(之前我們其實是將安全證書安裝到安卓手機(jī)上作為用戶信任安全證書,新版本如果APP開啟了設(shè)置我們的代理請求會被認(rèn)為是不安全的。)
Android的系統(tǒng)證書的存儲位置是/system/etc/security/cacerts,證書文件必須是PEM格式,而且文件命名必須符合系統(tǒng)證書規(guī)范
一、安裝過程
1、準(zhǔn)備
1、準(zhǔn)備一臺已經(jīng) root的手機(jī)
2、準(zhǔn)備mitmproxy證書文件
Windows 或者Linux 在mitmdump第一次運(yùn)行會在用戶目錄生成對應(yīng)的文件。
目錄位于:C:\Users\Administrator.mitmproxy
查看電腦是否成功連接到手機(jī)
adb devices -l #顯示所有已連接的設(shè)備詳細(xì)信息:127.0.0.1:62001 未連接則運(yùn)行如下命令連接 adb connect 127.0.0.1:62001 #默認(rèn)端口
2.安裝命令,在.mitmproxy目錄下運(yùn)行cmd
#PEM或者DER格式均可 #如果是PEM格式: In: openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem -noout out: c8750f0d # 如果是DER格式: In: openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer -noout out: c8750f0d
若報錯:無法定位序數(shù)4540于動態(tài)鏈接庫LIBEAY32.dll上
1、程序依賴于libeay32.dll動態(tài)鏈接庫時:
創(chuàng)建腳本: @echo 開始注冊 copy libeay32.dll %windir%\system32\ regsvr32 %windir%\system32\libeay32.dll /s @echo libeay32.dll注冊成功 @pause
2、程序不依賴于libeay32.dll動態(tài)鏈接庫時:(無法定位序數(shù)一般情況下是不依賴)
找到系統(tǒng)目錄下的該庫文件將其改個名,例如win32下:
在系統(tǒng)盤的windows的system32下把libeay32.dll改成libeay32_old.dll,就OK了。
3、如果程序依賴于該動態(tài)庫,而且該庫已經(jīng)損壞,則需要重新下載
3.重命名+推送至手機(jī)
# window重命名 為符合android規(guī)范名稱 ren mitmproxy-ca-cert.pem c8750f0d.0 # 或 linux重命名 cp mitmproxy-ca-cert.pem c8750f0d.0 #傳入手機(jī) adb push c8750f0d.0 /sdcard
4.安裝mitm證書到手機(jī)adb shell操作:
#獲取手機(jī)的root權(quán)限 adb shell su #掛載系統(tǒng)目錄為可寫 mount -o rw,remount / mv /sdcard/c8750f0d.0 /system/etc/security/cacerts #修改證書權(quán)限 chmod 644 /system/etc/security/cacerts/c8750f0d.0
如果順利,至此已經(jīng)完成安裝!
注:在執(zhí)行mv /sdcard/c8750f0d.0 /system/etc/security/cacerts時
有的會出現(xiàn)Unable to chmod /system/etc/security/cacerts/c8750f0d.0: No such file or directory,這個問題是system文件為只讀,需要將其掛載為可讀寫
一般的解決方法是 mount -o rw,remount /system
修改system讀寫權(quán)限,然后再進(jìn)行復(fù)制操作
如果修改了之后還是提示Read-only file system,
還有方法 adb root adb disable-verity adb reboot #手機(jī)會重啟,不用關(guān)閉cmd窗口,手機(jī)可能需要拔掉數(shù)據(jù)寫重新連接
adb root adb shell mount -o rw,remount /system #再次進(jìn)行修改 然后就可以進(jìn)行復(fù)制操作了。
(我是遇到了這種情況,這個方法可行) 復(fù)制完之后輸入reboot重啟
5.查看是否成功:
手機(jī)的設(shè)置——安全——憑據(jù)存儲——信任的憑據(jù)(信任的CA證書)
其下應(yīng)該有mitmproxy項
到此這篇關(guān)于Windows和夜神模擬器上抓包程序mitmproxy的安裝使用詳解的文章就介紹到這了,更多相關(guān)mitmproxy安裝使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基于socketserver實現(xiàn)并發(fā),驗證客戶端的合法性
TCP協(xié)議的socket一次只能和一個客戶端通信, 而socketsever可以時間和多個客戶端通信。本文將講解socketserver的具體使用2021-05-05Python定時任務(wù)框架APScheduler安裝使用詳解
這篇文章主要介紹了Python定時任務(wù)框架APScheduler安裝使用詳解,重點(diǎn)介紹如何使用APscheduler實現(xiàn)python定時任務(wù),本文通過實例代碼給大家介紹的非常詳細(xì),對Python定時任務(wù)APScheduler相關(guān)知識感興趣的朋友一起看看吧2022-05-05python lambda函數(shù)及三個常用的高階函數(shù)
這篇文章主要介紹了python lambda函數(shù)及三個常用的高階函數(shù),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02Python巧用SnowNLP實現(xiàn)生成srt字幕文件
SnowNLP是一個可以方便的處理中文文本內(nèi)容的python類庫,本文主要為大家詳細(xì)介紹了Python如何巧用SnowNLP實現(xiàn)將一段話一鍵生成srt字幕文件,感興趣的可以了解下2024-01-01python 如何獲取頁面所有a標(biāo)簽下href的值
這篇文章主要介紹了python 獲取頁面所有a標(biāo)簽下href的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05