Skip to content
Extraits de code Groupes Projets
Valider 69d23997 rédigé par François De Keersmaeker's avatar François De Keersmaeker
Parcourir les fichiers

Fix checksum and len fields update

parent 274de259
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -91,7 +91,7 @@ class BOOTP(Packet):
self.set_dhcp_option(field, new_value) # Set new value for field
# Update checksums
self.update_checksums()
self.update_fields()
# Return value: dictionary containing tweak information
return self.get_dict_log(field, old_value, new_value)
......@@ -101,7 +101,7 @@ class CoAP(Packet):
self.layer.setfieldval("options", result["new_options"])
# Update checksums
self.update_checksums()
self.update_fields()
# Return value: dictionary containing tweak information
return self.get_dict_log(field, old_value, new_value)
......@@ -110,7 +110,7 @@ class DNS(Packet):
question_record.setfieldval("qname", new_value_single)
# Update checksums
self.update_checksums()
self.update_fields()
# Return value: dictionary containing tweak information
return self.get_dict_log(field, old_value, new_value)
......@@ -33,14 +33,9 @@ class IGMPv3mr(Packet):
new_value += new_address
group.setfieldval("maddr", new_address)
i += 1
logging.info(f"Packet {self.id}: randomized all IGMPv3 group addresses.")
# Update checksums
del self.packet.getlayer("IGMPv3").chksum
del self.packet.getlayer("IP").len
del self.packet.getlayer("IP").chksum
self.packet = scapy.Ether(self.packet.build())
self.update_fields()
# Return value: dictionary containing tweak information
return self.get_dict_log("maddr", old_value, new_value)
......@@ -194,19 +194,29 @@ class Packet:
self.packet.time = timestamp
def update_checksums(self) -> None:
def update_fields(self) -> None:
"""
Update packet checksums, if needed.
Update checksum and length fields on all relevant layers,
and rebuild packet.
"""
if self.packet.haslayer("IP"):
ip_layer = self.packet.getlayer("IP")
ip_layer.delfieldval("len")
ip_layer.delfieldval("chksum")
transport_layer = self.packet.getlayer(2)
if hasattr(transport_layer, "len"):
transport_layer.delfieldval("len")
if hasattr(transport_layer, "chksum"):
transport_layer.delfieldval("chksum")
# Loop on all packet layers
i = 0
while True:
layer = self.packet.getlayer(i)
if layer is None:
break
# Delete checksum field
if hasattr(layer, "chksum") and layer.getfieldval("chksum") is not None:
layer.delfieldval("chksum")
# Delete length field
if hasattr(layer, "len") and layer.getfieldval("len") is not None:
layer.delfieldval("len")
i += 1
# Rebuild packet, to update deleted fields
self.rebuild()
......@@ -305,7 +315,7 @@ class Packet:
self.layer.setfieldval(field, new_value)
# Update checksums
self.update_checksums()
self.update_fields()
# Return value: dictionary containing tweak information
return self.get_dict_log(field, old_value, new_value)
......@@ -50,7 +50,7 @@ class Transport(Packet):
self.layer.setfieldval(field, new_value)
# Update checksums, if needed
self.update_checksums()
self.update_fields()
# Return value: dictionary containing tweak information
return self.get_dict_log(field, old_value, new_value)
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter