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 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
state[:open] = true
state[:ssl] = is_ssl_enabled?(tcp_socket)
tcp_socket.close
state
end
|
#is_ssl_enabled?(tcp_socket) ⇒ 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
|