diff --git a/scapy/contrib/gtp.uts b/scapy/contrib/gtp.uts index 9d4da9df4698d895babc1ad15555feb7bc1e679c..661f03f32b61aed13b9310100154be0adf9152af 100644 --- a/scapy/contrib/gtp.uts +++ b/scapy/contrib/gtp.uts @@ -10,8 +10,8 @@ gtp = IP()/UDP(dport=2123)/GTPHeader(teid=2807)/GTPCreatePDPContextRequest() gtp.dport == 2123 and gtp.teid == 2807 and len(gtp.IE_list) == 5 = GTPCreatePDPContextRequest(), basic dissection -random.seed(2807) -str(gtp) == "E\x00\x00O\x00\x01\x00\x00@\x11|\x9b\x7f\x00\x00\x01\x7f\x00\x00\x01\x08K\x08K\x00;\xb9{2\x10\x00+\x00\x00\n\xf7\x8d\x9e\x00\x00\x10\xa6\xb2\xdc.\x14\t\x85\x00\x04\x83~:N\x85\x00\x04\xe0^\x96\xe7\x87\x00\x0fRmhqmG3QvzvsT3G" +random.seed(0x2807) +str(gtp) == "E\x00\x00O\x00\x01\x00\x00@\x11|\x9b\x7f\x00\x00\x01\x7f\x00\x00\x01\x08K\x08K\x00;{N2\x10\x00+\x00\x00\n\xf7\xd2y\x00\x00\x10\xf8>\x14\x05\x14\t\x85\x00\x04\xa6A\xd8+\x85\x00\x04z\xafnt\x87\x00\x0fxKbPaePK9oq0pb5" = GTPV1UpdatePDPContextRequest(), dissect h = "3333333333332222222222228100a38408004588006800000000fd1134820a2a00010a2a00024aa5084b005408bb32120044ed99aea9386f0000100000530514058500040a2a00018500040a2a000187000c0213921f739680fe74f2ffff94000130970001019800080112f41004d204d29900024000b6000101" diff --git a/scapy/main.py b/scapy/main.py index ef99e6db8f3292c17404198cc4bf1cfc273671f8..1b857f140450a85ed67c26b6fecc0f3ced0bee25 100644 --- a/scapy/main.py +++ b/scapy/main.py @@ -321,7 +321,7 @@ def interact(mydict=None,argv=None,mybanner=None,loglevel=20): STARTUP_FILE = DEFAULT_STARTUP_FILE PRESTART_FILE = DEFAULT_PRESTART_FILE - session_name = "" + session_name = None try: opts=getopt.getopt(argv[1:], "hs:Cc:Pp:d") @@ -356,7 +356,7 @@ def interact(mydict=None,argv=None,mybanner=None,loglevel=20): if PRESTART_FILE: _read_config_file(PRESTART_FILE) - init_session(None, mydict) + init_session(session_name, mydict) if READLINE: if conf.histfile: diff --git a/scapy/packet.py b/scapy/packet.py index 90f238eee4b6dcef4d3f31169e210ae78a3aaf31..eb8e265e3f0831477b74f301d39cb37148f53fcb 100644 --- a/scapy/packet.py +++ b/scapy/packet.py @@ -73,6 +73,31 @@ class Packet(BasePacket): for lower,fval in self._overload_fields.iteritems(): print "%-20s %s" % (lower.__name__, ", ".join("%-12s" % ("%s=%r"%i) for i in fval.iteritems())) + def _unpickle(self, dlist): + """Used to unpack pickling""" + self.__init__("".join(dlist)) + return self + + def __reduce__(self): + """Used by pickling methods""" + return (self.__class__, (), (self.build(),)) + + def __reduce_ex__(self, proto): + """Used by pickling methods""" + return self.__reduce__() + + def __getstate__(self): + """Mark object as pickable""" + return self.__reduce__()[2] + + def __setstate__(self, state): + """Rebuild state using pickable methods""" + return self._unpickle(state) + + def __deepcopy__(self, memo): + """Used by copy.deepcopy""" + return self.copy() + def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields): self.time = time.time() self.sent_time = None diff --git a/test/regression.uts b/test/regression.uts index bd13bbefe2dedc8940d2c4a31081785df9b32697..0da39aa3a932165e569956f68573df5247d23b77 100644 --- a/test/regression.uts +++ b/test/regression.uts @@ -154,6 +154,27 @@ data = ["init_session(\"scapySession2\")",\ emulate_main_input(data) += Test pickling with packets + +data = ["init_session(\"scapySession1\")",\ +"test_value = IP(src=\"127.0.0.1\", dst=\"8.8.8.8\")",\ +"test_value2 = ICMPv6EchoReply(data=\"testData@%!\")",\ +"save_session()",\ +"del test_value",\ +"load_session()",\ +"assert test_value.src == \"127.0.0.1\"",\ +"assert test_value.dst == \"8.8.8.8\"",\ +"assert test_value2.data == \"testData@%!\""] + +emulate_main_input(data) + += Clean up session files + +try: + os.remove("scapySaveSession.dat") +except OSError: + pass + = Test utility functions tmpfile = get_temp_file(autoext=".ut")