我需要一個快速的方法來確定給定的端口是否用Ruby打開。我目前正與這擺弄周圍:紅寶石 - 查看端口是否打開
require 'socket'
def is_port_open?(ip, port)
begin
TCPSocket.new(ip, port)
rescue Errno::ECONNREFUSED
return false
end
return true
end
它的偉大工程,如果該端口是開放的,但這樣做的缺點是,偶爾會眼睜睜地等待10-20秒,然後最終超時,扔一個ETIMEOUT
異常(如果端口關閉)。我的問題是這樣的:
是否可以修改此代碼以僅等待一秒(如果到那時我們還沒有收到任何回覆,則返回false
)還是有更好的方法來檢查給定端口是否在給定主機上打開?
編輯:儘管我更喜歡Ruby代碼,但只要它可以跨平臺工作(例如,Mac OS X,* nix和Cygwin),調用bash代碼也是可以接受的。
就像一個魅力!謝謝! – 2009-02-05 20:36:47
我遇到了阻塞問題(我認爲)。基本上超時不會超時。不知道爲什麼,但netcat解決方案在其位置上運行良好。 – 2011-10-27 16:26:52
此答案有一個也適用於Windows的解決方案:http://stackoverflow.com/a/3473208/362951 – mit 2012-07-08 20:22:25