我在本機上開啟了連接埠 4000,如下所示:
nc -lvup 4000
然後嘗試連接到同一端口,如下所示:
nc -vu 127.0.0.1 4000
並能夠成功連接並來回發送和接收文字。但是,當我偵聽第一個片段中所示的相同端口,然後嘗試使用 UDP 掃描時
nmap -sU 127.0.0.1 -p 4000
結果如下:
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000061s latency).
PORT STATE SERVICE
4000/udp closed icq
既然第一次測試確定連接埠顯然是開放的,那麼它不應該說開放嗎?請讓它有意義,因為我真的被這個難住了。
答案1
不,你不明白發生了什麼事。這是UDP,沒有連接。
當您運行第二個nc
並在其中輸入內容時,它只會發送資料包。然後你透過其他方式(請參閱通訊的另一端,例如另一台電腦螢幕)確認通訊發生。如果沒有「監聽」nc
,「發送」NC 會很樂意發送相同的資料包,而不知道這些資料包是否被接收或丟棄。
也是如此nmap
。它發送資料包,沒有看到任何答案,並決定其資料包剛剛消失在黑洞中。
這就是UDP,就是這樣的。它沒有內在的接收確認。如果應用程式需要它,它會自行進行確認。由於我們沒有應用程式級協定來執行此操作,因此 nmap 沒有看到任何答案,也沒有偵測到「開放埠」。
相比之下,TCP 內建了確認 (ACK),這就是為什麼我們可以可靠地偵測連接埠是否開啟。