Wireshark
/ WIRE-shark /
擷取封包給你一大堆原始位元組;要理解它們則完全是另一回事。Wireshark 是最受歡迎、能把那一堆位元組變成人類看得懂的東西的工具。把它想成網路對話的翻譯機兼顯微鏡:它接過擷取到的位元組,一層一層解碼,顯示出乙太網路訊框、其中的 IP 標頭、再裡面的 TCP 區段、再裡面的 HTTP 請求——全部展開成你可以逐一點開、有標籤的明文欄位。
實務上,你要嘛讓 Wireshark 從某介面即時擷取,要嘛打開 tcpdump 做出來的 .pcap 檔。它頂部的窗格一行列一個封包;點一個,中間的窗格就把那個封包完全解剖成一棵有名稱的欄位樹(來源連接埠、序號、旗標等等),底部的窗格則顯示原始位元組。它認得上千種協定,所以全部都幫你標好。關鍵在於它還能追蹤一條 TCP 串流以重組整段對話、用顏色標示像重送這類問題,並計算專家摘要——這些都讓你能從「一個封包」走到「這條連線的故事」。
兩個誠實的重點。Wireshark 是分析的前端,不是它自己的擷取引擎:底層它用的是和 tcpdump 一樣的 libpcap/Npcap 與 BPF 擷取機制,所以同樣的規則與限制都適用——你只看得到到達你介面的東西,而在繁忙連結上你可能丟封包。而且它做的是解碼,不是解密:如果流量受 TLS 保護,Wireshark 顯示給你看的是加密的 TLS 記錄,而非裡面的明文,除非你提供連線金鑰。它是極佳的診斷與學習工具,但它無法變魔術打開那些本來就為某個理由而加密的流量。
你在 Wireshark 中打開一份擷取檔,在顯示過濾列輸入「tcp.port == 443 && ip.addr == 93.184.216.34」,點一個封包。詳情窗格展開:Ethernet II、Internet Protocol Version 4、Transmission Control Protocol(Src Port 51514、Seq 1、Flags: SYN)。你剛剛用白話讀到了三向交握的第一個封包。
Wireshark 把擷取到的位元組一層一層解碼成有名稱、可點選的欄位——把原始封包變成可讀的對話。
Wireshark 做的是解碼,不是解密:對 TLS 流量,除非你餵給它連線金鑰,否則它顯示的是加密的記錄,而非明文。而且它只擷取得到到達你介面的東西,與 tcpdump 有同樣的丟封包限制。