UDP 포트가 열려 있는지 netcat은 어떻게 알 수 있습니까?


49

따라서이 netcat 명령을 사용하여 UDP 포트가 열려 있는지 확인할 수 있습니다.

$  nc -vz -u 10.1.0.100 53
Connection to 10.1.0.100 53 port [udp/domain] succeeded!

TCP와 달리 UDP는 비 연결형입니다 (fire and forget). 그렇다면 누구나 netcat이 UDP 포트가 열려 있음을 어떻게 알 수 있습니까? 답장이나 그와 비슷한 것을 요구합니까?

답변:


17

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 개의 포트를 확인한 후에는 실패합니다.

따라서 다른 제안은 유효 할 수 있지만이 특별한 경우에는 발생하지 않는다고 생각합니다.


그래서 udptest찾고있는 기능이 있으며 내 질문에 대답합니다. 당신이 제공 한 링크에서 "* udptest () * UDP 포트가 있는지 확인하기 위해 몇 가지 쓰기를하십시오"
Patrick McMahon

예, 방금 확인하고 글도 보았습니다. 수정 된 답변.
rocky

@PatrickMcMahon-이것이 귀하의 질문에 대한 답변이라면 큰 체크 표시를 클릭하여 수락하십시오.
cas

17

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

$ 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를 사용하면 정보를 다시 제공하지 않으면 실제로 확인할 수있는 것이 아닙니다.


9

포트, 심지어 UDP 포트가 닫 혔음을 알리는 ICMP 메시지가 있습니다. 따라서 호스트가이 메시지를 보내면 포트가 닫혀 있다고 가정 할 수 있습니다.

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


4
UDP는 비 연결형이므로 열린 포트와 방화벽 포트를 손실 된 패킷과 확실하게 구별 할 수 없습니다.
Mark

매우 사실입니다. 그리고 이론적으로 패킷을 얻었을 때 포트가 실제로 닫히지 않았을 수도 있습니다.
phk

9

글쎄, 나는 다른 의견을 가지고있다 :

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를 사용하여 계속 확인할 수 있습니다.


1
아 그래 좋아. 두 노드 모두에 액세스 할 수 있는지 테스트하는 좋은 방법입니다. 질문을 할 때 "블랙 박스를 테스트하는 방법"을 향해 나가거나 외부 노드를 조사하는 것 같아요. 그렇게 한 결과, netcat은 보장 할 수 없습니다.
Patrick McMahon

IP 주소를 확장 해 주 10.12.0.12시겠습니까? 왜 두 컴퓨터에서 사용됩니까?
Sopalajo de Arrierez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.