class Nikto::Scan

This class represents the <scandetails> element in the Nikto XML document.

It provides a convenient way to access the information scattered all over the XML in attributes and nested tags.

Instead of providing separate methods for each supported property we rely on Ruby's method_missing to do most of the work.

Public Class Methods

new(xml_node) click to toggle source

Accepts an XML node from Nokogiri::XML.

# File lib/nikto/scan.rb, line 11
def initialize(xml_node)
  @xml = xml_node
end

Public Instance Methods

method_missing(method, *args) click to toggle source

This method is invoked by Ruby when a method that is not defined in this instance is called.

In our case we inspect the @method@ parameter and try to find the attribute, simple descendent or collection that it maps to in the XML tree.

Calls superclass method
# File lib/nikto/scan.rb, line 38
def method_missing(method, *args)
  # We could remove this check and return nil for any non-recognized tag.
  # The problem would be that it would make tricky to debug problems with
  # typos. For instance: <>.potr would return nil instead of raising an
  # exception
  unless supported_tags.include?(method)
    super
    return
  end
  method_name = method.to_s
  return @xml.attributes[method_name].value if @xml.attributes.key?(method_name)
end
respond_to?(method, include_private=false) click to toggle source

This allows external callers (and specs) to check for implemented properties

Calls superclass method
# File lib/nikto/scan.rb, line 27
def respond_to?(method, include_private=false)
  return true if supported_tags.include?(method.to_sym)
  super
end
supported_tags() click to toggle source

List of supported tags. They can be attributes, simple descendants or collections (e.g. <references/>, <tags/>)

# File lib/nikto/scan.rb, line 17
def supported_tags
  [
    # attributes
    :targetip, :targethostname, :targetport, :targetbanner, :starttime,
    :sitename, :siteip, :hostheader, :errors, :checks, :filename
  ]
end