前言
對於一般開發網站的IDE自帶的服務器是都跑在 localhost 地址上的。(如下圖的asp.net)
而這種地址是只能在本機通過 localhost 或 127.0.0.1 地址訪問到,而無法直接通過本機的內網IP地址訪問的。
所以就無法實現在虛擬機中訪問本地localhost站點,以及在虛擬機訪問時的代碼斷點,調試,以及用手機訪問本地站點等。
雖然可以使用IIS等web服務器發布本地IP上,來實現外部訪問,但是依然無法實現代碼斷點,當然可以用附加進程調試,不是本文討論范圍。
接下來就來講解如何使用本機內網地址訪問localhost上運行的網站
實現思路
期望目標是:在虛擬機中訪問真實機的內網IP地址來訪問真實機中運行的localhost的站點。
遂,在真實機中開啟Fiddler,來充當虛擬機的代理服務器,去向真實機請求資源,同時由Fiddler修改虛擬機的請求報文,將虛擬機的Request請求報文中的真實機的IP地址改為localhost。
設置Fiddler
要用到的軟件只有一個,Fiddler,沒有的可以去官網下載:http://www.telerik.com/fiddler
進入Fiddler的Tools的FiddlerOptions...選項,Connections選項卡
勾選上“Allow remote computers to connect”選項,允許其他計算機連接
如果你的端口沒有被占用的話默認應該是 8888 端口
設定虛擬機的代理服務器
之后進入虛擬機,設置系統代理為當前真實機的IP的8888端口,推薦使用我之前文章中寫的“自動設置代理服務器批處理”
設置完成后去查看設置情況, 10.0.1.11 是我的真實機的內網地址,端口8888。
設置完成后從虛擬機訪問 真實機的IP+8888 端口,如果能顯示出FiddlerEchoService就說明代理沒問題。
此時在虛擬機中訪問百度已經可以被fiddler抓到了。
關於如何鑒別流量是本機的還是從遠程訪問的很容易,看Fiddler的Process列即可:
注意:本機流量可以追查到流量進程名及PID,而遠程流量是無法顯示進程的。
上圖第一條就是由火狐發出的請求,而下面的流量都是從虛擬機發出的請求,沒有進程名。
設置Fiddler自動化修改數據報文
現在從虛擬機已經可以通過我的真實機做代理向外訪問了,所以接下來需要從代理服務器Fiddler中修改數據包即可。
需要一款FiddlerScript Editor的軟件,可以從官網下載:http://www.telerik.com/download/fiddler/fiddlerscript-editor
關於FiddlerScript 的使用和介紹在之前的一篇文章中已經提到一些。
選擇跳轉至 OnBeforeRequest 函數。
通過右側的API文檔得知,oSession對象的屬性hostname表示不包含端口號的HTTPHeader的host字段值。
在此函數最后寫上如下代碼,目的是要在數據發來請求后修改數據報文,將指向本機的URL修改localhost地址。
保存后回到虛擬機。訪問10.0.1.11的localhost服務9527端口,可以發現,所有數據包都被修改為localhost地址
同時,我真實機上跑的localhost的服務也可以被內網其他計算機訪問了。
手機端訪問
前提是手機連接的wifi必須要和真實機在同一網段。
如圖,雖然連接了同一網段的wifi下,但不設置也是無法訪問的。
進入手機wifi設置,高級設置,代理設置,修改為“手動”
IP地址為我的真實機IP,10.0.1.11,
端口為Fiddler的監聽端口:8888
設置了代理服務器后,就可以順利通過IP地址訪問localhost的服務了,當然也可以同步加斷點,調試等。
注意事項
1,注意在使用過程中Fiddler不能關閉,關閉了就沒有代理服務器了。
2,注意在使用完成后,把代理服務器設置刪除,否則虛擬機/手機就無法正常上網了。
相關鏈接
工具下載(GitHub):
其他文章: