Class: Inspec::Resources::FreeBsdPorts
Overview
extracts information from sockstat
Instance Attribute Summary
Attributes inherited from PortsInfo
#inspec
Instance Method Summary
collapse
Methods inherited from PortsInfo
#initialize
Instance Method Details
#info ⇒ Object
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
|
# File 'lib/inspec/resources/port.rb', line 636
def info
cmd = inspec.command("sockstat -46l")
return nil if cmd.exit_status.to_i != 0
ports = []
cmd.stdout.each_line do |line|
port_info = parse_sockstat_line(line)
next unless %w{tcp tcp6 udp udp6}.include?(port_info["protocol"])
ports.push(port_info)
end
ports
end
|
#parse_net_address(net_addr, protocol) ⇒ Object
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
|
# File 'lib/inspec/resources/port.rb', line 653
def parse_net_address(net_addr, protocol)
case protocol
when "tcp4", "udp4", "tcp", "udp"
net_addr = net_addr.gsub(/^\*:/, "0.0.0.0:") if net_addr =~ /^*:(\d+)$/
ip_addr = URI("addr://" + net_addr)
host = ip_addr.host
port = ip_addr.port
when "tcp6", "udp6"
return [] if net_addr == "*:*"
net_addr = net_addr.gsub(/^\*:/, "0:0:0:0:0:0:0:0:") if net_addr =~ /^*:(\d+)$/
ip6 = /^(\S+):(\d+)$/.match(net_addr)
ip6addr = ip6[1]
ip_addr = URI("addr://[#{ip6addr}]:#{ip6[2]}")
host = ip_addr.host[1..ip_addr.host.size - 2]
port = ip_addr.port
end
[host, port]
rescue URI::InvalidURIError => e
warn "Could not parse #{net_addr}, #{e}"
nil
end
|
#parse_sockstat_line(line) ⇒ Object
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
|
# File 'lib/inspec/resources/port.rb', line 680
def parse_sockstat_line(line)
parsed = /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/.match(line)
return {} if parsed.nil?
protocol = parsed[5].downcase
host, port = parse_net_address(parsed[6], protocol)
return {} if host.nil? || port.nil?
process = parsed[2]
pid = parsed[3]
pid = pid.to_i if pid =~ /^\d+$/
protocol = "tcp" if protocol.eql?("tcp4")
protocol = "udp" if protocol.eql?("udp4")
{
"port" => port,
"address" => host,
"protocol" => protocol,
"process" => process,
"pid" => pid,
}
end
|