netcat은 UDP 포트가 열려 있는지 어떻게 알 수 있나요?

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 포트가 열려 있는지 어떻게 아는지 아는 사람이 있습니까? 답장을 요구하는 걸까요?

답변1

실제로는 그렇지 않습니다. 다음을 수행하여 확인할 수 있습니다.

$ 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를 사용하면 정보를 다시 제공하지 않으면 실제로 확인할 수 없습니다.

답변2

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 : "*");

UDP 테스트오픈 소켓에 쓸 때 문제가 3번 정도 발생합니다. 이는 IPv6에서는 작동하지 않으며 약 100개의 포트를 확인한 후에는 실패합니다.

따라서 다른 제안은 타당할 수 있지만 이 특별한 경우에는 그런 일이 발생하지 않을 것이라고 생각합니다.

답변3

글쎄요, 저는 다른 의견을 가지고 있습니다:

a:~# nc -luk 10.12.0.12 667 // listen on UDP port 667
b:~# nc -uv 10.12.0.12 667  // check if port is open 
nc: 10.12.0.12 (10.12.0.12) 667 [667] open
I love stackexchange // send a message
a:~# nc -luk 10.12.0.12 667
I love stackexchange // receive the message.

이를 바탕으로 해당 UDP 포트에서 a와 b 사이의 연결이 가능한지 확인할 수 있습니다. 나중에 tcpdump를 사용하여 계속 확인할 수 있습니다.

답변4

포트(UDP 포트 포함)가 닫혔음을 나타내는 ICMP 메시지가 있습니다. 따라서 호스트가 이 메시지를 보낸다면 포트가 닫혀 있다고 가정할 수 있습니다.

https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Destination_unreachable

관련 정보