通常一個大型專案在開發時,會切分為各個小型專案,而每個小型專案的資料又會互相傳遞,以達成各個專案的要求 。
因為資料必須在二個網站間傳遞,所以常常會遇到下列狀況:
-
他專案透過HTTP呼叫API的方式,取得我們專案的資料。
- 我們專案依照API的規範實作,卻取不到他專案的資料。
在二個專案透過網路溝通的這種狀況下,根本不清楚問題到底是出在我們身上,還是他專案的身上,所以通常會採取協作的方式來解決這個問題;
不過這是理想的狀況,在現實面更常發生的狀況是:
- 對方根本不理我們。
- 對方要求提出資料佐證是他們的問題。
或者是:
- 我們要求對方寫出詳細的操作方式。
- 我們要求對方提出送出的資料參數。
這些狀況才是更常在工作上遇到的,通常遇到這類問題,即使有心想要解決,但是實際上因為很難停在Debug模式,所以必須要花很多時間才能處理,像這種時候,筆者只會做一件事:抓取封包。
抓取封包,可以證明在傳輸過程中,網路上是帶了什麼資料,更甚者,可以透過更改封包的方式,來進入本機的Debug模式(這技巧會在下一篇中提及,本篇只教導如何抓取封包)。
在進入實作前,一樣先瞭解一下前提與待會要作的事情;首先,我們會抓取封包,雖然封包是可以將網路傳輸的資料變成可見文字,但是也只限於未加密前的文字,換句話說,加密後的文字,例如HTTPS,即使抓取成功了,我們也看不懂那是什麼東西;再來,我們待會介紹的範例是HTTP的封包格式,因為筆者的工作關係,所以最常需要解析的也是HTTP封包。所以待會我們會示範截取HTTP封包並瞭解封包內容。
準備工具:Wireshark(Windows),終端機程式(Linux base or MAC)
前提:明確封包的目的,即對方的IP甚至Port。
狀況說明:我們將擷取由我們的本機環境送給對方的封包,並簡單的解析其中的參數。
為了解說的方便,我們一樣先將環境的機器給予IP,如下圖:
下列步驟適用Windows系統:
-
開啟Wireshake
-
選擇發送封包的網卡(會與對方服務器進行溝通的網卡,以本例來說,是選擇「無線網路連線」)。
-
點選「Start」即開始抓取封包。
-
開始抓封包時會發覺有太多的封包在跑,這是很正常的,因為我們尚未設定封包的條件,所以凡是經過這張網卡的資料,都會被攔截並顯示。
-
設定我們的過濾條件「ip.dst==192.168.21.35 and tcp.port==8080」,並按「Apply」,此時雖然所有的封包都會被抓取,但只會顯示我們要的資料,如果沒有資料,那代表封包還未送出,執行程式讓它送出封包後,即能取得類似下方的資料。
-
選擇其中一筆HTTP按滑鼠右鍵→Follow→TCP Stream
-
可以很清楚地看到封包的內容,依此來判斷送出的內容是否與他專案的API相符