¿Cómo se puede verificar si un puerto UDP está abierto a otro servidor?

Realmente no puedes, porque UDP es un protocolo sin conexión. Eso significa (entre otras cosas) que, a diferencia de TCP, cuando su computadora envía un mensaje UDP a otra computadora, no se espera que el receptor le envíe un acuse de recibo. De hecho, incluso no hay forma de que el receptor haga eso; Es un protocolo muy simple. Cuando envía un mensaje UDP, el destino lo recibió y lo procesó, o no lo hizo. No tiene forma de saberlo y no existe un mecanismo de recuperación.

Teóricamente, si un puerto UDP está formalmente “cerrado” (por ejemplo, con una regla de rechazo de iptables), el host de destino puede responder con un paquete ICMP “Puerto inalcanzable” para informar al remitente. Pero no hay garantía de que lo haga, también puede soltar el mensaje en silencio.

De nuevo, esto es muy diferente de TCP. Si envía una solicitud de conexión TCP (un paquete SYN) a un puerto TCP en un servidor, pueden suceder tres cosas:

  • El servidor responde con un paquete SYN, ACK. Significa que se acepta la conexión y que el puerto está abierto.
  • El servidor responde con un paquete RST. Significa que la conexión se rechaza y el puerto está cerrado.
  • El servidor no responde. Después de un tiempo, puede asumir que el servidor nunca recibió su SYN (y puede intentarlo de nuevo) o simplemente lo ignoró (siguiendo una regla DROP iptables, por ejemplo). Si SYN múltiple no recibe respuesta, puede suponer que el puerto está cerrado y con firewall.

Por lo tanto, siempre puede determinar el estado del puerto. Por el contrario, si envía un mensaje UDP a un puerto en un servidor:

  • O bien el servidor responde con un paquete ICMP “Puerto inalcanzable”: significa que el puerto está “cerrado” y con cortafuegos.
  • O el servidor no responde nada … lo que puede significar cualquier cosa, desde que el paquete ha sido recibido y procesado hasta que ningún servicio está escuchando en ese puerto del puerto que está siendo cortafuegos, pero de manera diferente (con un DROP y no una regla de RECHAZO).

Por lo tanto, generalmente no puede saber qué sucedió solo con la información proporcionada por el protocolo UDP.

Si desea probar y enviar datos a través de un puerto en particular (por ejemplo, para probar firewalls entre dos máquinas) y tener acceso a ambos extremos, puede usar “netcat” (nc) en Linux, por ejemplo
a: nc -u -l 9123 – escuche en el puerto UDP 9123
b: nc -ua 9123 – enviar al puerto UDP 9123 en la máquina “a”
luego escriba algo y debería aparecer en la pantalla de la otra máquina.
Si el puerto está cerrado por una regla de firewall, no funcionará y es posible que recupere un paquete ICMP.
La herramienta de escaneo nmap buscará puertos UDP con las opciones correctas, pero como dice Alex Coninx, los resultados son menos confiables que para TCP.

El servidor UDP no tiene conexión. Entonces, si un servidor desea que UDP envíe datos a otro servidor, verifica si el servidor UDP está disponible o no. Comprueba así:

  1. Datos enviados al servidor remoto.
  2. Espere la respuesta del servidor remoto.
  3. Respuesta recibida, entonces está disponible; de ​​lo contrario, no está disponible.

En Windows en el símbolo del sistema, use el comando netstat en Linux en el símbolo del sistema, use el comando lsof -i