root/framework3/trunk/msfgui

Revision 5491, 2.7 kB (checked in by hdm, 4 months ago)

Let the GUI handle -r, change default window size to fit smaller screens, updated HTTP capture code, added keywords to payload

  • Property svn:executable set to *
Line 
1 #!/usr/bin/env ruby
2 #
3 # This is a basic user interface using the Gtk2 GUI library
4 #
5
6 msfbase = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
7 $:.unshift(File.join(File.dirname(msfbase), 'lib'))
8 $:.unshift(ENV['MSF_LOCAL_LIB']) if ENV['MSF_LOCAL_LIB']
9
10 require 'rex'
11 require 'msf/base'
12 require 'msf/ui'
13
14 # Check for ruby packages
15 begin
16         require 'gtk2'
17         require 'libglade2'
18 rescue ::Exception => e
19         $stderr.puts "[*] The msfgui interface requires the ruby-gtk2 and ruby-libglade2 packages"
20         $stderr.puts "[*] Dependencies include ruby-pango, ruby-glib2, ruby-gdkpixbuf2, and ruby-atk"
21         $stderr.puts "[*] Error: #{e.class} #{e}"
22         exit(0)
23 end
24
25 # Check for Gtk+ version
26 # Returns: nil if the GTK+ library is compatible with the given version,
27 # or a string describing the version mismatch.
28 if gtkversion = Gtk.check_version(2,8,0)
29         $stderr.puts "[*] The msfgui interface requires Gtk+ 2.8 or later"
30         $stderr.puts "[*] Your Gtk+ version : #{gtkversion}"
31         exit
32 end     
33
34 require 'msf/ui/gtk2'
35
36 # Declare the argument parser for msfgui
37 arguments = Rex::Parser::Arguments.new(
38         "-v" => [ true,  "A number between 0 and 3 that controls log verbosity" ],
39         "-r" => [ true,  "Execute the specified resource file"                  ],
40         "-d" => [ false, "Keep running in the foreground"                       ],
41         "-D" => [ false, "Keep stdio and stderr open for debugging"             ],
42         "-h" => [ false, "Help banner"                                          ])
43
44 opts = {}
45 foreground = true
46 debug = false
47
48 # Parse command line arguments.
49 arguments.parse(ARGV) { |opt, idx, val|
50         case opt
51                 when "-v"
52                         opts['LogLevel'] = val
53                 when "-r"
54                         opts['Resource'] = val
55                 when "-d"
56                         foreground = false
57                 when "-D"
58                         debug = true
59                 when "-h"
60                         print(
61                                 "\nUsage: msfgui <options>\n" +
62                                 arguments.usage)
63                         exit
64         end
65 }
66
67 # Fork into the background if requested
68 begin
69         if (not foreground)
70                 exit(0) if Process.fork()
71         end
72 rescue ::NotImplementedError
73         $stderr.puts "[*] Background mode is not available on this platform"
74 end
75
76 class FakeOut
77         def write(buff)
78                 buff.length
79         end
80        
81         def method_missing(meth, *args)
82         end
83 end
84
85 if(not debug)
86
87         begin; $stdout.close; rescue; end
88         begin; $stderr.close; rescue; end
89        
90         fake = FakeOut.new
91         $stdout = fake
92         $stderr = fake
93        
94         # Only treat super nasty Gtk errors as fatal   
95         GLib::Log.set_fatal_mask("GLib", GLib::Log::LEVEL_ERROR)
96         GLib::Log.set_fatal_mask("Gtk", GLib::Log::LEVEL_ERROR)
97         GLib::Log.set_fatal_mask("Gdk", GLib::Log::LEVEL_ERROR)
98         GLib::Log.set_fatal_mask(nil, GLib::Log::LEVEL_ERROR)
99        
100         # GLib::Log.log("Gtk", GLib::Log::LEVEL_CRITICAL, "TESTING > /dev/null")
101 end
102
103 $stderr.puts "[*] Debugging mode is enabled"
104
105 # Language is English
106 ENV['LANG'] = 'C'
107        
108 # Create the driver instance and run it.
109 Msf::Ui::Gtk2::Driver.new(opts).run
110
111
Note: See TracBrowser for help on using the browser.