1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/usr/bin/env ruby
- # -*- coding: binary -*-
- #
- # Starts the HTTP DB Service interface
- # TODO: This functionality exists within the top level msfdb.rb, and should be merged.
- # Note that this file is currently called by RSpec when REMOTE_DB is set
- require 'optparse'
- class HelpError < StandardError; end
- class SwitchError < StandardError
- def initialize(msg="Missing required switch.")
- super(msg)
- end
- end
- def require_deps
- require 'pathname'
- require Pathname.new(__FILE__).realpath.expand_path.parent.parent.parent.join('config', 'boot')
- require 'msfenv'
- # require 'msf/core/web_services/http_db_manager_service'
- end
- def parse_args(args)
- opts = {}
- opt = OptionParser.new
- banner = "msfdb_ws - Metasploit data store as a web service.\n"
- banner << "Usage: #{$0} [options] <var=val>"
- opt.banner = banner
- opt.separator('')
- opt.separator('Options:')
- # Defaults:
- opts[:interface] = '0.0.0.0'
- opts[:port] = 8080
- opts[:ssl] = false
- opts[:ssl_cert] = nil
- opts[:ssl_key] = nil
- opt.on('-i', '--interface <interface>', String, 'Interface to listen on') do |p|
- opts[:interface] = p
- end
- opt.on('-p', '--port <port number>', Integer, 'Port to listen on') do |p|
- opts[:port] = p
- end
- opt.on('-s', '--ssl', 'Enable SSL on the server') do |p|
- opts[:ssl] = true
- end
- opt.on('-c', '--cert <path/to/cert.pem>', String, 'Path to SSL Certificate file') do |p|
- opts[:ssl_cert] = p
- end
- opt.on('-k', '--key <path/to/key.pem>', String, 'Path to SSL Key file') do |p|
- opts[:ssl_key] = p
- end
- opt.on_tail('-h', '--help', 'Show this message') do
- raise HelpError, "#{opt}"
- end
- begin
- opt.parse!(args)
- rescue OptionParser::InvalidOption => e
- raise UsageError, "Invalid option\n#{opt}"
- rescue OptionParser::MissingArgument => e
- raise UsageError, "Missing required argument for option\n#{opt}"
- end
- opts
- end
- begin
- opts = parse_args(ARGV)
- raise SwitchError.new("certificate file must be specified when using -s") if opts[:ssl] && (opts[:ssl_cert].nil?)
- require_deps
- Msf::WebServices::HttpDBManagerService.new.start(:Port => opts[:port],
- :Host => opts[:interface],
- :ssl => opts[:ssl],
- :ssl_cert => opts[:ssl_cert],
- :ssl_key => opts[:ssl_key])
- rescue HelpError => e
- $stderr.puts e.message
- end
|