以前的只是簡單了解過,爬蟲一直對移動端做得少,今天在一前輩任務下用到了,不得不說不得不愛。
熟話說:好記性不如爛筆頭,這里做一下淺薄的筆記。
摘要: mitmproxy是一個支持HTTP和HTTPS的抓包程序,有類似Fiddler、Charles的功能,只不過它是一個控制台的形式操作。 mitmproxy還有兩個關聯組件。一個是mitmdump,它是mitmproxy的命令行接口,利用它我們可以對接Python腳本,用Python實現監聽后的處理。
mitmproxy是一個支持HTTP和HTTPS的抓包程序,有類似Fiddler、Charles的功能,只不過它是一個控制台的形式操作。
mitmproxy還有兩個關聯組件。一個是mitmdump,它是mitmproxy的命令行接口,利用它我們可以對接Python腳本,用Python實現監聽后的處理。另一個是mitmweb,它是一個Web程序,通過它我們可以清楚觀察mitmproxy捕獲的請求。
一。下載
1.1環境
python3、mitmproxy、appium、adb、iphone一台
1.2
安裝方法很多這里只做簡單介紹,出問題可以自行google。
pip install mitmproxy#安裝很簡單,個人喜歡放在虛擬環境里
這時候你要在移動端下載安裝好CA證書(ios最好用自帶瀏覽器),並且mac要和手機處於同一個局域網and端口下,這樣手機的包才會被mac抓到。
注意:你還可能出現ios瀏覽器可以聯網,而app失敗的情況,你需要去setting > general trust 證書。
二。抓包原理
mitmproxy運行在PC上,mitmproxy會在PC的8080端口運行,開啟一個代理服務,這個服務實際上是HTTP/HTTPS的代理。手機和PC在同一局域網內,設置代理為mitmproxy的代理地址,手機訪問互聯網會經過mitmproxy。mitmproxy起到了中間人的作用,抓取所有的Request和Reponse。
這個過程可以對接mitmdump,抓取到的Request和Response的內容直接用Python處理。
三。簡單使用
1.1設置代理
啟動mitmproxy
在terminal里輸入命令:mitmproxy,會在8080(右下角監聽端口)端口運行一個代理服務。
啟動mitmdump,它也會監聽8080端口,命令如下所示:
mitmdump
這時候你只需要在手機上任意打開app或瀏覽器,terminal頁面便會呈現所有請求:
在mitmproxy命令下,會呈現三個分類 : Request Response Detail
可自行查看內容
當然如果你覺得終端看起來太費勁,你也可以在瀏覽器里查看 ,命令如下:
mitmweb
這就相當於之前我們在瀏覽器開發者工具監聽到的瀏覽器請求,在這里我們借助於mitmproxy完成。Charles完全也可以做到。
這里是剛才手機打開頁面時的所有請求列表,左下角顯示的x/xx代表一共發生了xx個請求,當前箭頭所指的是第x個請求。
他的優越性之一在於還可以結合python,我們只要寫好請求和處理邏輯如:數據的解析,過濾,存儲,就擺脫手動截取和分析響應了,方便了一步。
它的常用命令如下:
mitmdump -w example.csv #example.csv 自定義
指定python文件處理請求和響應:
mitmdump -s doing.py #要指定文件絕對路徑,建議到當前文件夾執行
1.2例子
1。
#這里必須寫flow,規定格式
def request(flow): flow.request.headers['User-Agent'] ='MitmProxy' print(flow.request.headers)
2.
def paser(flow): ditail_url='XXXXXXX' if flow.request.url.startswich(detail_url): res = flow.response.text data = json.loads(res) analsys(data) def analsys(data): pass
每個請求和響應都會進過該.py,就可以對你需要的url做一個簡單過濾判斷,對數據進一步操作(有點像中間件的作用)。
3.
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))
四。appium環境
前面對后續的請求和響應做了簡單處理,但是總歸人為對真機操作,量一大就會不方便了,而下面的appium就這時候加入進來了
appium的安裝就偷個懶。。嘿嘿
安卓:https://blog.csdn.net/weixin_43095131/article/details/106555615
tools/android update sdk --no-ui #sdk 安裝命令
ios:https://www.cnblogs.com/May-study/p/10900188.html
https://www.cnblogs.com/dreamhighqiu/p/10989962.html(推薦)
綜合:https://cuiqingcai.com/5407.html
坑:https://blog.csdn.net/temanm/article/details/51862600
參考:https://www.jianshu.com/p/b0612fcedfa1