No existe un puerto UDP "abierto", al menos no en el sentido en que la mayoría de la gente está acostumbrada a pensar (que responde algo como "OK, he aceptado tu conexión"). UDP no requiere sesión, por lo que "un puerto" (léase: el protocolo UDP en la pila de IP del sistema operativo) nunca responderá "éxito" por sí solo.
Los puertos UDP solo tienen dos estados: escuchar o no. Eso generalmente se traduce en "tener un socket abierto por un proceso" o "no tener ningún socket abierto". El último caso debería ser fácil de detectar ya que el sistema debería responder con un paquete ICMP de destino inalcanzable con código = 3 (puerto inalcanzable). Desafortunadamente, muchos servidores de seguridad podrían eliminar esos paquetes, por lo que si no recupera nada, no está seguro si el puerto está en este estado o no. Y no olvidemos que ICMP tampoco requiere sesión y no realiza retransmisiones: el paquete Port Unreachable podría perderse en algún lugar de la red.
Es posible que un puerto UDP en estado de "escucha" no responda (el proceso que escucha solo recibe el paquete y no transmite nada) o podría enviar algo de regreso (si el proceso actúa en la recepción y si actúa por respondiendo vía UDP a la IP del remitente original: puerto). De nuevo, nunca se sabe con seguridad cuál es el estado si no se recupera nada.
Dice que puede tener control del host receptor: eso le permite construir su propio protocolo para verificar la accesibilidad del puerto UDP: simplemente coloque un proceso en el host receptor que escuche en el puerto UDP dado y responda (o le envíe un correo electrónico, o simplemente enloquecer y unlink()
todo en el sistema de archivos host ... cualquier cosa que llame su atención servirá).