Skip to content
Snippets Groups Projects
Commit 597f30be authored by Guillaume Valadon's avatar Guillaume Valadon Committed by GitHub
Browse files

Merge pull request #537 from gpotter2/pickling-error

[Pickling] Add packets pickling support
parents 9c7584c4 51dc8bf1
No related branches found
No related tags found
No related merge requests found
......@@ -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"
......
......@@ -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:
......
......@@ -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
......
......@@ -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")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment