Tôi cần một cách nhanh chóng để tìm hiểu xem một cổng đã cho có được mở bằng Ruby hay không. Tôi hiện đang quan trọng xung quanh với điều này:Ruby - Kiểm tra xem cổng có đang mở
require 'socket'
def is_port_open?(ip, port)
begin
TCPSocket.new(ip, port)
rescue Errno::ECONNREFUSED
return false
end
return true
end
Nó hoạt động tuyệt vời nếu các cổng đang mở, nhưng nhược điểm của việc này là thỉnh thoảng nó sẽ chỉ ngồi và chờ 10-20 giây và sau đó cuối cùng thời gian ra, ném một ngoại lệ ETIMEOUT
(nếu cổng bị đóng). Do đó, câu hỏi của tôi là:
Mã này có thể được sửa đổi để chỉ chờ một giây (và trả lại false
nếu chúng tôi không nhận được gì lúc đó) hay không? ?
Chỉnh sửa: Mã bash gọi có thể chấp nhận được miễn là nó hoạt động trên nhiều nền tảng (ví dụ: Mac OS X, * nix và Cygwin), mặc dù tôi thích mã Ruby hơn.
trình như một say mê! Cảm ơn! –
Tôi gặp sự cố với việc chặn này (tôi nghĩ). Về cơ bản, thời gian chờ sẽ không thực sự hết thời gian. Không chắc chắn tại sao, nhưng giải pháp netcat hoạt động tốt ở vị trí của nó. –
Câu trả lời này có một giải pháp cũng hoạt động trên các cửa sổ: http://stackoverflow.com/a/3473208/362951 – mit