Class: Nexpose::AssetGroup

Inherits:
AssetGroupSummary show all
Defined in:
lib/nexpose/group.rb

Overview

Asset group configuration object containing Device details.

Instance Attribute Summary collapse

Attributes inherited from AssetGroupSummary

#risk_score

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from AssetGroupSummary

#delete

Constructor Details

#initialize(name, desc, id = -1,, risk = 0.0) ⇒ AssetGroup

Returns a new instance of AssetGroup.



68
69
70
71
# File 'lib/nexpose/group.rb', line 68

def initialize(name, desc, id = -1, risk = 0.0)
  @name, @description, @id, @risk_score = name, desc, id, risk
  @devices = []
end

Instance Attribute Details

#descriptionObject

Returns the value of attribute description.



63
64
65
# File 'lib/nexpose/group.rb', line 63

def description
  @description
end

#devicesObject

Array of devices associated with this asset group.



66
67
68
# File 'lib/nexpose/group.rb', line 66

def devices
  @devices
end

#idObject

Returns the value of attribute id.



63
64
65
# File 'lib/nexpose/group.rb', line 63

def id
  @id
end

#nameObject

Returns the value of attribute name.



63
64
65
# File 'lib/nexpose/group.rb', line 63

def name
  @name
end

Class Method Details

.load(connection, id) ⇒ AssetGroup

Load an existing configuration from a Nexpose instance.

Parameters:

  • connection (Connection)

    Connection to console where asset group is configured.

  • id (Fixnum)

    Asset group ID of an existing group.

Returns:

  • (AssetGroup)

    Asset group configuration loaded from a Nexpose console.



123
124
125
126
127
# File 'lib/nexpose/group.rb', line 123

def self.load(connection, id)
  r = APIRequest.execute(connection.url,
                         %Q(<AssetGroupConfigRequest session-id="#{connection.session_id}" group-id="#{id}"/>))
  parse(r.res)
end

.parse(xml) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/nexpose/group.rb', line 131

def self.parse(xml)
  puts xml
  return nil unless xml

  group = REXML::XPath.first(xml, 'AssetGroupConfigResponse/AssetGroup')
  asset_group = new(group.attributes['name'].to_s,
                    group.attributes['description'].to_s,
                    group.attributes['id'].to_i,
                    group.attributes['riskscore'].to_f)
  group.elements.each('Devices/device') do |dev|
    asset_group.devices << Device.new(dev.attributes['id'].to_i,
                                      dev.attributes['address'].to_s,
                                      dev.attributes['site-id'].to_i,
                                      dev.attributes['riskfactor'].to_f,
                                      dev.attributes['riskscore'].to_f)
  end
  asset_group
end

Instance Method Details

#rescan_assets(connection) ⇒ Array[Hash[Fixnum, Fixnum]]

Launch ad hoc scans against each group of assets per site.

Parameters:

  • connection (Connection)

    Connection to console where asset group is configured.

Returns:

  • (Array[Hash[Fixnum, Fixnum]])

    Array of scan ID and engine ID pairs for each scan launched.



107
108
109
110
111
112
113
114
115
# File 'lib/nexpose/group.rb', line 107

def rescan_assets(connection)
  sites_ids = @devices.collect { |d| d.site_id }.uniq
  scans = []
  sites_ids.each do |id|
    dev_ids = @devices.select { |d| d.site_id == id }.map { |d| d.id }
    scans << connection.site_device_scan_start(id, dev_ids).merge(:site_id => id)
  end
  scans
end

#save(connection) ⇒ Object



73
74
75
76
77
78
79
80
81
# File 'lib/nexpose/group.rb', line 73

def save(connection)
  xml = %Q(<AssetGroupSaveRequest session-id='#{connection.session_id}'>)
  xml << to_xml
  xml << '</AssetGroupSaveRequest>'
  response = connection.execute(xml)
  if response.success
    @id = response.attributes['group-id'] if @id < 0
  end
end

#to_xmlString

Get an XML representation of the group that is valid for a save request. Note that only name, description, and device ID information is accepted by a save request.

Returns:

  • (String)

    XML representation of the asset group.



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/nexpose/group.rb', line 89

def to_xml
  xml = %Q(<AssetGroup id="#{@id}" name="#{@name}")
  xml << %Q( description="#{@description}") if @description
  xml << '>'
  xml << '<Devices>'
  @devices.each do |device|
    xml << %Q(<device id="#{device.id}"/>)
  end
  xml << '</Devices>'
  xml << '</AssetGroup>'
end