Wireshark 是一個可以監聽網路封包的軟體,在這個章節我們拿他來查看 Transport Layer 傳輸層 的 TCP 與 UDP 的封包資料是如何傳遞的,我們以 DNS Query 與 TCP 三向交握為例來學習如何使用 Wireshark。
Wireshark 基礎配置
1. 打開 Wireshark 的畫面,點選擷取封包設定
2. 選擇想要擷取封包的 interfaces,然後按下 start 開始
3. 設定 filter 過濾出我們要的
Wireshark 的 filter 有兩種,分別是 CaptureFilter 跟 DisplayFilter
顧名思義,第一種 CaptureFilter 是在開始擷取的時候就設定好,會把我們要的資料在擷取的時候過濾出來
第二種 DisplayFilter 則是在擷取過後我們可以在列舉封包的區塊看到我們的封包,在這個時候可以即時的下 filter 的 expression 去過濾出我們感興趣的封包
在下面的例子我們只會使用 DisplayFilter 來示範,有興趣的朋友可以嘗試使用兩種不同的過濾方式。
DNS Query
我們透過 nslookup 這個指令對 1.1.1.1 的 Domain Name Server 詢問 bit.kuas.edu.tw
的 IP 位置
1 | $ nslookup bit.kuas.edu.tw 1.1.1.1 |
我們希望在 Wireshark 查看對伺服器 1.1.1.1 之間的封包往來,所以我們在 Display Filter 下這樣的 expression,來過濾出跟 1.1.1.1 IP 位址之間的封包。
1 | ip.addr == 1.1.1.1 |
看看我們在 wireshark 擷取到的封包
兩張圖我們可以清楚看到 Wireshark 列出了我們跟目標伺服器 1.1.1.1 一來一往的兩個封包
TCP 三向交握
TCP three-way handshake 是 Client 跟 Server 在建立 TCP 連線時候的三個步驟
- The first host (Alice) sends the second host (Bob) a “synchronize” (SYN) message with its own sequence number
x
, which Bob receives. - Bob replies with a synchronize-acknowledgment (SYN-ACK) message with its own sequence number
y
and acknowledgement numberx+1
, which Alice receives. - Alice replies with an acknowledgment (ACK) message with acknowledgement number
y+1
, which Bob receives and to which he doesn’t need to reply.
引用自 wiki TCP three-way handshake
簡單的描述 TCP 三向交握的三個步驟
- client 傳送給 server SYN 的請求,並帶著 sequence number
x
。 - server 回復一個 SYN-ACK 的訊息給 client,並帶著 secuence number
y
與 acknowledgement numberx+1
。 - client 傳送給 server acknowledgement message,帶著 acknowledgement number
y+1
。
我們使用 telnet 的指令來對 bit.kuas.edu.tw
80 port 做連線
1 | $ telnet bit.kuas.edu.tw 80 |
透過上面 nslookup 查詢到的我們知道 bit.kuas.edu.tw 的 ip 位址是 140.127.112.21
所以直接在 wireshark 設定下列的 expression
1 | ip.addr == 140.127.112.21 |
我們可以在 wireshark 看到擷取到內容,如上面所敘述的三個步驟成功建立了 TCP 的連線