Remove the last stubbly bit of scruby
git-svn-id: file:///home/svn/framework3/trunk@6827 4d416f70-5f16-0410-b530-b9f4589650daunstable
parent
5e07f7535f
commit
d57bdecb1d
133
lib/scruby.rb
133
lib/scruby.rb
|
@ -1,133 +0,0 @@
|
|||
#!/usr/bin/env ruby
|
||||
# Copyright (C) 2007 Sylvain SARMEJEANNE
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
|
||||
#
|
||||
# Tons of hacking/reorganization by hdm[at]metasploit.com
|
||||
# All bugs are mine, not Sylvain's
|
||||
#
|
||||
|
||||
|
||||
# This is part of the core distribution.
|
||||
require 'ipaddr'
|
||||
|
||||
require 'scruby/deps'
|
||||
require 'scruby/conf'
|
||||
require 'scruby/const'
|
||||
require 'scruby/layer'
|
||||
require 'scruby/packet'
|
||||
require 'scruby/field'
|
||||
require 'scruby/dissector'
|
||||
require 'scruby/func'
|
||||
require 'scruby/help'
|
||||
|
||||
module Scruby
|
||||
|
||||
# This is used to allow creating objects without using "new",
|
||||
# e.g. p=IP() instead of p=IP.new()
|
||||
def self.method_missing(method, *args)
|
||||
|
||||
# Looking for the field corresponding to 'method'
|
||||
dis = Scruby.get_dissector(method.to_s)
|
||||
|
||||
# If no dissector was found
|
||||
raise NameError, "undefined local variable or method `#{method}' for #{self} #{caller}" if not dis
|
||||
|
||||
# If a string was passed, let's try to dissect it as a Packet
|
||||
if args[0].is_a?(String)
|
||||
return Packet.new(args[0], method.to_s)
|
||||
|
||||
# Otherwise, instantiating the class with arguments if supplied
|
||||
else
|
||||
dis.new(*args)
|
||||
end
|
||||
end
|
||||
|
||||
# Same as above, for fields
|
||||
def self.field(method, *args)
|
||||
|
||||
# Looking for the field corresponding to 'method'
|
||||
field = Scruby.get_field(method.to_s)
|
||||
|
||||
# If no field was found
|
||||
raise NameError, "undefined local variable or method `#{method}' for #{self}" if not field
|
||||
|
||||
# Instantiating the class with arguments if supplied
|
||||
field.new(*args)
|
||||
end
|
||||
|
||||
def field(method, *args)
|
||||
Scruby.field(method, *args)
|
||||
end
|
||||
|
||||
def self.function_list
|
||||
(self.methods - Object.methods)
|
||||
end
|
||||
|
||||
def function_list
|
||||
Scruby.function_list
|
||||
end
|
||||
|
||||
attr_accessor :conf
|
||||
|
||||
def initialize(*args)
|
||||
super(*args)
|
||||
@conf = Conf.new
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class ScrubyBasic
|
||||
include Scruby
|
||||
end
|
||||
|
||||
# If we were not called from a module, let's spawn a shell.
|
||||
if (__FILE__ == $0)
|
||||
|
||||
|
||||
shell = ScrubyBasic.new
|
||||
|
||||
# This is part of the core distribution.
|
||||
begin
|
||||
require 'readline'
|
||||
rescue ::LoadError
|
||||
puts 'FATAL: module Readline not found.'
|
||||
exit
|
||||
end
|
||||
|
||||
# Welcome :)
|
||||
|
||||
puts "Welcome to Scruby (#{Scruby::SCRUBY_VERSION}) Copyright 2007 Sylvain SARMEJEANNE"
|
||||
puts "This version has been mangled by hdm[at]metasploit.com"
|
||||
puts "Blame all bugs on HD :-)"
|
||||
puts ""
|
||||
puts 'If you\'re lost, just shout for "help".'
|
||||
|
||||
# Setting the terminal
|
||||
prompt = 'scruby> '
|
||||
|
||||
Readline.completion_proc =
|
||||
proc {|word| (Scruby.function_list + Scruby.dissectors.keys).grep(/\A#{Regexp.quote word}/)}
|
||||
|
||||
# Main loop
|
||||
begin
|
||||
line = Readline.readline(prompt, Scruby::RECORD_HISTORY)
|
||||
begin
|
||||
puts(shell.instance_eval(line)) if line != nil
|
||||
rescue SystemExit => e
|
||||
raise e
|
||||
rescue Exception => e
|
||||
puts "#{e.class}: #{e} #{e.backtrace}"
|
||||
end
|
||||
end until line == nil
|
||||
puts
|
||||
end
|
Loading…
Reference in New Issue