Port
為什麼 netcat 掃描 UDP 埠總是成功?
我正在嘗試驗證我們的一些伺服器是否可以在將我們的一些服務遷移到它們之前通過某些埠進行通信,並且它們沒有被我們組織的防火牆 ACL 阻止。
說得通
[mrduki@mybox1~]$ nc -ul 40000 --- [mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000 Connection to mybox1.com 40000 port [udp/*] succeeded!
沒有意義
[mrduki@mybox1~]$ nc -ul 40000 [mrduki@mybox1~]$ ^C --- [mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000 Connection to mybox1.com 40000 port [udp/*] succeeded!
事實上,如果我從 進行埠掃描
40000-40100
,每個埠都會成功。如果我在沒有的情況下進行相同的測試
-u
(以便它測試 TCP 而不是 UDP),我會得到40000 (tcp) timed out: Operation now in progress
錯誤,正如我所期望的那樣(因為我沒有監聽這樣的 TCP 服務40000
)。做一個雖然顯示沒有這樣的服務在這些埠上監聽
sudo netstat -alnp | grep LISTEN
。mybox1
那麼我錯過了什麼?
nc
可能不是測試埠狀態的最佳工具。你試過nmap
嗎?它實際上是一個埠掃描器。我檢查了我的家庭網路和 127.0.0.1 上的文件伺服器,兩者都報告UDP port 40000
已關閉。地圖
# nmap -sU -p 40000 igor Starting Nmap 7.01 ( https://nmap.org ) at 2016-08-18 18:27 EDT Nmap scan report for igor (192.168.1.125) Host is up (0.00027s latency). rDNS record for 192.168.1.125: igor.swass PORT STATE SERVICE 40000/udp closed unknown MAC Address: 68:05:CA:3A:BF:B7 (Intel Corporate) Nmap done: 1 IP address (1 host up) scanned in 0.53 seconds
核心 + /dev
您也可以像這樣使用核心來執行此操作。但
nmap
可能更好。# timeout 3 cat < /dev/udp/example.com/40000
當我
nc
在同一台伺服器(igor)上嘗試時,我得到了和你一樣的結果。但是我回去再試一次,現在它沒有返回任何輸出(沒有成功的消息),wireshark 顯示“目標無法訪問”正在通過 ICMP 發回。我不明白這些。但我會切換到另一種檢查 UDP 埠狀態的方法。