class Nessus::Client

Public Class Methods

new(host, username = nil, password = nil, ssl_option = nil) { |connection| ... } click to toggle source
# File lib/nessus/xmlrpc.rb, line 17
def initialize(host, username = nil, password = nil, ssl_option = nil)
  uri = URI.parse(host)
  @connection = Net::HTTP.new(uri.host, uri.port)
  @connection.use_ssl = true
  if ssl_option == "ssl_verify"
    @connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
  else
    @connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
    
  yield @connection if block_given?
    authenticate(username, password) if username && password
end

Public Instance Methods

authenticate(username, password) click to toggle source
# File lib/nessus/xmlrpc.rb, line 31
def authenticate(username, password)
  payload = {
    :username => username, 
    :password => password, 
    :json => 1
  }
  res = http_post(:uri=>"/session", :data=>payload)
  if res['token']
    @token = "token=#{res['token']}"
    return true
  else
    false
  end
end
Also aliased as: login
authenticated() click to toggle source
# File lib/nessus/xmlrpc.rb, line 52
def authenticated
  if (@token && @token.include?('token='))
    return true
  else
    return false
  end
end
get_server_properties() click to toggle source
# File lib/nessus/xmlrpc.rb, line 60
def get_server_properties
  http_get(:uri=>"/server/properties", :fields=>x_cookie)
