Windows和夜神模擬器上抓包程序mitmproxy的安裝使用詳解
**
windows
**
一、介紹說明
mitmproxy是一個支持HTTP和HTTPS的抓包程序,有類似Fiddler、Charles的功能,只不過它是一個控制臺的形式操作。
mitmproxy還有兩個關聯(lián)組件。一個是mitmdump,它是mitmproxy的命令行接口,利用它我們可以對接Python腳本,用Python實現(xiàn)監(jiān)聽后的處理。另一個是mitmweb,它是一個Web程序,通過它我們可以清楚觀察mitmproxy捕獲的請求。
mitmproxy的功能:
1、攔截HTTP和HTTPS請求和響應
2、保存HTTP會話并進行分析
3、模擬客戶端發(fā)起請求,模擬服務器端返回響應
4、利用反向代理將流量轉發(fā)給指定的服務器
5、支持Mac和linux上的透明代理
6、利用Python對HTTP請求與響應進行實時處理
mitmproxy運行與自己的PC上,在PC的8080端口運行,然后開啟一個代理服務,這個服務實際上是一個HTTP/HTTPS的代理。
手機和PC在一個局域網內,設置代理是mitmproxy的代理地址,這樣手機在訪問互聯(lián)網的時候流量數據包就會流經mitmproxy,mitmproxy再去轉發(fā)這些數據包到真實的服務器,服務器返回數據包時再由mitmproxy轉發(fā)回手機,這樣mitmproxy就相當于起了中間人的作用,抓取到所有request和response,另外這個過程還可以對接mitmproxy,抓取到的request和response的具體內容都可以直接用python來處理,比如:得到response之后我們可以直接進行解析,然后存入數據庫,這樣就完成了數據的解析和存儲過程。
二、安裝以及配置
下載地址如下:
https://mitmproxy.org/downloads/#4.0.4/
在windows平臺下安裝:
輸入上面的下載地址下載mitmproxy-4.0.4-windows-installer.exe,下載后直接雙擊安裝包即可安裝。
注意 :在 Windows 上不支持 mitmproxy 的控制臺接口,但是可以使用 mitmdump和mitmweb。
證書配置
對于mitmproxy來說,如果想要截獲HTTPS請求,就需要設置證書。mitmproxy在安裝后會提供一套CA證書,只要客戶端信任了mitmproxy提供的證書,就可以通過mitmproxy獲取HTTPS請求的具體內容,否則mitmproxy是無法解析HTTPS請求的。
首先,運行mitmdump命令產生CA證書,并在用戶目錄下的.mitmproxy 目錄里面找到CA證書,如下圖所示。

在windows平臺下
點擊mitmproxy-ca.p12,就會出現(xiàn)導入證書的引導頁,如下圖所示:

然后直接點擊下一步即可,如果不需要設置密碼,繼續(xù)點擊下一步。
接下來需要選擇證書的存儲區(qū)域,如下圖所示。

