@@ -2618,24 +2618,24 @@ def _up_pkt(self, pkt):
26182618 # Since the connection-oriented transport guarantees sequentiality, the receiver
26192619 # will always receive the fragments in order.
26202620
2621- def _defragment (self , pkt ):
2621+ def _defragment (self , pkt , body = None ):
26222622 """
26232623 Function to defragment DCE/RPC packets.
26242624 """
26252625 uid = pkt .call_id
26262626 if pkt .pfc_flags .PFC_FIRST_FRAG and pkt .pfc_flags .PFC_LAST_FRAG :
26272627 # Not fragmented
2628- return pkt
2628+ return body
26292629 if pkt .pfc_flags .PFC_FIRST_FRAG or uid in self .frags :
26302630 # Packet is fragmented
2631- self .frags [uid ] += pkt [DceRpc5 ].payload .payload .original
2631+ if body is None :
2632+ body = pkt [DceRpc5 ].payload .payload .original
2633+ self .frags [uid ] += body
26322634 if pkt .pfc_flags .PFC_LAST_FRAG :
2633- pkt [DceRpc5 ].payload .remove_payload ()
2634- pkt [DceRpc5 ].payload /= self .frags [uid ]
2635- return pkt
2635+ return self .frags [uid ]
26362636 else :
26372637 # Not fragmented
2638- return pkt
2638+ return body
26392639
26402640 def _fragment (self , pkt ):
26412641 """
@@ -2660,12 +2660,6 @@ def _fragment(self, pkt):
26602660 # Similarly the signature output SHOULD be ignored.
26612661
26622662 def in_pkt (self , pkt ):
2663- # Defragment
2664- pkt = self ._defragment (pkt )
2665- if not pkt :
2666- return
2667- # Get opnum and options
2668- opnum , opts = self ._up_pkt (pkt )
26692663 # Check for encrypted payloads
26702664 body = None
26712665 if conf .raw_layer in pkt .payload :
@@ -2787,6 +2781,13 @@ def in_pkt(self, pkt):
27872781 if pkt .vt_trailer :
27882782 vtlen = len (pkt .vt_trailer )
27892783 body , pkt .vt_trailer = body [:- vtlen ], body [- vtlen :]
2784+ # Defragment
2785+ if body :
2786+ body = self ._defragment (pkt , body )
2787+ if not body :
2788+ return
2789+ # Get opnum and options
2790+ opnum , opts = self ._up_pkt (pkt )
27902791 # Try to parse the payload
27912792 if opnum is not None and self .rpc_bind_interface :
27922793 # use opnum to parse the payload
0 commit comments