Estoy tratando de probar si puedo llegar a un puerto en particular en un servidor remoto (a los cuales tengo acceso) a través de UDP.
Ambos servidores tienen conexión a internet. Estoy usando netcat para tener un cierto puerto de escucha.
Luego uso nmap para verificar si ese puerto está abierto, pero no parece estarlo.
Iptables está desactivado.
¿Alguna sugerencia de por qué esto podría ser? Eventualmente voy a configurar un túnel VPN, pero debido a que soy muy nuevo en túneles, quiero asegurarme de tener conectividad en el puerto UDP 1194 antes de avanzar.
centos
udp
networking
Bloquear
fuente
fuente
Respuestas:
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á).fuente
Para probar si el puerto udp responde, use
netcat
.Un ejemplo de la página del manual :
Por supuesto, si se está ejecutando un firewall
DROP
, que normalmente es el caso cuando se trata de puertas de enlace con conexión a Internet, no recibirá una respuesta ICMP.fuente
yum install nc
(para centos)nc -ul 6111
nc -u <server> 6111
Nota: Cuando ejecuta el
nc -ul
comando en el servidor, solo se conectará para la primera conexión que llegue a él. No puedo, como descubrí, cambiar entre servidores haciendo ping sin parar y reiniciarnc -ul
. De hecho, si ^ C detiene el cliente (nc -u ...
), tampoco puede reiniciar el cliente sin primero reiniciar el servidor de escucha.fuente
Probar los puertos UDP abiertos con nmap está lleno de peligros: no hay un apretón de manos de tres vías para indicar apertura. A menos que el proceso de escucha responda a lo que nmap envíe, no hay forma de que nmap diferencie entre un puerto abierto que no responde y un puerto filtrado.
Mucho más fácil es escuchar en un extremo con netcat y usar netcat en el otro extremo para enviar paquetes, y ver que llegan al otro extremo. Hazlo en ambos sentidos, solo asegúrate. También puede
tcpdump
ver los paquetes llegando a donde deben ir.fuente
Estaba teniendo un problema similar y encontré una buena solución usando netcat aquí: http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open:_simple_UDP_server_and_client
nc -vzu <host> <port>
Pude confirmar que mi puerto UDP estaba abierto y luego podría proceder a probar mi código real.
fuente
Puede escanear puertos udp utilizando el siguiente comando
fuente
Puede hacer esto con
netcat
(nc) oiperf
, suponiendo que tenga otra máquina para probar fuera de la red. Mi elección sería unnmap
escaneo UDP desde un sistema fuera de su entorno. ¿Cuál fue su línea de comando nmap? ¿Hay algún firewall de hardware u otros dispositivos en la mezcla?fuente
Tengo un enfoque simple. Si el servidor UDP no devuelve los datos esperados, simplemente dejo de recopilar dgrams, suponiendo que se haya apagado:
fuente