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
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