National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 20

封包分析

用 Wireshark 的方式讀封包:過濾、欄位與追蹤 TCP 串流
Interaction 25 minute(s)

Learning Objectives

  • 說明封包擷取是什麼,以及只能在自己有權限的網路上擷取的原因
  • 讀懂封包分析工具的三個窗格:封包清單、逐層欄位、十六進位
  • 寫出常用的顯示過濾條件(協定名稱、ip.addr、tcp.port、旗標與 &&、||、!)
  • 用「追蹤 TCP 串流」看一條連線雙方送出的內容
  • 從封包裡找出 DNS 查詢與 HTTP 請求,以及查無此名稱、連線被拒絕這類問題

把網路上的封包拿出來看

前幾課的模擬器會畫出封包怎麼走。真實的網路沒有這種畫面,但我們可以擷取(capture)封包: 擷取軟體把經過網路卡的每一個訊框複製一份存下來,之後一層一層拆開來看。計算機概論軌第 30 課〈協定分層與 TCP/IP〉說的分層與封裝,在這裡會看得一清二楚。

封包分析是排除網路問題最直接的方法。使用者說「網頁打不開」,擷取一下就知道是 DNS 查不到、TCP 連不上,還是伺服器回了錯誤。

工具 特色
Wireshark 圖形介面,免費開放原始碼,三個窗格的介面是這一課練習的樣子
tcpdump 命令列工具,常用在沒有圖形介面的伺服器上擷取,存成檔案再用 Wireshark 開

擷取下來的檔案常見的格式是 pcap 或 pcapng。這一課的封包資料是本課自己編寫的範例,使用文件專用的位址; 小工具依標準格式把每個位元組組出來,校驗和也是真的算出來的。

先講清楚:誰的網路才能擷取

封包裡有別人的網址、訊息、Cookie,HTTP 的話連密碼都看得到。所以擷取封包有明確的界線:

  • 只在自己有權限的網路上擷取:自己的電腦、自己家裡的網路、課程或工作明確授權的實驗環境。
  • 不要擷取別人的通訊:宿舍、圖書館、咖啡店的公共網路,即使技術上做得到,也不可以。臺灣的刑法與通訊保障及監察法都有處罰違法監察、竊錄他人通訊的規定;學校的網路使用規範通常也明文禁止。
  • 擷取檔要當成機密資料保管:裡面可能有登入資訊;分享給別人之前先確認內容,必要時只保留需要的封包。
  • 只拿來除錯與學習:發現別人的帳號密碼,要通知管理者修正,而不是使用它。

這一課所有的練習都使用自編的範例資料。

三個窗格

Wireshark 的主畫面由上到下分成三個窗格:

窗格 顯示什麼 看什麼
封包清單 一個封包一列:編號、時間、來源、目的、協定、長度、摘要(Info) 整體的順序與對話
封包細節 選取的封包一層一層展開:Frame、Ethernet II、IPv4、TCP 或 UDP、應用層 每個欄位的值
位元組 同一個封包的十六進位與 ASCII 欄位實際佔了哪幾個位元組

點細節窗格裡的欄位,位元組窗格會標出它的位置;狀態列會顯示這個欄位的過濾名稱(例如 ip.ttl),可以直接拿來寫過濾條件。 「Time」欄預設是距離第一個封包的秒數;TCP 的序號預設顯示相對序號(從 0 開始),原始的 32 位元序號另外列出。

互動練習:讀一次網頁瀏覽的封包

PC1(192.168.1.10)打開 http://www.club.tw/ 時擷取到的 14 個封包。點清單的一列,中間會逐層列出欄位,下方是十六進位。 清單也可以用鍵盤操作:Tab 移到清單,再用上下方向鍵。

顯示過濾的寫法

擷取檔動不動就有上萬個封包,顯示過濾(display filter)讓你只看需要的。常用的寫法:

寫法 意思
dns、http、tcp、udp、arp、icmp 只看這種協定
ip.addr == 192.168.1.10 來源或目的是這個位址
ip.src == 192.168.1.10、ip.dst == … 只看來源,或只看目的
ip.addr == 192.168.1.0/24 整個網段
tcp.port == 80 來源埠或目的埠是 80
tcp.flags.syn == 1 && tcp.flags.ack == 0 只看建立連線的第一個 SYN
tcp.flags.reset == 1 連線被重置(RST)
dns.qry.name == "www.club.tw" 查詢這個名稱的 DNS 封包
dns.flags.rcode == 3 查無此名稱的 DNS 回應
http.request.method == "POST" HTTP 的 POST 請求
http.host contains "club" 文字欄位包含某段字

