12
12
import code
13
13
import getopt
14
14
import glob
15
- import gzip
16
15
import importlib
17
16
import io
18
17
import logging
19
18
import os
20
19
import pathlib
21
- import pickle
22
20
import shutil
23
21
import sys
24
- import types
25
22
import warnings
26
23
27
24
from itertools import zip_longest
@@ -260,7 +257,7 @@ def _validate_local(k):
260
257
def _usage ():
261
258
# type: () -> None
262
259
print (
263
- "Usage: scapy.py [-s sessionfile] [- c new_startup_file] "
260
+ "Usage: scapy.py [-c new_startup_file] "
264
261
"[-p new_prestart_file] [-C] [-P] [-H]\n "
265
262
"Args:\n "
266
263
"\t -H: header-less start\n "
@@ -494,178 +491,35 @@ def _scapy_exts():
494
491
return res
495
492
496
493
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
-
604
494
@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]]
607
496
ret , # type: Literal[True]
608
497
):
609
498
# type: (...) -> Dict[str, Any]
610
499
pass
611
500
612
501
613
502
@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]]
616
504
ret = False , # type: Literal[False]
617
505
):
618
506
# type: (...) -> None
619
507
pass
620
508
621
509
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]]
624
511
ret = False , # type: bool
625
512
):
626
513
# type: (...) -> Union[Dict[str, Any], None]
627
514
from scapy .config import conf
628
- SESSION = {} # type: Optional[Dict[str, Any]]
629
515
630
516
# Load Scapy
631
517
scapy_builtins = _scapy_builtins ()
632
518
633
519
# Load exts
634
520
scapy_builtins .update (_scapy_exts ())
635
521
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]
669
523
670
524
SESSION .update (scapy_builtins )
671
525
SESSION ["_scpybuiltins" ] = scapy_builtins .keys ()
@@ -678,6 +532,7 @@ def init_session(session_name, # type: Optional[Union[str, None]]
678
532
return SESSION
679
533
return None
680
534
535
+
681
536
################
682
537
# Main #
683
538
################
@@ -810,8 +665,6 @@ def interact(mydict=None,
810
665
STARTUP_FILE = DEFAULT_STARTUP_FILE
811
666
PRESTART_FILE = DEFAULT_PRESTART_FILE
812
667
813
- session_name = None
814
-
815
668
if argv is None :
816
669
argv = sys .argv
817
670
@@ -824,8 +677,6 @@ def interact(mydict=None,
824
677
conf .fancy_banner = False
825
678
conf .verb = 1
826
679
conf .logLevel = logging .WARNING
827
- elif opt == "-s" :
828
- session_name = param
829
680
elif opt == "-c" :
830
681
STARTUP_FILE = param
831
682
elif opt == "-C" :
@@ -857,7 +708,7 @@ def interact(mydict=None,
857
708
default = DEFAULT_PRESTART ,
858
709
)
859
710
860
- SESSION = init_session (session_name , mydict = mydict , ret = True )
711
+ SESSION = init_session (mydict = mydict , ret = True )
861
712
862
713
if STARTUP_FILE :
863
714
_read_config_file (
@@ -1090,13 +941,10 @@ def ptpython_configure(repl):
1090
941
)
1091
942
# Start Python
1092
943
elif conf .interactive_shell == "python" :
1093
- code .interact (banner = banner_text , local = SESSION )
944
+ code .interact (banner = banner_text )
1094
945
else :
1095
946
raise ValueError ("Invalid conf.interactive_shell" )
1096
947
1097
- if conf .session :
1098
- save_session (conf .session , SESSION )
1099
-
1100
948
1101
949
if __name__ == "__main__" :
1102
950
interact ()
0 commit comments