class Object
Public Instance Methods
combine_port_states(states)
click to toggle source
# File lib/extensions/port.rb, line 58 def combine_port_states(states) states.reduce({}) do |old_state, state| old_state[:open] ||= state[:open] old_state[:ssl] ||= state[:ssl] old_state[:open] &&= state[:open] old_state[:ssl] &&= state[:open] old_state end end
connect_to_port(port)
click to toggle source
# File lib/extensions/port.rb, line 34 def connect_to_port(port) begin TCPSocket.new('0.0.0.0', port) rescue StandardError # Errno::ECONNREFUSED mainly but covering for timeouts nil end end
get_port_state(port)
click to toggle source
# File lib/extensions/port.rb, line 42 def get_port_state(port) state = { :open => false, :ssl => "unknown" } tcp_socket = connect_to_port(port) return state unless tcp_socket # couldn't connect, can't figure anything out state[:open] = true state[:ssl] = is_ssl_enabled?(tcp_socket) tcp_socket.close state end
is_ssl_enabled?(tcp_socket)
click to toggle source
# File lib/extensions/port.rb, line 4 def is_ssl_enabled?(tcp_socket) ctx = OpenSSL::SSL::SSLContext.new ctx.set_params({ :options=>OpenSSL::SSL::OP_ALL }) ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE enabled = true OpenSSL::SSL::SSLSocket.new(tcp_socket, ctx).tap do |socket| begin socket.sync_close = true socket.connect_nonblock rescue IO::WaitReadable if IO.select([socket], nil, nil, 1) retry else enabled = false end rescue IO::WaitWritable if IO.select([socket], nil, nil, 1) retry else enabled = false end rescue OpenSSL::SSL::SSLError enabled = false end return enabled end end