條件可以用 &&(and)、||(or)、!(not)組合,也可以加括號,例如 dns || (tcp.port == 80 && tcp.len > 0)(DNS,或 80 埠上有帶資料的 TCP 封包)。 輸入框變綠色表示語法正確,變紅色表示有錯。

要分清楚擷取過濾(capture filter)和顯示過濾:擷取過濾在擷取之前決定要存哪些封包(語法不同,例如 port 53),沒存下來的就沒有了; 顯示過濾只是把已經存下來的封包藏起來,隨時可以改。這一課的練習只用顯示過濾;小工具支援的欄位是 Wireshark 常用欄位的一小部分。

小測驗:窗格與過濾

1.

想看「192.168.1.10 和任何人之間的網頁流量(80 埠)」,哪一個過濾條件最合適?

2.

在封包細節窗格點了一個欄位,位元組窗格標出 cb 00 71 50 四個位元組。這個欄位最可能是什麼?

3.

擷取時設了擷取過濾 port 53,事後發現想看的 HTTP 封包不見了。改用顯示過濾 http 能找回來嗎?

第 1 次作答

追蹤 TCP 串流,以及從封包找問題

一條 TCP 連線的資料常常分散在好幾個封包裡,中間還夾著 ACK。追蹤 TCP 串流(Follow TCP Stream)會把同一條連線雙方送出的資料依序接起來, 用兩種顏色分別標示用戶端與伺服器送出的部分(Wireshark 預設是紅色與藍色),同時把過濾條件設成 tcp.stream eq 編號。 每一條 TCP 連線依出現順序編號,從 0 開始。

從封包看出常見的問題:

在封包裡看到 代表什麼 對應的使用者症狀
DNS 回應是 No such name(dns.flags.rcode == 3) 名稱不存在 找不到伺服器
送出 SYN,對方回 RST 那個埠沒有服務在聽 連線被拒絕
同一個 SYN 送了好幾次都沒有回應 封包被丟掉(防火牆、主機不在) 一直轉圈圈,最後逾時
HTTP 回應 4xx 或 5xx 連線正常,是請求或伺服器的問題 錯誤頁面
連到 443 埠,只看到 TLS 的 Application Data 連線有加密 (正常)內容看不到

最後一列很重要:HTTPS 的內容在封包分析裡也看不到,只看得到位址、連接埠、資料量與時間。要分析加密的內容,必須在自己的程式或瀏覽器端取得金鑰,這超出這一課的範圍。

互動練習:從封包找出問題

使用者說:「一開始打錯網址,後來網頁連不上,換了網址才登入成功。」下面是那段時間擷取到的封包。 用過濾條件和「追蹤 TCP 串流」找出每一個問題。「追蹤 TCP 串流」要先在清單裡選一個 TCP 封包。

小測驗:串流與排錯

1.

擷取檔裡看到 PC1 送出 SYN 到 203.0.113.80 的 8080 埠,對方立刻回了 [RST, ACK]。最可能的原因是?

2.

按「追蹤 TCP 串流」之後,過濾條件變成 tcp.stream eq 1。它和 ip.addr == 203.0.113.80 && tcp.port == 80 有什麼不同?

3.

同學想在宿舍網路上擷取封包,看看室友都在看什麼網站。下面哪個說法正確?

第 1 次作答

重點整理

  • 封包擷取把經過網路卡的訊框存下來,之後一層一層拆開看;只在自己有權限的網路上擷取,擷取檔要當成機密資料保管。
  • 三個窗格:封包清單看順序、封包細節看每一層的欄位、位元組看欄位實際的位置;欄位的過濾名稱可以直接拿來寫條件。
  • 顯示過濾:協定名稱、ip.addr == …、tcp.port == …、旗標欄位,用 &&、||、! 組合;擷取過濾是擷取之前就決定存什麼。
  • 追蹤 TCP 串流把一條連線雙方的資料接起來;HTTP 看得到全部內容,HTTPS 只看得到加密的資料。
  • 找問題:No such name 是名稱不存在、RST 是埠沒有服務、重複的 SYN 是封包被丟掉、4xx/5xx 是請求或伺服器的問題。

下一課自己寫程式:用 Python 的 socket 開 TCP 連線、送出與接收資料,親手做出這些封包。

這一課完成了!
Next lesson:Python socket(一):TCP
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。