前言
在App開發的過程當中,抓包是一個很常見的需求,而有些app的請求不會在網絡設置代理時被抓到數據包,這裏若是須要抓包就須要搭建反向代理html
什麼是反向代理
和正向代理相應的,正向代理代理客戶端,反向代理代理服務端git
須要準備的工做
- 在本身電腦上面搭建一個可用的Charles
- 須要抓包的遠端服務的端口號和Host地址
- 在本身電腦上面搭建一個本地DNS解析服務
具體步驟 (Mac下的操做,Windows也同理)
- 確保手機鏈接上Charles,本身電腦上面可以看到正常請求出來的數據包(這裏有一篇如何使用Charles抓包的教程)
- 打開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
- 這個時候,手機app發出的請求,須要請求的是遠端的服務器,而這時候Charles已經成爲了服務器的代理,那麼咱們須要把app的請求指向Charles
- 首先給本身的手機設置靜態的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
- 首先去SimpleDNSServer,這裏clone下來代碼
- 而後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,就表明已經創建好了。