summaryrefslogtreecommitdiffstats
path: root/scripts/external_libs/scapy-2.3.1/scapy/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/external_libs/scapy-2.3.1/scapy/main.py')
-rw-r--r--scripts/external_libs/scapy-2.3.1/scapy/main.py371
1 files changed, 0 insertions, 371 deletions
diff --git a/scripts/external_libs/scapy-2.3.1/scapy/main.py b/scripts/external_libs/scapy-2.3.1/scapy/main.py
deleted file mode 100644
index 0fce8c3e..00000000
--- a/scripts/external_libs/scapy-2.3.1/scapy/main.py
+++ /dev/null
@@ -1,371 +0,0 @@
-## This file is part of Scapy
-## See http://www.secdev.org/projects/scapy for more informations
-## Copyright (C) Philippe Biondi <phil@secdev.org>
-## This program is published under a GPLv2 license
-
-"""
-Main module for interactive startup.
-"""
-
-from __future__ import generators
-import os,sys
-import glob
-import __builtin__
-from error import *
-import utils
-
-
-def _probe_config_file(cf):
- cf_path = os.path.join(os.path.expanduser("~"), cf)
- try:
- os.stat(cf_path)
- except OSError:
- return None
- else:
- return cf_path
-
-def _read_config_file(cf):
- log_loading.debug("Loading config file [%s]" % cf)
- try:
- execfile(cf)
- except IOError,e:
- log_loading.warning("Cannot read config file [%s] [%s]" % (cf,e))
- except Exception,e:
- log_loading.exception("Error during evaluation of config file [%s]" % cf)
-
-
-DEFAULT_PRESTART_FILE = _probe_config_file(".scapy_prestart.py")
-DEFAULT_STARTUP_FILE = _probe_config_file(".scapy_startup.py")
-
-def _usage():
- print """Usage: scapy.py [-s sessionfile] [-c new_startup_file] [-p new_prestart_file] [-C] [-P]
- -C: do not read startup file
- -P: do not read pre-startup file"""
- sys.exit(0)
-
-
-from config import conf
-from themes import DefaultTheme
-
-
-######################
-## Extension system ##
-######################
-
-
-def _load(module):
- try:
- mod = __import__(module,globals(),locals(),".")
- __builtin__.__dict__.update(mod.__dict__)
- except Exception,e:
- log_interactive.error(e)
-
-def load_module(name):
- _load("scapy.modules."+name)
-
-def load_layer(name):
- _load("scapy.layers."+name)
-
-def load_contrib(name):
- _load("scapy.contrib."+name)
-
-def list_contrib(name=None):
- if name is None:
- name="*.py"
- elif "*" not in name and "?" not in name and not name.endswith(".py"):
- name += ".py"
- name = os.path.join(os.path.dirname(__file__), "contrib", name)
- for f in glob.glob(name):
- mod = os.path.basename(f)
- if mod.startswith("__"):
- continue
- if mod.endswith(".py"):
- mod = mod[:-3]
- desc = { "description":"-", "status":"?", "name":mod }
- for l in open(f):
- p = l.find("scapy.contrib.")
- if p >= 0:
- p += 14
- q = l.find("=", p)
- key = l[p:q].strip()
- value = l[q+1:].strip()
- desc[key] = value
- print "%(name)-20s: %(description)-40s status=%(status)s" % desc
-
-
-
-
-
-
-##############################
-## Session saving/restoring ##
-##############################
-
-
-def save_session(fname=None, session=None, pickleProto=-1):
- if fname is None:
- fname = conf.session
- if not fname:
- conf.session = fname = utils.get_temp_file(keep=True)
- log_interactive.info("Use [%s] as session file" % fname)
- if session is None:
- session = __builtin__.__dict__["scapy_session"]
-
- to_be_saved = session.copy()
-
- if to_be_saved.has_key("__builtins__"):
- del(to_be_saved["__builtins__"])
-
- for k in to_be_saved.keys():
- if type(to_be_saved[k]) in [types.TypeType, types.ClassType, types.ModuleType]:
- log_interactive.error("[%s] (%s) can't be saved." % (k, type(to_be_saved[k])))
- del(to_be_saved[k])
-
- try:
- os.rename(fname, fname+".bak")
- except OSError:
- pass
- f=gzip.open(fname,"wb")
- cPickle.dump(to_be_saved, f, pickleProto)
- f.close()
-
-def load_session(fname=None):
- if fname is None:
- fname = conf.session
- try:
- s = cPickle.load(gzip.open(fname,"rb"))
- except IOError:
- s = cPickle.load(open(fname,"rb"))
- scapy_session = __builtin__.__dict__["scapy_session"]
- scapy_session.clear()
- scapy_session.update(s)
-
-def update_session(fname=None):
- if fname is None:
- fname = conf.session
- try:
- s = cPickle.load(gzip.open(fname,"rb"))
- except IOError:
- s = cPickle.load(open(fname,"rb"))
- scapy_session = __builtin__.__dict__["scapy_session"]
- scapy_session.update(s)
-
-
-################
-##### Main #####
-################
-
-def scapy_delete_temp_files():
- for f in conf.temp_files:
- try:
- os.unlink(f)
- except:
- pass
-
-def scapy_write_history_file(readline):
- if conf.histfile:
- try:
- readline.write_history_file(conf.histfile)
- except IOError,e:
- try:
- warning("Could not write history to [%s]\n\t (%s)" % (conf.histfile,e))
- tmp = utils.get_temp_file(keep=True)
- readline.write_history_file(tmp)
- warning("Wrote history to [%s]" % tmp)
- except:
- warning("Cound not write history to [%s]. Discarded" % tmp)
-
-
-def interact(mydict=None,argv=None,mybanner=None,loglevel=20):
- global session
- import code,sys,cPickle,os,getopt,re
- from config import conf
- conf.interactive = True
- if loglevel is not None:
- conf.logLevel=loglevel
-
- the_banner = "Welcome to Scapy (%s)"
- if mybanner is not None:
- the_banner += "\n"
- the_banner += mybanner
-
- if argv is None:
- argv = sys.argv
-
- import atexit
- try:
- import rlcompleter,readline
- except ImportError:
- log_loading.info("Can't load Python libreadline or completer")
- READLINE=0
- else:
- READLINE=1
- class ScapyCompleter(rlcompleter.Completer):
- def global_matches(self, text):
- matches = []
- n = len(text)
- for lst in [dir(__builtin__), session.keys()]:
- for word in lst:
- if word[:n] == text and word != "__builtins__":
- matches.append(word)
- return matches
-
-
- def attr_matches(self, text):
- m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text)
- if not m:
- return
- expr, attr = m.group(1, 3)
- try:
- object = eval(expr)
- except:
- object = eval(expr, session)
- if isinstance(object, Packet) or isinstance(object, Packet_metaclass):
- words = filter(lambda x: x[0]!="_",dir(object))
- words += [x.name for x in object.fields_desc]
- else:
- words = dir(object)
- if hasattr( object,"__class__" ):
- words = words + rlcompleter.get_class_members(object.__class__)
- matches = []
- n = len(attr)
- for word in words:
- if word[:n] == attr and word != "__builtins__":
- matches.append("%s.%s" % (expr, word))
- return matches
-
- readline.set_completer(ScapyCompleter().complete)
- readline.parse_and_bind("C-o: operate-and-get-next")
- readline.parse_and_bind("tab: complete")
-
-
- session=None
- session_name=""
- STARTUP_FILE = DEFAULT_STARTUP_FILE
- PRESTART_FILE = DEFAULT_PRESTART_FILE
-
-
- iface = None
- try:
- opts=getopt.getopt(argv[1:], "hs:Cc:Pp:d")
- for opt, parm in opts[0]:
- if opt == "-h":
- _usage()
- elif opt == "-s":
- session_name = parm
- elif opt == "-c":
- STARTUP_FILE = parm
- elif opt == "-C":
- STARTUP_FILE = None
- elif opt == "-p":
- PRESTART_FILE = parm
- elif opt == "-P":
- PRESTART_FILE = None
- elif opt == "-d":
- conf.logLevel = max(1,conf.logLevel-10)
-
- if len(opts[1]) > 0:
- raise getopt.GetoptError("Too many parameters : [%s]" % " ".join(opts[1]))
-
-
- except getopt.GetoptError, msg:
- log_loading.error(msg)
- sys.exit(1)
-
- if PRESTART_FILE:
- _read_config_file(PRESTART_FILE)
-
- scapy_builtins = __import__("all",globals(),locals(),".").__dict__
- __builtin__.__dict__.update(scapy_builtins)
- globkeys = scapy_builtins.keys()
- globkeys.append("scapy_session")
- scapy_builtins=None # XXX replace with "with" statement
- if mydict is not None:
- __builtin__.__dict__.update(mydict)
- globkeys += mydict.keys()
-
-
- conf.color_theme = DefaultTheme()
- if STARTUP_FILE:
- _read_config_file(STARTUP_FILE)
-
- if session_name:
- try:
- os.stat(session_name)
- except OSError:
- log_loading.info("New session [%s]" % session_name)
- else:
- try:
- try:
- session = cPickle.load(gzip.open(session_name,"rb"))
- except IOError:
- session = cPickle.load(open(session_name,"rb"))
- log_loading.info("Using session [%s]" % session_name)
- except EOFError:
- log_loading.error("Error opening session [%s]" % session_name)
- except AttributeError:
- log_loading.error("Error opening session [%s]. Attribute missing" % session_name)
-
- if session:
- if "conf" in session:
- conf.configure(session["conf"])
- session["conf"] = conf
- else:
- conf.session = session_name
- session={"conf":conf}
-
- else:
- session={"conf": conf}
-
- __builtin__.__dict__["scapy_session"] = session
-
-
- if READLINE:
- if conf.histfile:
- try:
- readline.read_history_file(conf.histfile)
- except IOError:
- pass
- atexit.register(scapy_write_history_file,readline)
-
- atexit.register(scapy_delete_temp_files)
-
- IPYTHON=False
- if conf.interactive_shell.lower() == "ipython":
- try:
- import IPython
- IPYTHON=True
- except ImportError, e:
- log_loading.warning("IPython not available. Using standard Python shell instead.")
- IPYTHON=False
-
- if IPYTHON:
- banner = the_banner % (conf.version) + " using IPython %s" % IPython.__version__
-
- # Old way to embed IPython kept for backward compatibility
- try:
- args = [''] # IPython command line args (will be seen as sys.argv)
- ipshell = IPython.Shell.IPShellEmbed(args, banner = banner)
- ipshell(local_ns=session)
- except AttributeError, e:
- pass
-
- # In the IPython cookbook, see 'Updating-code-for-use-with-IPython-0.11-and-later'
- IPython.embed(user_ns=session, banner2=banner)
-
- else:
- code.interact(banner = the_banner % (conf.version),
- local=session, readfunc=conf.readfunc)
-
- if conf.session:
- save_session(conf.session, session)
-
-
- for k in globkeys:
- try:
- del(__builtin__.__dict__[k])
- except:
- pass
-
-if __name__ == "__main__":
- interact()