¿Cómo verificar que un puerto UDP está abierto? [cerrado]

13

Tengo aquí un dilema. Tengo un dispositivo que se comunica con otro dispositivo remoto, pero hay un firewall entre ellos. Es una conexión UDP, por lo que las utilidades TCP no funcionan para probar si el puerto específico está abierto. Sé que podríamos obtener eso del firewall, pero no tengo acceso, así que tengo que demostrar que el puerto no está abierto.

El sistema de origen es un sistema Windows 7 y el sistema de destino es un dispositivo que ejecuta Linux.

JoeliNNaBit
fuente
1
Sin acceso al firewall, realmente no se puede saber (a menos, por supuesto, que sus sistemas estén funcionando).
Ron Trunk
Las preguntas que involucran redes sobre las cuales no tiene control están explícitamente fuera de tema aquí.
Ron Maupin
2
Yo votaría para dejarlo abierto. Creo que esto cae en el área gris, y es una pregunta útil de teoría / solución de problemas.
Ron Trunk
1
... ¿tienes control del firewall y las redes? Si no, entonces esto está fuera de tema aquí.
Craig Constantine
Esto es ahora un entorno de laboratorio, estamos tratando de simular una situación de producción futura. Me gustaría obtener una manera de solucionar problemas de sesiones UDP sin tener que analizar registros en el lado del servidor. Pero gracias, creo que eso no es posible por la naturaleza del tipo de comunicación.
JoeliNNaBit

Respuestas:

10

UDP es obviamente un protocolo de enviar y olvidar. Por ejemplo, durante un escaneo UDP NMap, la única forma de probar definitivamente que un puerto UDP está abierto es si recibe una respuesta de ese puerto. Tenga en cuenta que muchos servicios pueden no responder a datos arbitrarios y requieren protocolos o solicitudes específicas de la aplicación para garantizar una respuesta. Sin embargo, ciertos códigos ICMP pueden garantizar que el puerto esté cerrado. RFC 792 y RFC 1122 nos dan buena información sobre qué esperar cuando un puerto está cerrado.

Por ejemplo, un ICMP tipo 3 código 3 "Puerto de destino inalcanzable" es, a todos los efectos, casi garantizado como un puerto cerrado.

Puede encontrar una lista completa de códigos aquí:

http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml

Golosinas
fuente
1
Gracias por la respuesta. Investigaré más sobre las solicitudes ICMP tipo 3.
JoeliNNaBit
7

Esta es una receta rápida:

1) Inicie un sniffer de paquetes:

sudo tcpdump -n -i eth2 icmp &
[1] 1409
$ tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes

2) Enviar un paquete UDP:

$ echo reply-me | nc -u 1.0.0.2 1000

3) Si recibe 'Puerto ICMP inalcanzable', ese puerto UDP está cerrado:

20:54:15.475211 IP 1.0.0.2 > 1.0.0.1: ICMP 1.0.0.2 udp port 1000 unreachable, length 45

4) De lo contrario, generalmente el puerto está abierto o algo está bloqueando ICMP.

Everton
fuente
1
Como el sistema fuente es Windows 7, los comandos de Linux no funcionarán.
Ron Maupin
1
Sí, eso es cierto, pero intentaré con una máquina virtual y comprobaré si funciona.
JoeliNNaBit
4

"nc -uvz ip port"no es de alguna manera precisa, probablemente debería usar "nmap -sU -p port ip", si el resultado muestra "abierto", entonces el puerto udp probablemente esté abierto, si muestra "abierto | filtrado", entonces probablemente esté cerrado o filtrado.

Jailman Tough
fuente