Necesito una forma rápida de averiguar si un puerto determinado está abierto con Ruby. Actualmente estoy perder el tiempo con esto:Ruby: compruebe si hay un puerto abierto
require 'socket'
def is_port_open?(ip, port)
begin
TCPSocket.new(ip, port)
rescue Errno::ECONNREFUSED
return false
end
return true
end
Funciona muy bien si el puerto está abierto, pero la desventaja de esto es que en ocasiones se acaba de sentarse y esperar durante 10-20 segundos y luego con el tiempo el tiempo de espera, lanzando una excepción ETIMEOUT
(si el puerto está cerrado). Mi pregunta es así:
¿Se puede modificar este código para que solo espere un segundo (y devuelva false
si no recibimos nada para entonces) o existe una mejor manera de verificar si un puerto determinado está abierto en un host determinado? ?
Edit: El código de llamada bash también es aceptable siempre que funcione multiplataforma (por ejemplo, Mac OS X, * nix y Cygwin), aunque prefiero el código Ruby.
funciona como un encanto! ¡Gracias! –
Tuve algunos problemas con este bloqueo (creo). Básicamente, el tiempo de espera no excedería el tiempo de espera. No estoy seguro por qué, pero la solución de netcat funcionó bien en su lugar. –
Esta respuesta tiene una solución que también funciona en Windows: http://stackoverflow.com/a/3473208/362951 – mit