Netcat

netcat 如何知道 UDP 埠是否打開?

  • June 7, 2018

所以我可以使用這個 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,除非它會給您返回資訊,否則您無法真正檢查它。

引用自:https://unix.stackexchange.com/questions/235830