मुझे यह पता लगाने का एक त्वरित तरीका है कि रूबी के साथ कोई दिया गया पोर्ट खुला है या नहीं। मैं वर्तमान में इस के साथ लगभग नगण्य रहा हूँ:रूबी - देखें कि कोई पोर्ट खुला है
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
वापस लौटाएं यदि हमें तब तक कुछ भी नहीं मिलता है) या यह जांचने का एक बेहतर तरीका है कि किसी दिए गए होस्ट पर दिया गया पोर्ट खुला है या नहीं ?
संपादित करें: कॉलिंग बैश कोड है, जब तक यह काम करता है पार मंच (जैसे, मैक ओएस एक्स, * nix, और cygwin) के रूप में भी स्वीकार्य है, हालांकि मैं रूबी कोड पसंद करते हैं।
वर्क्स एक आकर्षण की तरह! धन्यवाद! –
मुझे इस अवरोध (मुझे लगता है) के साथ कुछ परेशानी थी। असल में टाइमआउट वास्तव में समय समाप्त नहीं होगा। यकीन नहीं क्यों, लेकिन नेटकैट समाधान ने अपनी जगह पर अच्छी तरह से काम किया। –
इस उत्तर में एक समाधान है जो विंडोज़ पर भी काम करता है: http://stackoverflow.com/a/3473208/362951 – mit