close

通常一個大型專案在開發時,會切分為各個小型專案,而每個小型專案的資料又會互相傳遞,以達成各個專案的要求  。

因為資料必須在二個網站間傳遞,所以常常會遇到下列狀況:

  • 他專案透過HTTP呼叫API的方式,取得我們專案的資料。

  • 我們專案依照API的規範實作,卻取不到他專案的資料。

在二個專案透過網路溝通的這種狀況下,根本不清楚問題到底是出在我們身上,還是他專案的身上,所以通常會採取協作的方式來解決這個問題;

不過這是理想的狀況,在現實面更常發生的狀況是:

  • 對方根本不理我們。
  • 對方要求提出資料佐證是他們的問題。

或者是:

  • 我們要求對方寫出詳細的操作方式。
  • 我們要求對方提出送出的資料參數。

這些狀況才是更常在工作上遇到的,通常遇到這類問題,即使有心想要解決,但是實際上因為很難停在Debug模式,所以必須要花很多時間才能處理,像這種時候,筆者只會做一件事:抓取封包。

抓取封包,可以證明在傳輸過程中,網路上是帶了什麼資料,更甚者,可以透過更改封包的方式,來進入本機的Debug模式(這技巧會在下一篇中提及,本篇只教導如何抓取封包)。

在進入實作前,一樣先瞭解一下前提與待會要作的事情;首先,我們會抓取封包,雖然封包是可以將網路傳輸的資料變成可見文字,但是也只限於未加密前的文字,換句話說,加密後的文字,例如HTTPS,即使抓取成功了,我們也看不懂那是什麼東西;再來,我們待會介紹的範例是HTTP的封包格式,因為筆者的工作關係,所以最常需要解析的也是HTTP封包。所以待會我們會示範截取HTTP封包並瞭解封包內容。

準備工具:Wireshark(Windows),終端機程式(Linux base or MAC)

前提:明確封包的目的,即對方的IP甚至Port。

狀況說明:我們將擷取由我們的本機環境送給對方的封包,並簡單的解析其中的參數。

為了解說的方便,我們一樣先將環境的機器給予IP,如下圖:

Untitled.png

下列步驟適用Windows系統:

  1. 開啟Wireshake

  2. 選擇發送封包的網卡(會與對方服務器進行溝通的網卡,以本例來說,是選擇「無線網路連線」)。

  3. 點選「Start」即開始抓取封包。

 

  1. 開始抓封包時會發覺有太多的封包在跑,這是很正常的,因為我們尚未設定封包的條件,所以凡是經過這張網卡的資料,都會被攔截並顯示。

 

  1. 設定我們的過濾條件「ip.dst==192.168.21.35 and tcp.port==8080」,並按「Apply」,此時雖然所有的封包都會被抓取,但只會顯示我們要的資料,如果沒有資料,那代表封包還未送出,執行程式讓它送出封包後,即能取得類似下方的資料。

 

  1. 選擇其中一筆HTTP按滑鼠右鍵→Follow→TCP Stream

  1. 可以很清楚地看到封包的內容,依此來判斷送出的內容是否與他專案的API相符

 

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(1) 人氣()