je besoin d'un moyen rapide de savoir si un port donné est ouvert avec Ruby. Je suis actuellement bidouiller avec ceci:Ruby - Voir si un port est ouvert
require 'socket'
def is_port_open?(ip, port)
begin
TCPSocket.new(ip, port)
rescue Errno::ECONNREFUSED
return false
end
return true
end
Il fonctionne très bien si le port est ouvert, mais l'inconvénient est que, parfois, il va juste rester assis et attendre pendant 10-20 secondes, puis chronométrer finalement sortir, jeter une exception ETIMEOUT
(si le port est fermé). Ma question est donc:
ce code peut être modifié qu'à attendre une seconde (et retour false
si nous ne recevons rien de nouveau d'ici là) ou est-il une meilleure façon de vérifier si un port donné est ouvert sur un hôte donné ? L'appel du code bash est également acceptable tant qu'il fonctionne sur plusieurs plates-formes (par exemple, Mac OS X, * nix et Cygwin), bien que je préfère le code Ruby.
fonctionne comme un charme! Merci! –
J'ai eu quelques problèmes avec ce blocage (je pense). Fondamentalement, le délai d'expiration ne serait pas réellement expiré. Je ne sais pas pourquoi, mais la solution netcat a bien fonctionné à sa place. –
Cette réponse a une solution qui fonctionne également sur les fenêtres: http://stackoverflow.com/a/3473208/362951 – mit