使用Charles搭建反向代理

前言

在App開發的過程當中,抓包是一個很常見的需求,而有些app的請求不會在網絡設置代理時被抓到數據包,這裏若是須要抓包就須要搭建反向代理html

什麼是反向代理

和正向代理相應的,正向代理代理客戶端,反向代理代理服務端git

須要準備的工做

  • 在本身電腦上面搭建一個可用的Charles
  • 須要抓包的遠端服務的端口號和Host地址
  • 在本身電腦上面搭建一個本地DNS解析服務

具體步驟 (Mac下的操做,Windows也同理)

  1. 確保手機鏈接上Charles,本身電腦上面可以看到正常請求出來的數據包(這裏有一篇如何使用Charles抓包的教程
  2. 打開Charles,勾選proxy -> reverse proxise setting,進入反向代理設置界面。

3. 在反向代理設置界面中勾選Enable Reserve Proxise ,而後點擊add,來添加一組反向代理設置

4. 設置反向代理的端口號,IP地址等信息。,並點擊OK保存

  • Local Port是指本機的一個空閒端口,這裏和遠端服務保持一致,本例中使用80;
  • Remote Host是指遠端服務的Host,本例中使用remote.host;
  • Remote Port是指遠端服務的端口號,在本例中訪問遠端端口號爲80;

這時候可能會發生一些錯誤:

  • 如圖顯示bind失敗,這多是由於Charles沒有管理員權限致使的
  • 這時候須要打開一個有權限的Charles,能夠在命令行中執行
    sudo /Applications/Charles.app/Contents/MacOS/Charles
  1. 這個時候,手機app發出的請求,須要請求的是遠端的服務器,而這時候Charles已經成爲了服務器的代理,那麼咱們須要把app的請求指向Charles
  2. 首先給本身的手機設置靜態的DNS,DNS爲本機的IP地址

8. 在本身地址上面啓動一個DNS解析服務,把遠端的IP地址映射到本機IP地址( 這裏的具體步驟在下面
9. 這時候請求的過程,就變成了app中發出http://remote.host:80 請求 -> 本身電腦進行DNS解析,解析成了http://本機IP:80 -> 而後charles的反向代理服務收到了這個請求 -> 去請求遠端服務器的http://remote.host:80
10. 若是一切鏈接就緒,這時候Charles就會監測到反向代理訪問,點擊allow容許它吧

如何搭建一個本地的DNS服務

搭建一個本地DNS解析服務須要一個腳本就能夠執行,我是用的是SimpleDNSServergithub

  1. 首先去SimpleDNSServer,這裏clone下來代碼
  2. 而後master文件夾下創建一個hosts文件,寫入本機IP到remote.host的映射

3. 再在命令行中執行 sudo /Users/xxxx/Downloads/SimpleDNSServer-master/SimpleDNSServer.py /Users/xxxx/Downloads/SimpleDNSServer-master/hosts
命令行中會輸出 SimpleDNSServer :: hosts file -> /Users/xxxx/Downloads/SimpleDNSServer-master/hosts
4. 這時候操做一下App,若是能看到命令行中解析的DNS的log,就表明已經創建好了。

固然,這個網絡上面有不少更加詳細的教程,好比:(這是一個如何搭建本地DNS的教程

相關文章
相關標籤/搜索