Netcat
netcat 如何知道 UDP 埠是否打開?
所以我可以使用這個 netcat 命令來檢查一個 UDP 埠是否打開:
$ nc -vz -u 10.1.0.100 53 Connection to 10.1.0.100 53 port [udp/domain] succeeded!
與 TCP 不同,UDP 是無連接的(即發即棄)。那麼在高層次上,有人知道netcat如何知道UDP埠是打開的嗎?它是否要求回复或類似的東西?
Connection to Connection to 10.1.0.100 53 port [udp/domain] succeeded!
從您使用 openbsd-netcat的具體輸出來看。查看測試的程式碼是綁定到 UDP 套接字,即有一個打開的連接:
if (vflag || zflag) { /* For UDP, make sure we are connected. */ if (uflag) { if (udptest(s) == -1) { ret = 1; continue; } } /* Don't look up port if -n. */ if (nflag) sv = NULL; else { sv = getservbyport( ntohs(atoi(portlist[i])), uflag ? "udp" : "tcp"); } fprintf(stderr, "Connection to %s %s port [%s/%s] " "succeeded!\n", host, portlist[i], uflag ? "udp" : "tcp", sv ? sv->s_name : "*");
udptest向打開的套接字發出大約 3 次寫入。請注意,這不適用於 IPv6,並且在檢查了大約 100 個埠後會失敗。
因此,雖然其他建議可能是有效的,但我認為在這種特殊情況下不會發生這種情況。
事實上,它沒有。您可以通過以下方式進行檢查:
$ nc -vz -u 8.8.8.8 53 Connection to 8.8.8.8 53 port [udp/domain] succeeded! $ nc -vz -u 8.8.8.8 54 Connection to 8.8.8.8 54 port [udp/*] succeeded! $ nc -vz -u 8.8.8.8 59 Connection to 8.8.8.8 59 port [udp/*] succeeded! $
因此,對於 UDP,除非它會給您返回資訊,否則您無法真正檢查它。