從還是Eric Lawrence業餘作品的時代(當時他在IE Team工作),我就知道Fiddler這件網頁傳輸偵錯好工具,之後它的功能愈來愈強大,可以解SSL加密、安裝外掛、過濾及修改封包內容,在2012年Fiddler被Telerik收購成為正式產品(但Telerik承諾Fiddler會永遠提供免費下載使用),Eric也加入Terelik專心開發Fiddler。只是近年來,傳輸側錄已是各家瀏覽器F12網頁偵錯工具的必備內建功能,滿足大部分網頁傳輸偵察需求,動用Fiddler的機會少了許多。
前幾天遇到一個反覆載入網頁造成iOS Safari瀏覽器Crash的詭異茶包(錯誤訊息顯示為JavaScript指令造成EXC_BAD_ACCESS/KERNL_INVALID_ADDRESS。依我理解,網頁的JavaScript執行環境受限,不太有機會讓瀏覽器崩潰,但Safari顯然例外,而這已是我第二次遇到),iPhone/iPad上可用的除錯工具有限(用USB線連上Mac開Safari開發者工具遠端偵錯是我知道的唯一作法),操作及調查都很不方便。直到成功用Mac Safari重現問題,偵察進度才步入正軌。但令人困擾的是,出錯時Safari以Crash收場,開發者工具也跟著關閉,什麼記錄都沒留下。但問題出現在網頁載入階段,我想到若能掌握網頁載入特定JS時出錯的證據,就有機會抓出真兇。既然開發者工具派不上用場,側錄網路封包是第二選擇,第一直覺想到的是Wireshark Mac版,但很快地,我想起老朋友-Fiddler。
Fiddler採用Proxy方式攔載封包,只要設定妥當,偵察對象不限瀏覽器也不限同一台主機,任何經由Proxy存取HTTP的傳輸都可以被記錄下來。但Fiddler安裝在Windows上,想隔空抓藥的第一步需確認Fiddler的遠端連線選項已開啟:
回到Mac端,使用 telnet fiddler_所在IP 8888測試連線OK(若不行,請檢查是否被Windows防火牆擋掉),下一步是指定Safari使用代理伺服器(Proxy)進行連線:
輸入IP與Port:
設定完成,開啟Safari瀏覽網頁,Safari的HTTP傳輸內容就在Fiddler的掌握之中。
成功設定Fiddler後刻意重現當機情境,發現Safari發生Crash的時機不固定,有時甚至第一個JS還沒下載完就崩潰中斷;而開瀏覽器第一次執行則永遠成功,重新載入才會出錯,看來可能與Cache有關,狀況比想像複雜許多 orz 不過,這又是另一段故事了…