From fcface946ba9bd0c0821274f02250ecd006c314d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20De=20Keersmaeker?=
 <francois.dekeersmaeker@uclouvain.be>
Date: Fri, 12 Jul 2024 14:44:16 +0200
Subject: [PATCH] Funtion fuzz_pcaps can now take a single file as parameter

---
 .gitignore                 |  3 +++
 pcap_fuzzer/pcap_fuzzer.py | 11 ++++++++++-
 setup.py                   |  2 +-
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index 9a4d2f0..9934f00 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,6 @@ dist
 # Temp files
 *.log
 csv
+
+# Package build script
+build_and_publish.sh
diff --git a/pcap_fuzzer/pcap_fuzzer.py b/pcap_fuzzer/pcap_fuzzer.py
index f8ddfdd..0a4e3f2 100644
--- a/pcap_fuzzer/pcap_fuzzer.py
+++ b/pcap_fuzzer/pcap_fuzzer.py
@@ -2,14 +2,18 @@
 Randomly edit packet fields in a PCAP file.
 """
 
+## Import libraries
 import os
 import argparse
+from typing import Union
 import random
 import logging
 import csv
+# Scapy libraries
 import scapy.all as scapy
 from scapy.layers import dhcp, dns, http
 from scapy.contrib import coap, igmp, igmpv3
+# Custom Packet utilities
 from packet.Packet import Packet
 
 
@@ -45,7 +49,7 @@ def must_edit_packet(i: int, packet_numbers: list, random_range: int) -> bool:
     return is_specified or is_random
 
 
-def fuzz_pcaps(pcaps: list, output: str, random_range: int = 1, packet_numbers: list = None, dry_run: bool = False) -> None:
+def fuzz_pcaps(pcaps: Union[str, list], output: str, random_range: int = 1, packet_numbers: list = None, dry_run: bool = False) -> None:
     """
     Main functionality of the program:
     (Randomly) edit packet fields in a (list of) PCAP file(s).
@@ -56,6 +60,8 @@ def fuzz_pcaps(pcaps: list, output: str, random_range: int = 1, packet_numbers:
     :param packet_numbers: list of packet numbers to edit (starting from 1)
     :param dry_run: if True, do not write output PCAP file
     """
+    # If input PCAP is a single file, convert to list of one element
+    pcaps = [pcaps] if isinstance(pcaps) != list else pcaps
     
     # Loop on given input PCAP files
     for input_pcap in pcaps:
@@ -160,6 +166,9 @@ if __name__ == "__main__":
     if args.output is not None and len(args.input_pcaps) > 1:
         logging.warning("Multiple input PCAP files specified, ignoring output PCAP file name.")
 
+    print(args.input_pcaps)
+    exit()
+
 
     ### MAIN PROGRAM ###
     fuzz_pcaps(
diff --git a/setup.py b/setup.py
index 4bce13a..85d1eac 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
 
 setup(
     name='pcap_fuzzer',
-    version='0.1.0',
+    version='0.2.0',
     author='François De Keersmaeker',
     author_email='francois.dekeersmaeker@uclouvain.be',
     description='Randomly edit packet fields in a PCAP file.',
-- 
GitLab