為什麼是 Wireshark#

Wireshark 大概是最普及的封包嗅探(packet-sniffing)應用程式:跨平台、易於上手,並內建大量協定分析功能。第 5 章會談到如何自行撰寫解析器(dissector)來輔助協定分析;在此之前,先把 Wireshark 設定好來擷取網路上的 IP 流量。

要從乙太網路介面(有線或無線)擷取流量,擷取裝置必須處於混雜模式(promiscuous mode)。處於混雜模式的裝置會接收並處理它所看到的任何乙太網路訊框(frame),即使該訊框的目的地並不是這個介面。

擷取「同一台電腦上」執行的應用程式最簡單:監看對外的網路介面,或是本機回送介面(loopback interface,也就是俗稱的 localhost)即可。若目標不在本機,你可能得動用網路硬體——例如集線器(hub)或經過設定的交換器(switch)——來確保流量會被送到你的網路介面。

三個檢視區域#

從乙太網路介面擷取流量時,預設畫面分成三塊:

圖表 2-2:Wireshark 的預設檢視

  • 封包時間軸:從網路上抓到的原始封包列表,包含來源與目的 IP 位址,以及解碼後的協定摘要資訊。
  • 解析檢視:把單一封包拆解成不同的協定層,對應到 OSI 網路堆疊模型。
  • 原始資料檢視:以原始形式(raw form)呈現擷取到的封包。

追蹤 TCP 串流#

TCP 是以串流為基礎(stream based) 的協定,設計上能從封包遺失或資料損毀中恢復。由於網路與 IP 的本質,封包不保證會依特定順序抵達——因此擷取封包時,時間軸檢視可能難以判讀。

Wireshark 對已知協定提供解析器,通常能把整條串流重組起來,把所有資訊集中呈現在一處。做法是在時間軸中選取某條 TCP 連線裡的封包,然後從主選單選擇 Analyze ▸ Follow TCP Stream

圖表 2-3:追蹤一條 TCP 串流

即使是沒有對應解析器的協定,Wireshark 仍能解碼串流並以易讀的對話框呈現,這在面對自訂協定時特別有用。

Wireshark 功能非常完整,全面介紹已超出本書範圍。若你還不熟悉它,建議另尋一本好的參考書,例如《Practical Packet Analysis, 3rd Edition》(No Starch Press, 2017)。它在分析應用程式網路流量上不可或缺,且以 GPL(General Public License)授權免費提供。