From 274de25956e5b497ca9caee93b68ab269c84f5d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20De=20Keersmaeker?=
 <francois.dekeersmaeker@uclouvain.be>
Date: Wed, 31 May 2023 14:25:37 +0200
Subject: [PATCH] Keep old timestamp when rebuilding packet

---
 src/packet/Packet.py |  6 ++++--
 src/pcap_tweaker.py  | 10 +++++++---
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/packet/Packet.py b/src/packet/Packet.py
index 71f6143..9c60a96 100644
--- a/src/packet/Packet.py
+++ b/src/packet/Packet.py
@@ -187,9 +187,11 @@ class Packet:
 
     def rebuild(self) -> None:
         """
-        Rebuild packet.
+        Rebuild packet, but keep old timestamp.
         """
+        timestamp = self.packet.time
         self.packet = self.packet.__class__(bytes(self.packet))
+        self.packet.time = timestamp
     
 
     def update_checksums(self) -> None:
@@ -302,7 +304,7 @@ class Packet:
         # Set new value for field
         self.layer.setfieldval(field, new_value)
 
-        # Update checksums, if needed
+        # Update checksums
         self.update_checksums()
 
         # Return value: dictionary containing tweak information
diff --git a/src/pcap_tweaker.py b/src/pcap_tweaker.py
index 16dbd65..d42f28e 100644
--- a/src/pcap_tweaker.py
+++ b/src/pcap_tweaker.py
@@ -47,12 +47,16 @@ def must_edit_packet(i: int, packet_numbers: list, random_range: int) -> bool:
 
 def rebuild_packet(packet: scapy.Packet) -> scapy.Packet:
     """
-    Rebuild a Scapy packet from its bytes representation.
+    Rebuild a Scapy packet from its bytes representation,
+    but keep its old timestamp.
 
     :param packet: Scapy packet
-    :return: Rebuilt Scapy packet
+    :return: Rebuilt Scapy packet, with old timestamp
     """
-    return packet.__class__(bytes(packet))
+    timestamp = packet.time
+    new_packet = packet.__class__(bytes(packet))
+    new_packet.time = timestamp
+    return new_packet
 
 
 def tweak_pcaps(pcaps: list, output: str, random_range: int = 1, packet_numbers: list = None, dry_run: bool = False) -> None:
-- 
GitLab