結束了前兩週在網路底層(Layer 2、3、4)的泥淖中打滾,今天我們正式邁入鐵人賽的第三階段:HTTP 流量與應用層深度分析!
我們終於往上爬到了大家最熟悉的「應用層 (Layer 7)」。每天打開瀏覽器上網,背後運作的幾乎都是 HTTP (超文字傳輸協定) 或加密版的 HTTPS。最棒的是,早期的 HTTP 協定是以「純文字」進行溝通的,這代表只要我們用 Wireshark 攔截下來,裡面的對話內容完全是一覽無遺。
今天,我們就來親手抓出網頁瀏覽時最經典的兩種「狀態碼 (Status Code)」。
當你在瀏覽器輸入網址並順利看到網頁畫面時,背後其實是伺服器對你說了一句:「200 OK (沒問題,資料給你)」。
【實作練習】
http (過濾掉底層的 TCP 三方交握,讓畫面更乾淨)。curl [http://example.com](http://example.com)

畫面解析:
從 Wireshark 的列表中可以看到非常標準的「一問一答」:
GET / HTTP/1.1):這是我們 (客戶端) 發出的請求,意思是「請給我網站根目錄 ( / ) 的資料」。HTTP/1.1 200 OK):這是伺服器的熱情回應,表示請求成功,並把網頁資料包在裡面傳回來了。伺服器回傳網頁時,除了把 HTML 原始碼丟給我們,還會在封包前面附加一段「標頭 (Headers)」,用來告訴瀏覽器這包資料的屬性。
【實作練習】
停止抓包後,我們點擊剛剛那行 200 OK 的封包,並在中間的詳細資訊窗格展開最下方的 Hypertext Transfer Protocol 這一層。

畫面解析:
展開後,你可以清楚看到伺服器跟我們說的悄悄話:
Status Code: 200 (狀態碼)Content-Type: text/html (告訴瀏覽器這是一份 HTML 文件)Server: cloudflare (甚至不小心洩漏了伺服器是使用了 Cloudflare 的服務)除了成功的 200,我們在網路上最常遇到的絕對是「404 Not Found」。這代表你請求連線成功了,但你要找的檔案不在伺服器上。
【實作練習】
我們再次啟動 Wireshark 擷取,並在終端機故意輸入一個不存在的路徑:
curl [http://example.com/idonotexist](http://example.com/idonotexist)

畫面解析:
這一次,客戶端發出的請求變成了 GET /idonotexist HTTP/1.1。
而伺服器收到後找不到這個檔案,於是毫不留情地回傳了紅色的 HTTP/1.1 404 Not Found 封包。
常見的狀態碼還有:
今天我們正式踏入應用層,並透過實作驗證了 HTTP 的純文字明碼特性。我們不僅抓到了請求與回應,還拆開標頭看到了伺服器的底細。這為我們接下來的網頁流量分析打下了非常好的基礎。
既然 HTTP 是明碼傳輸,那是不是代表別人在網頁上輸入的帳號密碼,我們也都能看見?
明天 [Day 16],我們將進入本系列最精采的實戰之一:教你使用 Wireshark 的殺手級功能 「Follow TCP Stream (追蹤 TCP 串流)」,直接把破碎的封包拼湊成完整的對話紀錄,看穿未加密通訊的危險性!我們明天見。