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:
sport = tcp.getfieldval("sport")
dport = tcp.getfieldval("dport")
if sport == 9999 or dport == 9999:
anonymize_tplink(packet)
anonymize_tplink(tcp)
except:
pass
......@@ -40,14 +40,22 @@ def get_http_layer(packet: Packet) -> HTTP:
# HTTP layer could not be retrieved directly.
# 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()}")
......
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 = []
### 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:
packet (scapy.Packet): scapy packet to recompute checksums for
packet (scapy.Packet): scapy packet to rebuild
Returns:
(scapy.Packet): packet with recomputed checksums
scapy.Packet: rebuilt packet
"""
fields_to_delete = ["len", "chksum"]
for layer_class in packet.layers():
layer = packet.getlayer(layer_class)
try:
delattr(layer, "chksum")
except AttributeError:
pass
for field in fields_to_delete:
try:
delattr(layer, field)
except AttributeError:
pass
return packet.__class__(bytes(packet))
......@@ -53,7 +57,7 @@ def anonymize_packet(packet: Packet) -> None:
anonymize_app_layer(packet)
# Recompute packet checksums
packet = recompute_checksums(packet)
packet = rebuild_packet(packet)
packets.append(packet)
......
......@@ -17,5 +17,6 @@ def test_anonymize_tplink() -> None:
anonymize_tplink(packet)
# Check if payload was correctly deleted
assert packet.haslayer(TCP)
assert not packet.haslayer(Raw)
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