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

Fixed bugs: TP-Link SH + packet rebuild

parent 4c5c9d32
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #60892 annulé
...@@ -36,6 +36,6 @@ def anonymize_app_layer(packet: Packet) -> None: ...@@ -36,6 +36,6 @@ def anonymize_app_layer(packet: Packet) -> None:
sport = tcp.getfieldval("sport") sport = tcp.getfieldval("sport")
dport = tcp.getfieldval("dport") dport = tcp.getfieldval("dport")
if sport == 9999 or dport == 9999: if sport == 9999 or dport == 9999:
anonymize_tplink(packet) anonymize_tplink(tcp)
except: except:
pass pass
...@@ -40,14 +40,22 @@ def get_http_layer(packet: Packet) -> HTTP: ...@@ -40,14 +40,22 @@ def get_http_layer(packet: Packet) -> HTTP:
# HTTP layer could not be retrieved directly. # HTTP layer could not be retrieved directly.
# Try to get it from the Raw layer. # Try to get it from the Raw layer.
raw_load = packet.getlayer(Raw).getfieldval("load")
http = HTTPRequest(raw_load)
if http.haslayer(HTTPRequest):
return http
http = HTTPResponse(raw_load)
if http.haslayer(HTTPResponse):
return http
raw_load = packet.getlayer(Raw).getfieldval("load")
try:
http = HTTPRequest(raw_load)
if http.haslayer(HTTPRequest):
return http
except ValueError:
pass
try:
http = HTTPResponse(raw_load)
if http.haslayer(HTTPResponse):
return http
except ValueError:
pass
raise AttributeError(f"HTTP layer not found in packet {packet.summary()}") raise AttributeError(f"HTTP layer not found in packet {packet.summary()}")
......
import os
import argparse
from .pcap_anonymize import anonymize_pcap
def main() -> None:
"""
Main function for the CLI.
"""
parser = argparse.ArgumentParser(description="Anonymize a PCAP traffic capture.")
parser.add_argument("input", type=os.PathLike, help="Path to the input PCAP file.")
parser.add_argument("-o", "--output", type=os.PathLike, help="Path to the output PCAP file.")
args = parser.parse_args()
anonymize_pcap(args.input, args.output)
...@@ -17,21 +17,25 @@ packets = [] ...@@ -17,21 +17,25 @@ packets = []
### FUNCTIONS ### ### FUNCTIONS ###
def recompute_checksums(packet: Packet) -> Packet: def rebuild_packet(packet: Packet) -> Packet:
""" """
Recompute a given packet's checksums. Rebuild a packet:
recompute its lengths and checksums.
Args: Args:
packet (scapy.Packet): scapy packet to recompute checksums for packet (scapy.Packet): scapy packet to rebuild
Returns: Returns:
(scapy.Packet): packet with recomputed checksums scapy.Packet: rebuilt packet
""" """
fields_to_delete = ["len", "chksum"]
for layer_class in packet.layers(): for layer_class in packet.layers():
layer = packet.getlayer(layer_class) layer = packet.getlayer(layer_class)
try: for field in fields_to_delete:
delattr(layer, "chksum") try:
except AttributeError: delattr(layer, field)
pass except AttributeError:
pass
return packet.__class__(bytes(packet)) return packet.__class__(bytes(packet))
...@@ -53,7 +57,7 @@ def anonymize_packet(packet: Packet) -> None: ...@@ -53,7 +57,7 @@ def anonymize_packet(packet: Packet) -> None:
anonymize_app_layer(packet) anonymize_app_layer(packet)
# Recompute packet checksums # Recompute packet checksums
packet = recompute_checksums(packet) packet = rebuild_packet(packet)
packets.append(packet) packets.append(packet)
......
...@@ -17,5 +17,6 @@ def test_anonymize_tplink() -> None: ...@@ -17,5 +17,6 @@ def test_anonymize_tplink() -> None:
anonymize_tplink(packet) anonymize_tplink(packet)
# Check if payload was correctly deleted # Check if payload was correctly deleted
assert packet.haslayer(TCP)
assert not packet.haslayer(Raw) assert not packet.haslayer(Raw)
assert not hasattr(packet, "load") assert not hasattr(packet, "load")
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