class Nmap::XML
Attributes
Public Class Methods
@deprecated Use {parse} instead.
@since 0.7.0
# File lib/nmap/xml.rb, line 71 def self.load(text,&block) parse(text,&block) end
Creates a new XML
object.
@param [Nokogiri::XML::Document, IO, String] document
The path to the Nmap XML scan file or Nokogiri::XML::Document.
@yield [xml]
If a block is given, it will be passed the new XML object.
@yieldparam [XML] xml
The newly created XML object.
# File lib/nmap/xml.rb, line 34 def initialize(document) case document when Nokogiri::XML::Document @doc = document when IO, StringIO @doc = Nokogiri::XML(document) else @path = File.expand_path(document) @doc = File.open(@path) { |file| Nokogiri::XML(file) } end yield self if block_given? end
Creates a new XML
object from the file.
@param [String] path
The path to the XML file.
@yield [xml]
If a block is given, it will be passed the new XML object.
@yieldparam [XML] xml
The newly created XML object.
@since 0.7.0
# File lib/nmap/xml.rb, line 89 def self.open(path,&block) new(path,&block) end
Creates a new XML
object from XML
text.
@param [String] text
XML text of the scan file
@yield [xml]
If a block is given, it will be passed the new XML object.
@yieldparam [XML] xml
The newly created XML object.
@since 0.8.0
# File lib/nmap/xml.rb, line 62 def self.parse(text,&block) new(Nokogiri::XML(text),&block) end
Public Instance Methods
Parses the debugging level.
@return [Integer]
The debugging level.
# File lib/nmap/xml.rb, line 197 def debugging @debugging ||= @doc.at('debugging/@level').inner_text.to_i end
Returns the first host found to be down during the scan.
@return [Host]
@since 0.8.0
# File lib/nmap/xml.rb, line 364 def down_host each_down_host.first end
Parses the hosts found to be down during the scan.
@return [Array<Host>]
The down hosts in the scan.
@since 0.8.0
# File lib/nmap/xml.rb, line 353 def down_hosts each_down_host.to_a end
Parses the hosts that were found to be up during the scan.
@see each_up_host
# File lib/nmap/xml.rb, line 417 def each(&block) each_up_host(&block) end
Parses the hosts that were found to be down during the scan.
@yield [host]
Each host will be passed to a given block.
@yieldparam [Host] host
A down host in the scan.
@return [XML, Enumerator]
The XML parser. If no block was given, an enumerator object will be returned.
@since 0.8.0
# File lib/nmap/xml.rb, line 335 def each_down_host return enum_for(__method__) unless block_given? @doc.xpath("/nmaprun/host[status[@state='down']]").each do |host| yield Host.new(host) end return self end
Parses the hosts in the scan.
@yield [host]
Each host will be passed to a given block.
@yieldparam [Host] host
A host in the scan.
@return [XML, Enumerator]
The XML object. If no block was given, an enumerator object will be returned.
# File lib/nmap/xml.rb, line 289 def each_host return enum_for(__method__) unless block_given? @doc.xpath('/nmaprun/host').each do |host| yield Host.new(host) end return self end
Parses the essential runstats information.
@yield [run_stat]
The given block will be passed each runstat.
@yieldparam [RunStat] run_stat
A runstat.
@return [Enumerator]
If no block is given, an enumerator will be returned.
@since 0.7.0
# File lib/nmap/xml.rb, line 154 def each_run_stat return enum_for(__method__) unless block_given? @doc.xpath('/nmaprun/runstats/finished').each do |run_stat| yield RunStat.new( Time.at(run_stat['time'].to_i), run_stat['elapsed'], run_stat['summary'], run_stat['exit'] ) end return self end
Parses the tasks of the scan.
@yield [task]
The given block will be passed each scan task.
@yieldparam [ScanTask] task
A task from the scan.
@return [Enumerator]
If no block is given, an enumerator will be returned.
@since 0.7.0
# File lib/nmap/xml.rb, line 215 def each_task return enum_for(__method__) unless block_given? @doc.xpath('/nmaprun/taskbegin').each do |task_begin| task_end = task_begin.xpath('following-sibling::taskend').first yield ScanTask.new( task_begin['task'], Time.at(task_begin['time'].to_i), Time.at(task_end['time'].to_i), task_end['extrainfo'] ) end return self end
Parses the hosts that were found to be up during the scan.
@yield [host]
Each host will be passed to a given block.
@yieldparam [Host] host
A host in the scan.
@return [XML, Enumerator]
The XML parser. If no block was given, an enumerator object will be returned.
# File lib/nmap/xml.rb, line 381 def each_up_host return enum_for(__method__) unless block_given? @doc.xpath("/nmaprun/host[status[@state='up']]").each do |host| yield Host.new(host) end return self end
Returns the first host.
@return [Host]
@since 0.8.0
# File lib/nmap/xml.rb, line 316 def host each_host.first end
Parses the hosts in the scan.
@return [Array<Host>]
The hosts in the scan.
# File lib/nmap/xml.rb, line 305 def hosts each_host.to_a end
Inspects the XML
file.
@return [String]
The inspected XML file.
# File lib/nmap/xml.rb, line 437 def inspect "#<#{self.class}: #{self}>" end
The NSE scripts ran after the scan.
@return [Postscript]
Contains the script output and data.
@since 0.9.0
# File lib/nmap/xml.rb, line 268 def postscript @postscript ||= if (postscript = @doc.at('postscript')) Postscript.new(postscript) end end
The NSE scripts ran before the scan.
@return [Prescript]
Contains the script output and data.
@since 0.9.0
# File lib/nmap/xml.rb, line 252 def prescript @prescript ||= if (prescript = @doc.at('prescript')) Prescript.new(prescript) end end
Parses the essential runstats information.
@return [Array<RunStat>]
The runstats.
@since 0.7.0
# File lib/nmap/xml.rb, line 177 def run_stats each_run_stat.to_a end
Parses the scan information.
@return [Array<Scan>]
The scan information.
# File lib/nmap/xml.rb, line 124 def scan_info @doc.xpath('/nmaprun/scaninfo').map do |scaninfo| Scan.new( scaninfo['type'].to_sym, scaninfo['protocol'].to_sym, scaninfo['services'].split(',').map { |ports| if ports.include?('-') Range.new(*(ports.split('-',2))) else ports.to_i end } ) end end
Parses the scanner information.
@return [Scanner]
The scanner that was used and generated the scan file.
# File lib/nmap/xml.rb, line 99 def scanner @scanner ||= Scanner.new( @doc.root['scanner'], @doc.root['version'], @doc.root['args'], Time.at(@doc.root['start'].to_i) ) end
Parses the tasks of the scan.
@return [Array<ScanTask>]
The tasks of the scan.
@since 0.1.2
# File lib/nmap/xml.rb, line 240 def tasks each_task.to_a end
Converts the XML
parser to a String.
@return [String]
The path of the XML scan file.
# File lib/nmap/xml.rb, line 427 def to_s @path.to_s end
Returns the first host found to be up during the scan.
@return [Host]
@since 0.8.0
# File lib/nmap/xml.rb, line 408 def up_host each_up_host.first end
Parses the hosts found to be up during the scan.
@return [Array<Host>]
The hosts in the scan.
# File lib/nmap/xml.rb, line 397 def up_hosts each_up_host.to_a end
Parses the verbose level.
@return [Integer]
The verbose level.
# File lib/nmap/xml.rb, line 187 def verbose @verbose ||= @doc.at('verbose/@level').inner_text.to_i end
Parses the XML
scan file version.
@return [String]
The version of the XML scan file.
# File lib/nmap/xml.rb, line 114 def version @version ||= @doc.root['xmloutputversion'] end