diff --git a/scapy.py b/scapy.py index 9e90ed621cc70aa5eebab0d870de2efbcbc47f87..be97b9b779f04f4b8c461397710cba5c9e5e884a 100755 --- a/scapy.py +++ b/scapy.py @@ -5623,6 +5623,18 @@ Creates an EPS file describing a packet. If filename is not provided a temporary del(self.fields[k]) self.payload.hide_defaults() + def clone_with(self, payload=None, **kargs): + pkt = self.__class__() + pkt.explicit = 1 + pkt.fields = kargs + pkt.time = self.time + pkt.underlayer = self.underlayer + pkt.overload_fields = self.overload_fields.copy() + pkt.post_transforms = self.post_transforms + if payload is not None: + pkt.add_payload(payload) + return pkt + def __iter__(self): def loop(todo, done, self=self): @@ -5648,15 +5660,7 @@ Creates an EPS file describing a packet. If filename is not provided a temporary for k in done2: if isinstance(done2[k], VolatileValue): done2[k] = done2[k]._fix() - pkt = self.__class__() - pkt.explicit = 1 - pkt.fields = done2 - pkt.time = self.time - pkt.underlayer = self.underlayer - pkt.overload_fields = self.overload_fields.copy() - pkt.post_transforms = self.post_transforms - if payl is not None: - pkt.add_payload(payl) + pkt = self.clone_with(payload=payl, **done2) yield pkt if self.explicit: