From f3016aca7ca2742f118310d0ddb2dc87153e1b4a Mon Sep 17 00:00:00 2001 From: gpotter2 <gabriel@potter.fr> Date: Tue, 28 Feb 2017 21:38:32 +0100 Subject: [PATCH] Add pickling methods --- scapy/packet.py | 25 +++++++++++++++++++++++++ test/regression.uts | 21 +++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/scapy/packet.py b/scapy/packet.py index 90f238ee..eb8e265e 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 bd13bbef..0da39aa3 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") -- GitLab