end
host_detail(scan_id, host_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 204
def host_detail(scan_id, host_id)
  res = http_get(:uri=>"/scans/#{scan_id}/hosts/#{host_id}", :fields=>x_cookie)
end
is_admin() click to toggle source
# File lib/nessus/xmlrpc.rb, line 126
def is_admin
  res = http_get(:uri=>"/session", :fields=>x_cookie)
  if res['permissions'] == 128
    return true
  else
    return false
  end
end
list_families() click to toggle source
# File lib/nessus/xmlrpc.rb, line 110
def list_families
  http_get(:uri=>"/plugins/families", :fields=>x_cookie)
end
list_folders() click to toggle source
# File lib/nessus/xmlrpc.rb, line 102
def list_folders
  http_get(:uri=>"/folders", :fields=>x_cookie)
end
list_plugins(family_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 114
def list_plugins(family_id)
  http_get(:uri=>"/plugins/families/#{family_id}", :fields=>x_cookie)
end
list_policies() click to toggle source
# File lib/nessus/xmlrpc.rb, line 94
def list_policies
  http_get(:uri=>"/policies", :fields=>x_cookie)
end
list_scanners() click to toggle source
# File lib/nessus/xmlrpc.rb, line 106
def list_scanners
  http_get(:uri=>"/scanners", :fields=>x_cookie)
end
list_template(type) click to toggle source
# File lib/nessus/xmlrpc.rb, line 118
def list_template(type)
  res = http_get(:uri=>"/editor/#{type}/templates", :fields=>x_cookie)
end
list_users() click to toggle source
# File lib/nessus/xmlrpc.rb, line 98
def list_users
  http_get(:uri=>"/users", :fields=>x_cookie)
end
login(username, password)
Alias for: authenticate
plugin_details(plugin_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 122
def plugin_details(plugin_id)
  http_get(:uri=>"/plugins/plugin/#{plugin_id}", :fields=>x_cookie)
end
policy_delete(policy_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 199
def policy_delete(policy_id)
  res = http_delete(:uri=>"/policies/#{policy_id}", :fields=>x_cookie)
  return res.code
end
report_download(scan_id, file_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 208
def report_download(scan_id, file_id)
  res = http_get(:uri=>"/scans/#{scan_id}/export/#{file_id}/download", :raw_content=> true, :fields=>x_cookie)
end
scan_create(uuid, name, description, targets) click to toggle source
# File lib/nessus/xmlrpc.rb, line 139
def scan_create(uuid, name, description, targets)
  payload = {
    :uuid => uuid, 
    :settings => {
      :name => name, 
      :description => description, 
      :text_targets => targets
      },
    :json => 1
  }.to_json
  http_post(:uri=>"/scans", :body=>payload, :fields=>x_cookie, :ctype=>'application/json')
end
scan_details(scan_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 164
def scan_details(scan_id)
  http_get(:uri=>"/scans/#{scan_id}", :fields=>x_cookie)
end
scan_export(scan_id, format) click to toggle source
# File lib/nessus/xmlrpc.rb, line 180
def scan_export(scan_id, format)
  payload = {
    :format => format
  }.to_json
  http_post(:uri=>"/scans/#{scan_id}/export", :body=>payload, :ctype=>'application/json', :fields=>x_cookie)
end
scan_export_status(scan_id, file_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 187
def scan_export_status(scan_id, file_id)
  request = Net::HTTP::Get.new("/scans/#{scan_id}/export/#{file_id}/status")
  request.add_field("X-Cookie", @token)
  res = @connection.request(request)
  if res.code == "200"
    return "ready"
  else
    res = JSON.parse(res.body)
    return res
  end
end
scan_launch(scan_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 152
def scan_launch(scan_id)
  http_post(:uri=>"/scans/#{scan_id}/launch", :fields=>x_cookie)
end
scan_list() click to toggle source
# File lib/nessus/xmlrpc.rb, line 160
def scan_list
  http_get(:uri=>"/scans", :fields=>x_cookie)
end
scan_pause(scan_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 168
def scan_pause(scan_id)
  http_post(:uri=>"/scans/#{scan_id}/pause", :fields=>x_cookie)
end
scan_resume(scan_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 172
def scan_resume(scan_id)
  http_post(:uri=>"/scans/#{scan_id}/resume", :fields=>x_cookie)
end
scan_stop(scan_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 176
def scan_stop(scan_id)
  http_post(:uri=>"/scans/#{scan_id}/stop", :fields=>x_cookie)
end
server_properties() click to toggle source
# File lib/nessus/xmlrpc.rb, line 135
def server_properties
  http_get(:uri=>"/server/properties", :fields=>x_cookie)
end
server_status() click to toggle source
# File lib/nessus/xmlrpc.rb, line 156
def server_status
  http_get(:uri=>"/server/status", :fields=>x_cookie)
end
user_add(username, password, permissions, type) click to toggle source
# File lib/nessus/xmlrpc.rb, line 64
def user_add(username, password, permissions, type)
  payload = {
    :username => username, 
    :password => password, 
    :permissions => permissions, 
    :type => type, 
    :json => 1
  }
  http_post(:uri=>"/users", :fields=>x_cookie, :data=>payload)
end
user_chpasswd(user_id, password) click to toggle source
# File lib/nessus/xmlrpc.rb, line 80
def user_chpasswd(user_id, password)
  payload = {
    :password => password, 
    :json => 1
  }
  res = http_put(:uri=>"/users/#{user_id}/chpasswd", :data=>payload, :fields=>x_cookie)
  return res.code
end
user_delete(user_id) click to toggle source
# File lib/nessus/xmlrpc.rb, line 75
def user_delete(user_id)
  res = http_delete(:uri=>"/users/#{user_id}", :fields=>x_cookie)
  return res.code
end
user_logout() click to toggle source
# File lib/nessus/xmlrpc.rb, line 89
def user_logout
  res = http_delete(:uri=>"/session", :fields=>x_cookie)
  return res.code
end

Private Instance Methods

http_delete(opts={}) click to toggle source
# File lib/nessus/xmlrpc.rb, line 235
def http_delete(opts={})
  uri    = opts[:uri]
  fields = opts[:fields] || {}
  res    = nil

  req = Net::HTTP::Delete.new(uri)

  fields.each_pair do |name, value|
    req.add_field(name, value)
  end

  begin
    res = @connection.request(req)
  rescue URI::InvalidURIError
    return res
  end

  res
end
http_get(opts={}) click to toggle source
# File lib/nessus/xmlrpc.rb, line 255
def http_get(opts={})
  uri         = opts[:uri]
  fields      = opts[:fields] || {}
  raw_content = opts[:raw_content] || false
  json        = {}

  req = Net::HTTP::Get.new(uri)
  fields.each_pair do |name, value|
    req.add_field(name, value)
  end

  begin
    res = @connection.request(req)
  rescue URI::InvalidURIError
    return json
  end
  if !raw_content
    parse_json(res.body)
  else
    res.body
  end
end
http_post(opts = {}) click to toggle source
# File lib/nessus/xmlrpc.rb, line 278
def http_post(opts = {})
  uri    = opts[:uri]
  data   = opts[:data]
  fields = opts[:fields] || {}
  body   = opts[:body]
  ctype  = opts[:ctype]
  json   = {}

  req = Net::HTTP::Post.new(uri)
  req.set_form_data(data) if data
  req.body = body if body
  req['Content-Type'] = ctype if ctype
  fields.each_pair do |name, value|
    req.add_field(name, value)
  end

  begin
    res = @connection.request(req)
  rescue URI::InvalidURIError
    return json
  end

  parse_json(res.body)
end
http_put(opts={}) click to toggle source
# File lib/nessus/xmlrpc.rb, line 214
def http_put(opts={})
  uri    = opts[:uri]
  data   = opts[:data]
  fields = opts[:fields] || {}
  res    = nil

  req = Net::HTTP::Put.new(uri)
  req.set_form_data(data) unless data.blank?
  fields.each_pair do |name, value|
    req.add_field(name, value)
  end

  begin
    res = @connection.request(req)
  rescue URI::InvalidURIError
    return res
  end

  res
end
parse_json(body) click to toggle source
# File lib/nessus/xmlrpc.rb, line 303
def parse_json(body)
  buf = {}

  begin
    buf = JSON.parse(body)
  rescue JSON::ParserError
  end

  buf
end