app爬蟲神器--mitmproxy,mitmdump和appium的安裝使用


以前的只是簡單了解過,爬蟲一直對移動端做得少,今天在一前輩任務下用到了,不得不說不得不愛。

熟話說:好記性不如爛筆頭,這里做一下淺薄的筆記。

 

摘要: 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)
我們定義了一個request()方法,參數為flow,它其實是一個HTTPFlow對象,通過request屬性即可獲取到當前請求對象。然后打印輸出了請求的請求頭,將請求頭的User-Agent修改成了MitmProxy。

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))
這里調用了ctx模塊,它有一個log功能,調用不同的輸出方法就可以輸出不同顏色的結果,以方便我們做調試。例如,info()方法輸出的內容是白色的,warn()方法輸出的內容是黃色的,error()方法輸出的內容是紅色的。


前面幾個功能給我一種像scrapy的感覺,哈哈哈

四。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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM