mirror of https://github.com/secdev/scapy.git
- moved payload building from Packet.do_build() to Packet.build()
- added post build transform logic so that transformation functions can be applied to a freshly assembled layer
This commit is contained in:
parent
3bb4aa0621
commit
e18e371aa7
24
scapy.py
24
scapy.py
|
@ -21,6 +21,11 @@
|
||||||
|
|
||||||
#
|
#
|
||||||
# $Log: scapy.py,v $
|
# $Log: scapy.py,v $
|
||||||
|
# Revision 1.0.4.86 2006/09/23 19:36:30 pbi
|
||||||
|
# - moved payload building from Packet.do_build() to Packet.build()
|
||||||
|
# - added post build transform logic so that transformation functions can be applied
|
||||||
|
# to a freshly assembled layer
|
||||||
|
#
|
||||||
# Revision 1.0.4.85 2006/09/23 06:54:37 pbi
|
# Revision 1.0.4.85 2006/09/23 06:54:37 pbi
|
||||||
# - modified MutatedBytes/MutatedBits way of working
|
# - modified MutatedBytes/MutatedBits way of working
|
||||||
# - renamed them CorruptedBytes/CorruptedBits
|
# - renamed them CorruptedBytes/CorruptedBits
|
||||||
|
@ -1655,7 +1660,7 @@
|
||||||
|
|
||||||
from __future__ import generators
|
from __future__ import generators
|
||||||
|
|
||||||
RCSID="$Id: scapy.py,v 1.0.4.85 2006/09/23 06:54:37 pbi Exp $"
|
RCSID="$Id: scapy.py,v 1.0.4.86 2006/09/23 19:36:30 pbi Exp $"
|
||||||
|
|
||||||
VERSION = RCSID.split()[2]+"beta"
|
VERSION = RCSID.split()[2]+"beta"
|
||||||
|
|
||||||
|
@ -4979,7 +4984,7 @@ class Packet(Gen):
|
||||||
from_hexcap = classmethod(from_hexcap)
|
from_hexcap = classmethod(from_hexcap)
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, _pkt="", _internal=0, _underlayer=None, **fields):
|
def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
|
||||||
self.time = time.time()
|
self.time = time.time()
|
||||||
self.aliastypes = [ self.__class__ ] + self.aliastypes
|
self.aliastypes = [ self.__class__ ] + self.aliastypes
|
||||||
self.default_fields = {}
|
self.default_fields = {}
|
||||||
|
@ -5001,6 +5006,12 @@ class Packet(Gen):
|
||||||
self.dissection_done(self)
|
self.dissection_done(self)
|
||||||
for f in fields.keys():
|
for f in fields.keys():
|
||||||
self.fields[f] = self.fieldtype[f].any2i(self,fields[f])
|
self.fields[f] = self.fieldtype[f].any2i(self,fields[f])
|
||||||
|
if type(post_transform) is list:
|
||||||
|
self.post_transforms = post_transform
|
||||||
|
elif post_transform is None:
|
||||||
|
self.post_transforms = []
|
||||||
|
else:
|
||||||
|
self.post_transforms = [post_transform]
|
||||||
|
|
||||||
def dissection_done(self,pkt):
|
def dissection_done(self,pkt):
|
||||||
"""DEV: will be called after a dissection is completed"""
|
"""DEV: will be called after a dissection is completed"""
|
||||||
|
@ -5050,6 +5061,7 @@ class Packet(Gen):
|
||||||
clone.overloaded_fields = self.overloaded_fields.copy()
|
clone.overloaded_fields = self.overloaded_fields.copy()
|
||||||
clone.overload_fields = self.overload_fields.copy()
|
clone.overload_fields = self.overload_fields.copy()
|
||||||
clone.underlayer=self.underlayer
|
clone.underlayer=self.underlayer
|
||||||
|
clone.post_transforms=self.post_transforms[:]
|
||||||
clone.__dict__["payload"] = self.payload.copy()
|
clone.__dict__["payload"] = self.payload.copy()
|
||||||
clone.payload.add_underlayer(clone)
|
clone.payload.add_underlayer(clone)
|
||||||
return clone
|
return clone
|
||||||
|
@ -5160,14 +5172,17 @@ class Packet(Gen):
|
||||||
p=""
|
p=""
|
||||||
for f in self.fields_desc:
|
for f in self.fields_desc:
|
||||||
p = f.addfield(self, p, self.getfieldval(f))
|
p = f.addfield(self, p, self.getfieldval(f))
|
||||||
return p, self.payload.build(internal=1)
|
return p
|
||||||
|
|
||||||
def post_build(self, pkt, pay):
|
def post_build(self, pkt, pay):
|
||||||
"""DEV: called right after the current layer is build."""
|
"""DEV: called right after the current layer is build."""
|
||||||
return pkt+pay
|
return pkt+pay
|
||||||
|
|
||||||
def build(self,internal=0):
|
def build(self,internal=0):
|
||||||
pkt,pay=self.do_build()
|
pkt = self.do_build()
|
||||||
|
for t in self.post_transforms:
|
||||||
|
pkt = t(pkt)
|
||||||
|
pay = self.payload.build(internal=1)
|
||||||
try:
|
try:
|
||||||
p = self.post_build(pkt,pay)
|
p = self.post_build(pkt,pay)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
|
@ -5483,6 +5498,7 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
|
||||||
pkt.time = self.time
|
pkt.time = self.time
|
||||||
pkt.underlayer = self.underlayer
|
pkt.underlayer = self.underlayer
|
||||||
pkt.overload_fields = self.overload_fields.copy()
|
pkt.overload_fields = self.overload_fields.copy()
|
||||||
|
pkt.post_transforms = self.post_transforms
|
||||||
if payl is None:
|
if payl is None:
|
||||||
yield pkt
|
yield pkt
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue