TELNET封包實戰

Gordon Fang
5 min readMar 16, 2019

--

什麼是TELNET?

TELNET是一個簡單應用層(OSI — Application Layer)「遠端終端機協定」,允許使用者透過 TCP連線入遠端伺服器。

使用於網際網路區域網中,使用虛擬終端機的形式,提供雙向、以文字字串為主的命令列介面互動功能,也就說使用者能使用TELNET協定從自己PC連到伺服器,藉此實現遠端連線概念。

TELNET運作過程(How it works)

圖一、TELNET運作過程

TELNET登入流程

  1. 終端使用者與遠端伺服器建立TCP連線,連接埠為23號
  2. 終端使用者進行遠端伺服器帳號密碼登入
  3. 遠端伺服器回應終端使用者
  4. 撤除連線

TELNET封包實戰 (Packet analysis in practice)

我使用WIRESHARK封包監聽軟體,這邊我們選網路介面乙太網路下去做監聽,終端機的部分輸入telnet ptt.cc,用telnet協定遠端登入台大ptt主機後,輸入假的帳號密碼。

圖二、終端機輸入遠端連線
圖三、PTT登入畫面

輸入完後,便是發送完封包過去到台大的主機,接著我們停止監聽,在Display filter篩選我們要的封包協定,這邊打上telnet,我們要抓的是telnet封包。

圖四、篩選封包類型

紅色圈起來的部分是我們剛剛輸入telnet ptt.cc、輸入帳號密碼的整體運作過程,下面我會做分解解釋telnet連線過程。

圖五、Wireshark封包擷取圖

DNS查詢 (DNS query)

圖六、nslookup命令查詢ptt.cc對應的IP位址
圖七、終端機向DNS發送查詢封包

圖五紅線方框內的第一是指終端機向中華電信Hinet 網域名稱系統(英文:Domain Name System,縮寫:DNS)主機發送查詢封包(standard query),傳送的內容即為ptt.cc,第二個封包就是從Hinet主機傳(IP位址:168.95.1.1)過來的回覆的封包,以上流程如同在終端機輸入nslookup ptt.cc。

TCP 三向交握 (Three-way Handshake)

圖八、TCP連線建立

在圖五的三個TCP封包,通常我們稱之為TCP連線的三向交握,英文叫做Thee-way handshake,是TCP建立虛擬連線的方式,其中SYN跟ACK控制位元,SYN (同步序號,Synchronize sequence numbers),每一個封包都有自己的序號(Sequence number),SYN是用來同步雙方連線,ACK (確認號,Acknowledgment field significant),Acknowledgment顧名思義就是對方承認雙方彼此間的連線, 一旦連線建立,則每次都需送出,完成TCP連線後就可以開始傳送資料。

圖九、TCP封包內容

TELNET封包傳送 (Packet Transmission)

圖十、TELNET完整連線

前面建立TCP連線後,且輸入完帳號密碼,就可以向PTT主機丟TELNET封包,請求登入,主機那邊收到會回覆登入結果。

圖十一、TELNET封包解析
圖十二、TELNET封包解析

我們在送出去的封包按下右鍵,追蹤TCP串流,點進去會發現,送出去的帳號與密碼其實都沒經過加密。

結語

TELNET是一個很簡易協定的遠端連線,早期網管人員會用此協定進行伺服器遠端登入,但由上圖使用Wireshark封包監聽軟體可得知,其實TELNET傳送的個人資訊、帳號、密碼容易遭到監聽、竊取,隨著資訊安全意識的提高,許多新版的作業系統會將此服務關閉,或是關閉連接埠23。

進而取代之是Secure Shell(安全外殼協定,簡稱SSH)協定,利用金鑰匙交密達到秘密通訊,下篇我會講解其運作過程,記得連到PTT時不要再使用TELNET,不管是使用APP或是電腦,APP則可以勾選SSH協定。

參考

TCP 三向交握 (Three-way Handshake)
https://notfalse.net/7/three-way-handshake#SYN-Synchronize-sequence-numbers

Telnet Wikipedia
https://zh.wikipedia.org/wiki/Telnet

實戰封包分析:使用Wireshark

--

--

Gordon Fang

Hi 我是 Gordon,目前是自然語言實驗室的研究生,曾經是金融業軟體工程師,我對大語言模型、設計模式、Linux、平面設計都有涉略,歡迎相互交流。