Linux

測試 UDP 埠連接性

  • February 28, 2022

我正在嘗試測試我是否可以通過 UDP 訪問遠端伺服器(我都可以訪問)上的特定埠。

兩台伺服器都面向網際網路。我正在使用 netcat 來監聽某個埠。

然後我使用 nmap 檢查該埠以查看它是否打開,但似乎沒有打開。

iptables 已關閉。

任何建議為什麼會這樣?我最終會設置一個 VPN 隧道,但因為我對隧道很陌生,所以我想在推進之前確保我在 UDP 1194 埠上有連接。

沒有“開放”的 UDP 埠之類的東西,至少在大多數人習慣認為的意義上不是這樣的(它的回答是“好的,我已經接受了你的連接”)。UDP 是無會話的,因此“埠”(閱讀:作業系統 IP 堆棧中的 UDP 協議)永遠不會自行響應“成功”。

UDP 埠只有兩種狀態:監聽或不監聽。這通常翻譯為“程序在其上打開套接字”或“沒有任何套接字打開”。後一種情況應該很容易檢測到,因為系統應該使用程式碼=3(埠不可達)的ICMP 目標不可達數據包進行響應。不幸的是,許多防火牆可能會丟棄這些數據包,因此如果您沒有得到任何返回,您將無法確定埠是否處於此狀態。我們不要忘記 ICMP 也是無會話的,並且不進行重傳:Port Unreachable 數據包很可能會在網路上的某個地方失去。

處於“偵聽”狀態的 UDP 埠可能根本不響應(偵聽它的程序只接收數據包並且不傳輸任何內容)或者它可能會發回一些東西(如果程序確實在接收時採取行動並且如果它採取行動通過 UDP 響應原始發送方 IP:埠)。再說一次,如果你沒有得到任何回報,你永遠無法確定狀態是什麼。

您說您可以控制接收主機:這使您能夠建構自己的協議來檢查 UDP 埠可訪問性:只需在接收主機上放置一個程序,該程序將偵聽給定的 UDP 埠做出響應(或發送給您一封電子郵件,或者只是嚇壞了unlink()主機文件系統上的所有內容……任何會引起你注意的事情都會做)。

引用自:https://serverfault.com/questions/416205