diff --git a/scapy/error.py b/scapy/error.py index 0ca5433626b0b7a2152c69bb41a5eb6936d17f47..d7273447d018e12e15534362ebf43fd3ffdfccf8 100644 --- a/scapy/error.py +++ b/scapy/error.py @@ -64,13 +64,13 @@ log_interactive = logging.getLogger("scapy.interactive") # logs in interactive log_loading = logging.getLogger("scapy.loading") # logs when loading Scapy -def warning(x, onlyOnce=False, *args, **kargs): +def warning(x, *args, **kargs): """ Prints a warning during runtime. onlyOnce - if True, the warning will never be printed again. """ - if onlyOnce: + if kargs.pop("onlyOnce", False): from scapy.config import conf conf.warning_next_only_once = True log_runtime.warning(x, *args, **kargs) diff --git a/scapy/main.py b/scapy/main.py index 00d4cc544ca6890ccdb0bd7759218fc20aaccc05..c33d6661d3904e8b8bfd047c92e0d7ed546081f6 100644 --- a/scapy/main.py +++ b/scapy/main.py @@ -200,6 +200,12 @@ def list_contrib(name=None): ## Session saving/restoring ## ############################## +def update_ipython_session(session): + """Updates IPython session with a custom one""" + try: + get_ipython().user_ns.update(session) + except: + pass def save_session(fname=None, session=None, pickleProto=-1): """Save current Scapy session to the file specified in the fname arg. @@ -216,16 +222,21 @@ def save_session(fname=None, session=None, pickleProto=-1): log_interactive.info("Use [%s] as session file" % fname) if session is None: - session = six.moves.builtins.__dict__["scapy_session"] + try: + session = get_ipython().user_ns + except: + session = six.moves.builtins.__dict__["scapy_session"] to_be_saved = session.copy() if "__builtins__" in to_be_saved: del(to_be_saved["__builtins__"]) - for k in to_be_saved.keys(): + for k in list(to_be_saved.keys()): i = to_be_saved[k] if hasattr(i, "__module__") and (k[0] == "_" or i.__module__.startswith("IPython")): del(to_be_saved[k]) + if isinstance(i, ConfClass): + del(to_be_saved[k]) elif isinstance(i, (type, type, types.ModuleType)): if k[0] != "_": log_interactive.error("[%s] (%s) can't be saved." % (k, type(to_be_saved[k]))) @@ -261,6 +272,7 @@ def load_session(fname=None): scapy_session = six.moves.builtins.__dict__["scapy_session"] scapy_session.clear() scapy_session.update(s) + update_ipython_session(scapy_session) log_loading.info("Loaded session [%s]" % fname) @@ -277,6 +289,7 @@ def update_session(fname=None): s = six.moves.cPickle.load(open(fname,"rb")) scapy_session = six.moves.builtins.__dict__["scapy_session"] scapy_session.update(s) + update_ipython_session(scapy_session) def init_session(session_name, mydict=None): global SESSION @@ -319,6 +332,7 @@ def init_session(session_name, mydict=None): if mydict is not None: six.moves.builtins.__dict__["scapy_session"].update(mydict) + update_ipython_session(mydict) GLOBKEYS.extend(mydict) ################