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

Can now edit one specific packet + Refactor

parent 9b22792c
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -7,6 +7,7 @@ import argparse ...@@ -7,6 +7,7 @@ import argparse
import random import random
import logging import logging
import csv import csv
from copy import deepcopy
import scapy.all as scapy import scapy.all as scapy
from scapy.layers import dhcp, dns, http from scapy.layers import dhcp, dns, http
from scapy.contrib import coap, igmp, igmpv3 from scapy.contrib import coap, igmp, igmpv3
...@@ -35,6 +36,8 @@ if __name__ == "__main__": ...@@ -35,6 +36,8 @@ if __name__ == "__main__":
parser.add_argument("-d", "--dry-run", action="store_true", help="Dry run: do not write output PCAP file.") parser.add_argument("-d", "--dry-run", action="store_true", help="Dry run: do not write output PCAP file.")
# Optional flag: -r / --random-range # Optional flag: -r / --random-range
parser.add_argument("-r", "--random-range", type=int, default=0, help="Upper bound for random range.") parser.add_argument("-r", "--random-range", type=int, default=0, help="Upper bound for random range.")
# Optional flag: -n
parser.add_argument("-n", "--packet-number", type=int, help="Index of the packet to edit.")
# Parse arguments # Parse arguments
args = parser.parse_args() args = parser.parse_args()
...@@ -49,7 +52,6 @@ if __name__ == "__main__": ...@@ -49,7 +52,6 @@ if __name__ == "__main__":
# Read input PCAP file # Read input PCAP file
packets = scapy.rdpcap(input_pcap) packets = scapy.rdpcap(input_pcap)
logging.info(f"Read input PCAP file: {input_pcap}") logging.info(f"Read input PCAP file: {input_pcap}")
new_packets = []
# Open log CSV file # Open log CSV file
csv_dir = os.path.join(input_dir, "csv") csv_dir = os.path.join(input_dir, "csv")
...@@ -61,31 +63,43 @@ if __name__ == "__main__": ...@@ -61,31 +63,43 @@ if __name__ == "__main__":
writer = csv.DictWriter(csv_file, fieldnames=field_names) writer = csv.DictWriter(csv_file, fieldnames=field_names)
writer.writeheader() writer.writeheader()
# Loop on packets if args.packet_number is not None:
i = 1 # Edit one specific packet
for packet in packets: packet = packets[args.packet_number - 1] # -1 because packet numbers start at 1
# Choose randomly if we edit this packet
if random.randint(0, args.random_range) != 0:
# Packet won't be edited
# Go to next packet
new_packets.append(packet)
i += 1
continue
# Edit packet, if possible
try: try:
my_packet = Packet.init_packet(packet, i) my_packet = Packet.init_packet(packet, args.packet_number)
except ValueError: except ValueError:
# No supported protocol found in packet, skip it # No supported protocol found in packet, skip it
new_packets.append(packet) pass
else: else:
d = my_packet.tweak() d = my_packet.tweak()
new_packets.append(my_packet.get_packet())
if d is not None: if d is not None:
writer.writerow(d) writer.writerow(d)
finally:
i += 1 else:
# Randomly edit packets
i = 1
for packet in packets:
# Choose randomly if we edit this packet
if random.randint(0, args.random_range) != 0:
# Packet won't be edited
# Go to next packet
i += 1
continue
# Edit packet, if possible
try:
my_packet = Packet.init_packet(packet, i)
except ValueError:
# No supported protocol found in packet, skip it
pass
else:
d = my_packet.tweak()
if d is not None:
writer.writerow(d)
finally:
i += 1
# Write output PCAP file # Write output PCAP file
output_dir = os.path.join(os.path.dirname(input_pcap), "edited") output_dir = os.path.join(os.path.dirname(input_pcap), "edited")
...@@ -95,5 +109,5 @@ if __name__ == "__main__": ...@@ -95,5 +109,5 @@ if __name__ == "__main__":
if args.dry_run: if args.dry_run:
logging.info(f"Dry run: did not write output PCAP file: {output_pcap}") logging.info(f"Dry run: did not write output PCAP file: {output_pcap}")
else: else:
scapy.wrpcap(output_pcap, new_packets) scapy.wrpcap(output_pcap, packets)
logging.info(f"Wrote output PCAP file: {output_pcap}") logging.info(f"Wrote output PCAP file: {output_pcap}")
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