Module: SolarisNetstatParser
- Included in:
- Inspec::Resources::SolarisPorts
- Defined in:
- lib/utils/parser.rb
Instance Method Summary collapse
-
#parse_netstat(content) ⇒ Object
takes this as a input and parses the values UDP: IPv4 Local Address Remote Address State ——————– ——————– ———- . Unbound.
Instance Method Details
#parse_netstat(content) ⇒ Object
takes this as a input and parses the values UDP: IPv4
Local Address Remote Address State
——————– ——————– ———-
*.* Unbound
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/utils/parser.rb', line 117 def parse_netstat(content) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize return [] if content.nil? || content.empty? protocol = nil column_widths = nil ports = [] cache_name_line = nil content.each_line { |line| # find header, its delimiter if line =~ /TCP:|UDP:|SCTP:/ # get protocol protocol = line.split(':')[0].chomp.strip.downcase # determine version tcp, tcp6, udp, udp6 proto_version = line.split(':')[1].chomp.strip protocol += '6' if proto_version == 'IPv6' # reset names cache column_widths = nil cache_name_line = nil names = nil # calulate width of a column based on the horizontal line elsif line =~ /^[- ]+$/ column_widths = columns(line) # parse header values from line elsif column_widths.nil? && !line.nil? # we do not know the width at this point of time, therefore we need to cache cache_name_line = line # content line elsif !column_widths.nil? && !line.nil? && !line.chomp.empty? # default row port = split_columns(column_widths, line).to_a.map { |v| v.chomp.strip } # parse the header names # TODO: names should be optional names = split_columns(column_widths, cache_name_line).to_a.map { |v| v.chomp.strip.downcase.tr(' ', '-').gsub(/[^\w-]/, '_') } info = { 'protocol' => protocol.downcase, } # generate hash for each line and use the names as keys names.each_index { |i| info[names[i]] = port[i] if i != 0 } ports.push(info) end } ports end |