따라서 이 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