這里點擊第二個選項“將所有的證書都放入下列存儲”,然后點擊“瀏覽”按鈕,選擇證書存儲位置為 受信任的根證書頒發(fā)機構”,接著點擊“確
定”按鈕,然后點擊“下一步”按鈕。
最后,如果有安全警告彈出,直接點擊“是”按鈕即可。這樣就完成了CA證書的配置了。
在Android平臺下
在Android手機上,需要將mitmproxy-ca-cert.pem文件發(fā)送到手機上,接下來點擊證書會出現(xiàn)一個提示窗口。
這時候輸入證書名稱,例如:mitmproxy,然后點擊確定則完成了安裝。
三、mitmdump的使用
mitmdump是mitmproxy的命令行接口,同時還可以對接Python對請求進行處理,這是相對于fiddler和Charles這些工具更加方便的地方,有了它我們可以不用手動截獲和分析HTTP請求和響應,只需要寫好請求與響應的處理邏輯即可。它還可以實現(xiàn)數據的解析、存儲等工作,這些過程都可以通過Python來實現(xiàn)。
1、我們可以使用命令啟動mitmproxy,并把截獲的數據保存到文件中
命令如下:
mitmdump -w outfile
其中outfile的名稱任意,截獲的數據都會被保存到此文件中。
還可以指定一個腳本來處理截獲的數據,使用-s參數即可
mitmdump -s script.py
這里指定了當前處理腳本為script.py,它需要放置在當前命令執(zhí)行的目錄下。
我們可以在腳本里寫入如下的代碼:
def request(flow) :
flow.request.headers['User-Agent'] = 'MitmProxy'
print(flow.request.headers)
我們定義了 一個request ()方法,參數為 flow ,它其實是一個 HTTP Flow 對象,通過 request 屬性即可獲取到當前請求對象 。然后打印輸出了請求的請求頭,將請求頭的 User-Agent 改成了MitmProxy。運行之后在手機端訪問 http: //httpbin.org get 。
手機端返回結果的 Headers 實際上就是請求的 Headers, User-Agent 被修改成了 mitmproxy ,PC控制臺輸出了修改后Headers 內容,其 User-Agent 的內容正是 mitmproxy。所以,通過這上面三行代碼我們就可以完成對請求的改寫。
print()方法輸出結果可以呈現(xiàn)在 PC 端控制臺上,可以方便地進行調試。
2、日志的輸出
mitmdump提供了專門的日志輸出功能,可以設定不同級別以不同顏色輸出結果,我們可以把腳本修改成以下內容:
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))
在這里調用了ctx模塊,它有一個log功能,調用不同的輸出方法就可以輸出不同顏色的結果,以方便我們做調試。例如:info()方法輸出的內容是白色的,warn()方法輸出的內容是黃色的,error()方法輸出的內容是紅色的。
不同的顏色對應不同級別的輸出,我們可以將不同的結果合理劃分級別輸出,以更直觀方便地查看調試信息。
3、request的使用
我們在上面也實現(xiàn)了request()方法并且對Headers進行了修改。下面我們介紹下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)
在手機上打開百度,就可以看到pc端控制臺輸出了一系列的請求,在這里我們找到第一個請求??刂婆_打印輸出了request的一些常見的屬性,如URL、headers、cookies、host、method、scheme即請求鏈接、請求頭、請求cookies、請求host、請求方法、請求端口、請求協(xié)議這些內容。
同時我們還可以對任意屬性進行修改,就像最初修改headers一樣,直接賦值即可,例如把請求的URL修改了,如下:‘
def request(flow):
url ='https://httpbin.org/get'
flow.request.url = url
我們只需要用簡單的腳本就可以成功把請求修改為其他的站點,通過這種方式修改和偽造請求就變得很容易。
通過這個例子我們也可以知道,有時候URL雖然是正確的,但是內容并非是正確的,我們需要進一步提高自己的安全防范意識。
所以我們能很容易地獲取和修改request的任意內容,比如:可以用修改cookies、添加代理的方式來規(guī)避反爬。
4、響應的使用
對于爬蟲來說,我們會更加關心響應的內容,因為response body才是爬取的結果。對于響應來說,mitmdump也提供了對應的處理接口,就是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))
在這里打印輸出了響應的狀態(tài)碼status_code、響應頭headers、cookies、響應體text這幾個屬性,其中最重要的是text屬性也就是網頁的源代碼。
通過response()方法獲取每個請求的響應內容,然后再進行響應的信息提取和存儲,我們就可以完成數據爬取啦!
**
夜神模擬器
**
說明:
Android證書分為“用戶證書”和“系統(tǒng)證書”兩種,在設置->安全->"查看安全證書"列表中,可以看到“系統(tǒng)”和“用戶”兩個列表。用戶通過瀏覽器下載安裝或者通過WLAN高級設置安裝的證書均為用戶證書。 安裝為系統(tǒng)證書有什么好處呢?
(1)安裝用戶證書必須要設置開機密碼,而且設置后就不能取消,除非先刪掉所有的用戶證書。如果安裝為系統(tǒng)證書就不需要設置開機密碼,自動化操作時更方便。
(2)Android 7以上版本APP默認不信任用戶證書,只信任系統(tǒng)證書,安裝為用戶證書,對APP的HTTPS抓包會失敗。安裝為全局證書才能被所有APP信任,方可進行HTTPS抓包。
默認情況下,針對 Android 7.0+ (API level 24+) 的應用不再信任用戶或管理員添加的CA證書來進行安全連接。(之前我們其實是將安全證書安裝到安卓手機上作為用戶信任安全證書,新版本如果APP開啟了設置我們的代理請求會被認為是不安全的。)
Android的系統(tǒng)證書的存儲位置是/system/etc/security/cacerts,證書文件必須是PEM格式,而且文件命名必須符合系統(tǒng)證書規(guī)范
一、安裝過程
1、準備
1、準備一臺已經 root的手機
2、準備mitmproxy證書文件
Windows 或者Linux 在mitmdump第一次運行會在用戶目錄生成對應的文件。
目錄位于:C:\Users\Administrator.mitmproxy
查看電腦是否成功連接到手機
adb devices -l #顯示所有已連接的設備詳細信息:127.0.0.1:62001 未連接則運行如下命令連接 adb connect 127.0.0.1:62001 #默認端口
2.安裝命令,在.mitmproxy目錄下運行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
若報錯:無法定位序數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)鏈接庫時:(無法定位序數一般情況下是不依賴)
找到系統(tǒng)目錄下的該庫文件將其改個名,例如win32下:
在系統(tǒng)盤的windows的system32下把libeay32.dll改成libeay32_old.dll,就OK了。
3、如果程序依賴于該動態(tài)庫,而且該庫已經損壞,則需要重新下載
3.重命名+推送至手機
# window重命名 為符合android規(guī)范名稱 ren mitmproxy-ca-cert.pem c8750f0d.0 # 或 linux重命名 cp mitmproxy-ca-cert.pem c8750f0d.0 #傳入手機 adb push c8750f0d.0 /sdcard
4.安裝mitm證書到手機adb shell操作:
#獲取手機的root權限 adb shell su #掛載系統(tǒng)目錄為可寫 mount -o rw,remount / mv /sdcard/c8750f0d.0 /system/etc/security/cacerts #修改證書權限 chmod 644 /system/etc/security/cacerts/c8750f0d.0
如果順利,至此已經完成安裝!
注:在執(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讀寫權限,然后再進行復制操作
如果修改了之后還是提示Read-only file system,
還有方法 adb root adb disable-verity adb reboot #手機會重啟,不用關閉cmd窗口,手機可能需要拔掉數據寫重新連接
adb root adb shell mount -o rw,remount /system #再次進行修改 然后就可以進行復制操作了。
(我是遇到了這種情況,這個方法可行) 復制完之后輸入reboot重啟
5.查看是否成功:
手機的設置——安全——憑據存儲——信任的憑據(信任的CA證書)
其下應該有mitmproxy項

到此這篇關于Windows和夜神模擬器上抓包程序mitmproxy的安裝使用詳解的文章就介紹到這了,更多相關mitmproxy安裝使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pytorch之inception_v3的實現(xiàn)案例
今天小編就為大家分享一篇pytorch之inception_v3的實現(xiàn)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01

