class RubyNessus::CLI

Public Class Methods

new() click to toggle source
# File lib/ruby-nessus/cli.rb, line 12
def initialize
  @file = nil
  @nessus_version = nil
  @args = []
end
run() click to toggle source
# File lib/ruby-nessus/cli.rb, line 18
def self.run
  new.run(*ARGV)
end

Public Instance Methods

run(*args) click to toggle source
# File lib/ruby-nessus/cli.rb, line 22
def run(*args)
  optparse(*args)

  Log.it 'Recess - Ruby-Nessus CLI'
  Log.it "Version: #{RubyNessus::VERSION}"
  Log.it

  RubyNessus::Parse.new(@file.to_s) do |scan|
    Log.h1 'SCAN Metadata'
    Log.it
    Log.h2 'Scan Title', scan.title
    Log.h2 'Policy Title', scan.policy_title
    Log.it
    Log.h1 'SCAN Statistics'
    Log.it
    Log.h2 'Host Count', scan.host_count
    Log.h2 'Open Port Count', scan.open_ports_count

    unless scan.version == 1
      Log.h2 'TCP Count', scan.tcp_count
      Log.h2 'UDP Count', scan.udp_count
      Log.h2 'ICMP Count', scan.icmp_count
    end

    Log.it
    Log.h1 'EVENT Statistics'
    Log.it

    Log.informational 'Informational Severity Count', scan.informational_severity_count unless scan.version == 1

    Log.low 'Low Severity Count', scan.low_severity_count
    Log.medium 'Medium Severity Count', scan.medium_severity_count
    Log.high 'High Severity Count', scan.high_severity_count
    Log.h3 'Total Event Count', scan.total_event_count
    Log.break
    Log.it! "Low Event Percentage: #{scan.event_percentage_for('low', true)}"
    Log.it! "Medium Event Percentage: #{scan.event_percentage_for('medium', true)}"
    Log.it! "High Event Percentage: #{scan.event_percentage_for('high', true)}"
    Log.it

    Log.h1 'HOSTS'
    Log.it

    scan.each_host do |host|
      Log.h2 'Hostname', host.hostname
      Log.h5 'IP Address:', host.ip

      unless scan.version == 1
        Log.h5 'Informational Count', host.informational_severity_count
        Log.h5 'Low Count', host.low_severity_count
        Log.h5 'Medium Count', host.medium_severity_count
        Log.h5 'High Count', host.high_severity_count
      end
      Log.it
    end

    Log.end
  end
end

Protected Instance Methods

optparse(*args) click to toggle source
# File lib/ruby-nessus/cli.rb, line 84
def optparse(*args)
  opts = OptionParser.new
  opts.program_name = 'recess'
  opts.banner = "Recess #{RubyNessus::VERSION}"
  opts.separator 'usage: recess FILE [OPTIONS]'

  opts.on('-f', '--file FILE', 'The .nessus file to parse.') do |file|
    @file = file
  end

  opts.on('-f', '--file FILE', 'The .nessus file to parse.') do |file|
    @file = file
  end

  opts.on('-h', '--help', 'This help summary page.') do |_help|
    Log.it opts
    Log.it
    exit(-1)
  end

  opts.on('-v', '--version', 'Recess Version.') do |_version|
    Log.it RubyNessus::VERSION
    Log.it
    exit(-1)
  end

  begin
    @args = opts.parse!(args)
    @file ||= @args[0]
    if @file.nil?
      Log.it opts
      Log.it
      exit(-1)
    end
  rescue => e
    Log.error e.message
    Log.it opts
    Log.it
    exit(-1)
  end
end