Site icon Soul & Shell Blog

Tcpdump 你也會的 Web HTTP 封包除錯技巧(Linux Server Tcpdump)

Server Side 封包監聽 for Liunxsniffer

前一篇介紹完 Client 的 HTTP 封包監看方式,但有時候還是找不出問題,就像一開始在前言提到的,複雜的網路環境都有可能造成問題。因此學習如何在 Server 監聽封包也是必要的除錯工作,在 Windows 環境已經有很多現成的圖型介面軟體可以使用,像是免費的 WireShark Packet Sniffer 就很好用 (還是 Open-Source 喔) 了。那我們來介紹一下 Linux 系統下如何監聽封包囉,大多數的 Linux Server 都不會安裝圖型介面,那我們可要找個文字介面的封包監聽工具。Linux 中最基本的方式就是透過 TCPDUMP 這個套件,透過「tcpdump」指令即可抓取封包,使用方式如下:

[root@dev ~]# tcpdump -i eth0 tcp port 80 -A -nn

上述命令中「-i eth0」參數表示擷取 eth0 Input 封包;並可使用「tcp」指定通訊協定(HTTP 走 TCP)與「port 80」來指定 HTTP Server 的監聽埠號;「-A」參數表示使用 ASCII 顯示擷取的封包內容;「-nn」參數表示不做 IP 反解,速度才會比較快。執行後如有 TCP 80 Port 連線就會被抓到,由於 TCPDUMP 是屬於極底層的封包擷取機制,因此會看到一些 TCP Handshaking 的封包,擷取的畫面如下:

上圖中我們可以看到 TCP Handshaking 與 HTTP Request / Response 回應過程,其中可以發現 HTTP 確實透過兩個「換行字元」作為結束資料傳送的機制,也就是我們利用 Telnet 進行 Web Server 連線時 (HTTP 是標準的 TCP Socket 連線),按下兩次「Enter」就會結束的機制是一樣的。

結語

TCPDUMP 能力強大,可以監聽 TCP, UDP, ICMP 等等封包,但是我常覺得實務應用上其實過於低階,若是對網路七層 (OSI 7 Layer Model) 不夠熟悉,有時候其實很難進一步的分析,更不用說是除錯了。其實如果只是單純要進行 HTTP 封包分析,那麼在 Linux 中還有另一個叫做 httpry 套件可以用,對於初級者來說反而比較適合,httpry 就留到下次再介紹囉。

參考資料

Exit mobile version