class Inspec::Resources::WindowsInterface
Public Instance Methods
interface_info(iface)
click to toggle source
# File lib/inspec/resources/interface.rb, line 212 def interface_info(iface) # gather all network interfaces cmd = inspec.command("Get-NetAdapter | Select-Object -Property Name, InterfaceDescription, Status, State, " \ "MacAddress, LinkSpeed, ReceiveLinkSpeed, TransmitLinkSpeed, Virtual | ConvertTo-Json") addr_cmd = inspec.command("Get-NetIPAddress | Select-Object -Property IPv6Address, IPv4Address, InterfaceAlias," \ " PrefixLength | ConvertTo-Json") # filter network interface begin net_adapter = JSON.parse(cmd.stdout) addresses = JSON.parse(addr_cmd.stdout) rescue JSON::ParserError => _e return nil end # ensure we have an array of groups net_adapter = [net_adapter] unless net_adapter.is_a?(Array) addresses = [addresses] unless addresses.is_a?(Array) # select the requested interface adapters = net_adapter.each_with_object([]) do |adapter, adapter_collection| # map object info = { name: adapter["Name"], up: adapter["State"] == 2, speed: adapter["ReceiveLinkSpeed"] / 1000, ipv4_addresses: addresses_for_proto(addresses, adapter["Name"], "IPv4"), ipv6_addresses: addresses_for_proto(addresses, adapter["Name"], "IPv6"), } adapter_collection.push(info) if info[:name].casecmp(iface) == 0 end return nil if adapters.empty? warn "[Possible Error] detected multiple network interfaces with the name #{iface}" if adapters.size > 1 adapters[0] end
Private Instance Methods
addresses_for_proto(all_addresses, iface, proto)
click to toggle source
# File lib/inspec/resources/interface.rb, line 253 def addresses_for_proto(all_addresses, iface, proto) all_addresses.select { |i| i["InterfaceAlias"] == iface } .map { |i| "#{i["#{proto}Address"]}/#{i["PrefixLength"]}" unless i["#{proto}Address"].nil? } .compact end