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

Fix layer indices

parent 776c90d3
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -16,7 +16,7 @@ class IGMP(Packet):
0x11, # Membership Query
0x12, # Version 1 Membership Report
0x16, # Version 2 Membership Report
0x17, # Leave Group
0x17 # Leave Group
],
"gaddr": "ipv4"
}
from __future__ import annotations
from typing import Tuple
import importlib
import logging
import string
......@@ -77,7 +78,23 @@ class Packet:
elif version == 6:
return str(IPv6Address(random.randint(0, IPv6Address._ALL_ONES)))
else:
raise ValueError("Invalid IP version (should be 4 or 6).")
raise ValueError("Invalid IP version (should be 4 or 6).")
@staticmethod
def get_last_layer_index(packet: scapy.Packet) -> int:
"""
Get the index of the last layer of a Scapy packet.
:param packet: Scapy Packet.
:return: index of the last packet layer.
"""
i = 0
layer = packet.getlayer(i)
while layer is not None:
i += 1
layer = packet.getlayer(i)
return i - 1
@classmethod
......@@ -91,8 +108,8 @@ class Packet:
or generic Packet if protocol is not supported.
"""
# Try creating specific packet if possible
layers = packet.layers()
for i in range(len(layers)-1, -1, -1):
last_layer_index = Packet.get_last_layer_index(packet)
for i in range(last_layer_index, -1, -1):
layer = packet.getlayer(i)
try:
protocol = layer.name.replace(" ", "_")
......
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