Top Level Namespace

Defined Under Namespace

Classes: CommandLine, Extensions, Log, Policy, Resource, ResultViewer, Rule, Runner

Instance Method Summary collapse

Instance Method Details

#combine_port_states(states) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# 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) ⇒ Object



34
35
36
37
38
39
40
# 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) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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) ⇒ Boolean

Returns:

  • (Boolean)


4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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