1212import code
1313import getopt
1414import glob
15- import gzip
1615import importlib
1716import io
1817import logging
1918import os
2019import pathlib
21- import pickle
2220import shutil
2321import sys
24- import types
2522import warnings
2623
2724from itertools import zip_longest
@@ -260,7 +257,7 @@ def _validate_local(k):
260257def _usage ():
261258 # type: () -> None
262259 print (
263- "Usage: scapy.py [-s sessionfile] [- c new_startup_file] "
260+ "Usage: scapy.py [-c new_startup_file] "
264261 "[-p new_prestart_file] [-C] [-P] [-H]\n "
265262 "Args:\n "
266263 "\t -H: header-less start\n "
@@ -494,178 +491,35 @@ def _scapy_exts():
494491 return res
495492
496493
497- def save_session (fname = "" , session = None , pickleProto = - 1 ):
498- # type: (str, Optional[Dict[str, Any]], int) -> None
499- """Save current Scapy session to the file specified in the fname arg.
500-
501- params:
502- - fname: file to save the scapy session in
503- - session: scapy session to use. If None, the console one will be used
504- - pickleProto: pickle proto version (default: -1 = latest)"""
505- from scapy import utils
506- from scapy .config import conf , ConfClass
507- if not fname :
508- fname = conf .session
509- if not fname :
510- conf .session = fname = utils .get_temp_file (keep = True )
511- log_interactive .info ("Saving session into [%s]" , fname )
512-
513- if not session :
514- if conf .interactive_shell in ["ipython" , "ptipython" ]:
515- from IPython import get_ipython
516- session = get_ipython ().user_ns
517- else :
518- session = builtins .__dict__ ["scapy_session" ]
519-
520- if not session :
521- log_interactive .error ("No session found ?!" )
522- return
523-
524- ignore = session .get ("_scpybuiltins" , [])
525- hard_ignore = ["scapy_session" , "In" , "Out" , "open" ]
526- to_be_saved = session .copy ()
527-
528- for k in list (to_be_saved ):
529- i = to_be_saved [k ]
530- if k [0 ] == "_" :
531- del to_be_saved [k ]
532- elif hasattr (i , "__module__" ) and i .__module__ .startswith ("IPython" ):
533- del to_be_saved [k ]
534- elif isinstance (i , ConfClass ):
535- del to_be_saved [k ]
536- elif k in ignore or k in hard_ignore :
537- del to_be_saved [k ]
538- elif isinstance (i , (type , types .ModuleType , types .FunctionType )):
539- if k [0 ] != "_" :
540- log_interactive .warning ("[%s] (%s) can't be saved." , k , type (i ))
541- del to_be_saved [k ]
542- else :
543- try :
544- pickle .dumps (i )
545- except Exception :
546- log_interactive .warning ("[%s] (%s) can't be saved." , k , type (i ))
547-
548- try :
549- os .rename (fname , fname + ".bak" )
550- except OSError :
551- pass
552-
553- f = gzip .open (fname , "wb" )
554- pickle .dump (to_be_saved , f , pickleProto )
555- f .close ()
556-
557-
558- def load_session (fname = None ):
559- # type: (Optional[Union[str, None]]) -> None
560- """Load current Scapy session from the file specified in the fname arg.
561- This will erase any existing session.
562-
563- params:
564- - fname: file to load the scapy session from"""
565- from scapy .config import conf
566- if fname is None :
567- fname = conf .session
568- try :
569- s = pickle .load (gzip .open (fname , "rb" ))
570- except IOError :
571- try :
572- s = pickle .load (open (fname , "rb" ))
573- except IOError :
574- # Raise "No such file exception"
575- raise
576-
577- scapy_session = builtins .__dict__ ["scapy_session" ]
578- s .update ({k : scapy_session [k ] for k in scapy_session ["_scpybuiltins" ]})
579- scapy_session .clear ()
580- scapy_session .update (s )
581- update_ipython_session (scapy_session )
582-
583- log_loading .info ("Loaded session [%s]" , fname )
584-
585-
586- def update_session (fname = None ):
587- # type: (Optional[Union[str, None]]) -> None
588- """Update current Scapy session from the file specified in the fname arg.
589-
590- params:
591- - fname: file to load the scapy session from"""
592- from scapy .config import conf
593- if fname is None :
594- fname = conf .session
595- try :
596- s = pickle .load (gzip .open (fname , "rb" ))
597- except IOError :
598- s = pickle .load (open (fname , "rb" ))
599- scapy_session = builtins .__dict__ ["scapy_session" ]
600- scapy_session .update (s )
601- update_ipython_session (scapy_session )
602-
603-
604494@overload
605- def init_session (session_name , # type: Optional[Union[str, None]]
606- mydict , # type: Optional[Union[Dict[str, Any], None]]
495+ def init_session (mydict , # type: Optional[Union[Dict[str, Any], None]]
607496 ret , # type: Literal[True]
608497 ):
609498 # type: (...) -> Dict[str, Any]
610499 pass
611500
612501
613502@overload
614- def init_session (session_name , # type: Optional[Union[str, None]]
615- mydict = None , # type: Optional[Union[Dict[str, Any], None]]
503+ def init_session (mydict = None , # type: Optional[Union[Dict[str, Any], None]]
616504 ret = False , # type: Literal[False]
617505 ):
618506 # type: (...) -> None
619507 pass
620508
621509
622- def init_session (session_name , # type: Optional[Union[str, None]]
623- mydict = None , # type: Optional[Union[Dict[str, Any], None]]
510+ def init_session (mydict = None , # type: Optional[Union[Dict[str, Any], None]]
624511 ret = False , # type: bool
625512 ):
626513 # type: (...) -> Union[Dict[str, Any], None]
627514 from scapy .config import conf
628- SESSION = {} # type: Optional[Dict[str, Any]]
629515
630516 # Load Scapy
631517 scapy_builtins = _scapy_builtins ()
632518
633519 # Load exts
634520 scapy_builtins .update (_scapy_exts ())
635521
636- if session_name :
637- try :
638- os .stat (session_name )
639- except OSError :
640- log_loading .info ("New session [%s]" , session_name )
641- else :
642- try :
643- try :
644- SESSION = pickle .load (gzip .open (session_name , "rb" ))
645- except IOError :
646- SESSION = pickle .load (open (session_name , "rb" ))
647- log_loading .info ("Using existing session [%s]" , session_name )
648- except ValueError :
649- msg = "Error opening Python3 pickled session on Python2 [%s]"
650- log_loading .error (msg , session_name )
651- except EOFError :
652- log_loading .error ("Error opening session [%s]" , session_name )
653- except AttributeError :
654- log_loading .error ("Error opening session [%s]. "
655- "Attribute missing" , session_name )
656-
657- if SESSION :
658- if "conf" in SESSION :
659- conf .configure (SESSION ["conf" ])
660- conf .session = session_name
661- SESSION ["conf" ] = conf
662- else :
663- conf .session = session_name
664- else :
665- conf .session = session_name
666- SESSION = {"conf" : conf }
667- else :
668- SESSION = {"conf" : conf }
522+ SESSION = {"conf" : conf } # type: Dict[str, Any]
669523
670524 SESSION .update (scapy_builtins )
671525 SESSION ["_scpybuiltins" ] = scapy_builtins .keys ()
@@ -678,6 +532,7 @@ def init_session(session_name, # type: Optional[Union[str, None]]
678532 return SESSION
679533 return None
680534
535+
681536################
682537# Main #
683538################
@@ -810,8 +665,6 @@ def interact(mydict=None,
810665 STARTUP_FILE = DEFAULT_STARTUP_FILE
811666 PRESTART_FILE = DEFAULT_PRESTART_FILE
812667
813- session_name = None
814-
815668 if argv is None :
816669 argv = sys .argv
817670
@@ -824,8 +677,6 @@ def interact(mydict=None,
824677 conf .fancy_banner = False
825678 conf .verb = 1
826679 conf .logLevel = logging .WARNING
827- elif opt == "-s" :
828- session_name = param
829680 elif opt == "-c" :
830681 STARTUP_FILE = param
831682 elif opt == "-C" :
@@ -857,7 +708,7 @@ def interact(mydict=None,
857708 default = DEFAULT_PRESTART ,
858709 )
859710
860- SESSION = init_session (session_name , mydict = mydict , ret = True )
711+ SESSION = init_session (mydict = mydict , ret = True )
861712
862713 if STARTUP_FILE :
863714 _read_config_file (
@@ -1094,9 +945,6 @@ def ptpython_configure(repl):
1094945 else :
1095946 raise ValueError ("Invalid conf.interactive_shell" )
1096947
1097- if conf .session :
1098- save_session (conf .session , SESSION )
1099-
1100948
1101949if __name__ == "__main__" :
1102950 interact ()
0 commit comments