為什么telnet可以用來檢查TCP端口是否正常?


為什么Telnet可以用來檢查TCP端口是否正常?
【問題背景】我們在日常的網絡運維中,經常有這樣的場景,實施了網絡安全策略變更后,如何驗證TCP端口已經可以正常經過防火牆訪問了,我們經常采取的手段就是Telnet該服務器的TCP端口。那么為什么是Telnet,其他應用不行嗎?為什么tetnet可以檢查TCP端口正常打開?為什么是TCP端口,UDP端口不行嗎?
【結論】先看結論,節約時間。其實除了Telnet,其他使用TCP端口的應用也是可以的,只不過Telnet比較容易看到結果,多數服務器支持,使用方便。Telnet之所以可以檢查TCP端口,是因為Telnet使用了TCP協議。為什么UDP不行,因為Telnet使用的是TCP端口,UDP可以使用 NetCat等應用檢查。
【解】
一、TCP和UDP的區別,TCP三次握手
        正常知識儲備,哪哪都有,這里不再說了,上一個三次握手的圖,好結合下面的內容看一下。
圖片來自網絡,侵刪
二、TCP模塊是如何處理包的
    這里主要說一下服務器端的TCP模塊是如何處理包的,網卡接收到數據包,一頓操作之后給到IP模塊,IP模塊一頓操作之后給到TCP模塊。故事就從這里說起。我們假設現在接收到的是第一個TCP包,控制位SYN=1,TCP模塊會檢查包的接收方端口號,並確認在該端口上有沒有與接收方端口號相同的且正處於等待連接狀態的套接字。嘿,這里就檢查了端口是否開通了。如果不存在該套接字,則向客戶端返回一個表示接收方端口不存在等待連接狀態套接字的ICMP消息。
    如果存在等待連接的套接字,則為這個套接字復制一個新的副本,並將發送方IP地址、端口號、序號初始值、窗口大小等必要參數寫入這個套接字中,同時分配用於發送緩沖區和接收緩沖區的內存空間。然后生成代表接收確認的ACK號,用於從服務器向客戶端發送的序號初始值,表示接收緩沖區剩余容量的窗口大小,並用這些信息生成TCP頭部,委托IP模塊發送給客戶端。
    這個包到達客戶端之后,客戶端會返回表示接收確認的ACK號,當這個ACK號返回服務器之后,連接就完成了。
    這個過程,跟用什么應用是沒關系的。
三、抓包分析
在虛擬機中創建一個TCP 2233端口,使用的是web應用,可通過http訪問,如下圖
在本地Telnet該端口,可以連接成功,用瀏覽器也能打開
用ssh是不行的
服務器端可以看到連接后的端口狀態變化
因為使用的是http應用,所以瀏覽器能打開是很正常的一個事情,但瀏覽器不一定能打開其他程序的TCP端口,我們看到ssh是失敗的,抓包看一下如果使用ssh,TCP是否建立成功
如上圖所示,當我們使用ssh登錄服務器時,TCP的三次握手是正常建立的,也就是說,檢查TCP端口是否能正常建立連接,用其他應用也可以,不一定要Telnet。 那么為什么還要用Telnet ,可能只是比較方便,就好像我們剛才使用了ssh,其實也是可以看得出來有沒有端口號的返回是有差異的,只不過沒那么直觀。
 
四、為什么是Telnet
    我們使用Telnet的時候,比如啟用的是web應用,Telnet也能進入可編輯端口。我們都知道,Telnet可以遠程登錄遠端設備,默認使用TCP 23端口。 這里就涉及Telnet 的工作原理,Telnet 並不是一個單純的本地應用,登錄使用Telnet 服務時需要在服務器端啟用Telnet 服務器軟件,並監控TCP  23端口。 客戶端使用Telnet 登錄遠程服務器時,先建立TCP 連接,TCP 連接建立成功之后,Telnet 客戶端並沒有檢查所連TCP 是否存在Telnet 服務器應用,而是進入等待輸入的狀態,正常情況下應該輸入用戶名及口令或者命令發送給遠程服務端,服務器Telnet 應用將相應命令執行后返回回顯信息。顯然,我們只需要利用Telnet 建立TCP 連接的特性即可看出TCP 連接是否建立成功。(下圖是Telnet建立連接成功后進入等待輸入的模式,看時間,什么都沒做,就關閉了連接)
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM