From fe7240272f411d537f70252342eec803fb48bc48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20De=20Keersmaeker?=
 <francois.dekeersmaeker@uclouvain.be>
Date: Thu, 11 Jul 2024 11:14:11 +0200
Subject: [PATCH] Added files for Python package

---
 .ci_scripts/run-all-pcaps.sh                |  2 +-
 .gitignore                                  |  9 ++++++++
 pcap_fuzzer/__init__.py                     |  6 ++++++
 {src => pcap_fuzzer}/packet/ARP.py          |  2 +-
 {src => pcap_fuzzer}/packet/BOOTP.py        |  2 +-
 {src => pcap_fuzzer}/packet/CoAP.py         |  2 +-
 {src => pcap_fuzzer}/packet/DNS.py          |  2 +-
 {src => pcap_fuzzer}/packet/HTTP_Request.py |  2 +-
 {src => pcap_fuzzer}/packet/ICMP.py         |  2 +-
 {src => pcap_fuzzer}/packet/IGMP.py         |  2 +-
 {src => pcap_fuzzer}/packet/IGMPv3mr.py     |  2 +-
 {src => pcap_fuzzer}/packet/IPv4.py         |  2 +-
 {src => pcap_fuzzer}/packet/IPv6.py         |  2 +-
 {src => pcap_fuzzer}/packet/Packet.py       |  0
 {src => pcap_fuzzer}/packet/TCP.py          |  2 +-
 {src => pcap_fuzzer}/packet/Transport.py    |  2 +-
 {src => pcap_fuzzer}/packet/UDP.py          |  2 +-
 pcap_fuzzer/packet/__init__.py              |  3 +++
 {src => pcap_fuzzer}/packet/mDNS.py         |  2 +-
 {src => pcap_fuzzer}/pcap_fuzzer.py         |  0
 setup.py                                    | 24 +++++++++++++++++++++
 src/.gitignore                              |  1 -
 traces/.gitignore                           |  3 ++-
 23 files changed, 59 insertions(+), 17 deletions(-)
 create mode 100644 pcap_fuzzer/__init__.py
 rename {src => pcap_fuzzer}/packet/ARP.py (87%)
 rename {src => pcap_fuzzer}/packet/BOOTP.py (99%)
 rename {src => pcap_fuzzer}/packet/CoAP.py (99%)
 rename {src => pcap_fuzzer}/packet/DNS.py (99%)
 rename {src => pcap_fuzzer}/packet/HTTP_Request.py (91%)
 rename {src => pcap_fuzzer}/packet/ICMP.py (91%)
 rename {src => pcap_fuzzer}/packet/IGMP.py (91%)
 rename {src => pcap_fuzzer}/packet/IGMPv3mr.py (97%)
 rename {src => pcap_fuzzer}/packet/IPv4.py (82%)
 rename {src => pcap_fuzzer}/packet/IPv6.py (82%)
 rename {src => pcap_fuzzer}/packet/Packet.py (100%)
 rename {src => pcap_fuzzer}/packet/TCP.py (84%)
 rename {src => pcap_fuzzer}/packet/Transport.py (98%)
 rename {src => pcap_fuzzer}/packet/UDP.py (90%)
 create mode 100644 pcap_fuzzer/packet/__init__.py
 rename {src => pcap_fuzzer}/packet/mDNS.py (97%)
 rename {src => pcap_fuzzer}/pcap_fuzzer.py (100%)
 create mode 100644 setup.py
 delete mode 100644 src/.gitignore

diff --git a/.ci_scripts/run-all-pcaps.sh b/.ci_scripts/run-all-pcaps.sh
index 53446e7..a8c960e 100755
--- a/.ci_scripts/run-all-pcaps.sh
+++ b/.ci_scripts/run-all-pcaps.sh
@@ -5,7 +5,7 @@ EXITCODE=0
 for pcap in $GITHUB_WORKSPACE/traces/*.pcap
 do
     # Run pcap_fuzzer script on pcap file
-    python3 $GITHUB_WORKSPACE/src/pcap_fuzzer.py $pcap
+    python3 $GITHUB_WORKSPACE/pcap_fuzzer/pcap_fuzzer.py $pcap
     # If the exit code is not 0, set EXITCODE to 1
     if [[ $? -ne 0 ]]
     then
diff --git a/.gitignore b/.gitignore
index 292cb60..9a4d2f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,12 @@
+# Environment config directories
 .vscode
+
+# Python build directories
+__pycache__
+build
+dist
+*.egg-info
+
+# Temp files
 *.log
 csv
diff --git a/pcap_fuzzer/__init__.py b/pcap_fuzzer/__init__.py
new file mode 100644
index 0000000..866076d
--- /dev/null
+++ b/pcap_fuzzer/__init__.py
@@ -0,0 +1,6 @@
+"""
+Initialization script for package `pcap_fuzzer`.
+"""
+
+from packet import *
+from pcap_fuzzer import fuzz_pcaps
diff --git a/src/packet/ARP.py b/pcap_fuzzer/packet/ARP.py
similarity index 87%
rename from src/packet/ARP.py
rename to pcap_fuzzer/packet/ARP.py
index e037887..9bef286 100644
--- a/src/packet/ARP.py
+++ b/pcap_fuzzer/packet/ARP.py
@@ -1,4 +1,4 @@
-from packet.Packet import Packet
+from Packet import Packet
 
 class ARP(Packet):
 
diff --git a/src/packet/BOOTP.py b/pcap_fuzzer/packet/BOOTP.py
similarity index 99%
rename from src/packet/BOOTP.py
rename to pcap_fuzzer/packet/BOOTP.py
index a88730e..2d26baf 100644
--- a/src/packet/BOOTP.py
+++ b/pcap_fuzzer/packet/BOOTP.py
@@ -1,7 +1,7 @@
 from typing import Tuple
 import random
 import scapy.all as scapy
-from packet.Packet import Packet
+from Packet import Packet
 
 class BOOTP(Packet):
     """
diff --git a/src/packet/CoAP.py b/pcap_fuzzer/packet/CoAP.py
similarity index 99%
rename from src/packet/CoAP.py
rename to pcap_fuzzer/packet/CoAP.py
index b274a7d..67c45e0 100644
--- a/src/packet/CoAP.py
+++ b/pcap_fuzzer/packet/CoAP.py
@@ -1,5 +1,5 @@
 import random
-from packet.Packet import Packet
+from Packet import Packet
 
 class CoAP(Packet):
 
diff --git a/src/packet/DNS.py b/pcap_fuzzer/packet/DNS.py
similarity index 99%
rename from src/packet/DNS.py
rename to pcap_fuzzer/packet/DNS.py
index 2139740..abec9f1 100644
--- a/src/packet/DNS.py
+++ b/pcap_fuzzer/packet/DNS.py
@@ -1,6 +1,6 @@
 import random
 from scapy.layers import dns
-from packet.Packet import Packet
+from Packet import Packet
 
 class DNS(Packet):
 
diff --git a/src/packet/HTTP_Request.py b/pcap_fuzzer/packet/HTTP_Request.py
similarity index 91%
rename from src/packet/HTTP_Request.py
rename to pcap_fuzzer/packet/HTTP_Request.py
index 6d5665f..cb63ffd 100644
--- a/src/packet/HTTP_Request.py
+++ b/pcap_fuzzer/packet/HTTP_Request.py
@@ -1,4 +1,4 @@
-from packet.Packet import Packet
+from Packet import Packet
 
 class HTTP_Request(Packet):
 
diff --git a/src/packet/ICMP.py b/pcap_fuzzer/packet/ICMP.py
similarity index 91%
rename from src/packet/ICMP.py
rename to pcap_fuzzer/packet/ICMP.py
index 8d4879f..0554a20 100644
--- a/src/packet/ICMP.py
+++ b/pcap_fuzzer/packet/ICMP.py
@@ -1,4 +1,4 @@
-from packet.Packet import Packet
+from Packet import Packet
 
 class ICMP(Packet):
 
diff --git a/src/packet/IGMP.py b/pcap_fuzzer/packet/IGMP.py
similarity index 91%
rename from src/packet/IGMP.py
rename to pcap_fuzzer/packet/IGMP.py
index 0afe978..1d203e0 100644
--- a/src/packet/IGMP.py
+++ b/pcap_fuzzer/packet/IGMP.py
@@ -1,4 +1,4 @@
-from packet.Packet import Packet
+from Packet import Packet
 
 class IGMP(Packet):
     """
diff --git a/src/packet/IGMPv3mr.py b/pcap_fuzzer/packet/IGMPv3mr.py
similarity index 97%
rename from src/packet/IGMPv3mr.py
rename to pcap_fuzzer/packet/IGMPv3mr.py
index 482a665..1a38c83 100644
--- a/src/packet/IGMPv3mr.py
+++ b/pcap_fuzzer/packet/IGMPv3mr.py
@@ -1,4 +1,4 @@
-from packet.Packet import Packet
+from Packet import Packet
 
 class IGMPv3mr(Packet):
     """
diff --git a/src/packet/IPv4.py b/pcap_fuzzer/packet/IPv4.py
similarity index 82%
rename from src/packet/IPv4.py
rename to pcap_fuzzer/packet/IPv4.py
index 0636335..7bddcfa 100644
--- a/src/packet/IPv4.py
+++ b/pcap_fuzzer/packet/IPv4.py
@@ -1,4 +1,4 @@
-from packet.Packet import Packet
+from Packet import Packet
 
 class IPv4(Packet):
 
diff --git a/src/packet/IPv6.py b/pcap_fuzzer/packet/IPv6.py
similarity index 82%
rename from src/packet/IPv6.py
rename to pcap_fuzzer/packet/IPv6.py
index 0d8703a..00eda71 100644
--- a/src/packet/IPv6.py
+++ b/pcap_fuzzer/packet/IPv6.py
@@ -1,4 +1,4 @@
-from packet.Packet import Packet
+from Packet import Packet
 
 class IPv6(Packet):
 
diff --git a/src/packet/Packet.py b/pcap_fuzzer/packet/Packet.py
similarity index 100%
rename from src/packet/Packet.py
rename to pcap_fuzzer/packet/Packet.py
diff --git a/src/packet/TCP.py b/pcap_fuzzer/packet/TCP.py
similarity index 84%
rename from src/packet/TCP.py
rename to pcap_fuzzer/packet/TCP.py
index 0a19fed..325b4df 100644
--- a/src/packet/TCP.py
+++ b/pcap_fuzzer/packet/TCP.py
@@ -1,4 +1,4 @@
-from packet.Transport import Transport
+from Transport import Transport
 
 class TCP(Transport):
 
diff --git a/src/packet/Transport.py b/pcap_fuzzer/packet/Transport.py
similarity index 98%
rename from src/packet/Transport.py
rename to pcap_fuzzer/packet/Transport.py
index d6e1473..a0e203d 100644
--- a/src/packet/Transport.py
+++ b/pcap_fuzzer/packet/Transport.py
@@ -1,5 +1,5 @@
 import random
-from packet.Packet import Packet
+from Packet import Packet
 
 class Transport(Packet):
     """
diff --git a/src/packet/UDP.py b/pcap_fuzzer/packet/UDP.py
similarity index 90%
rename from src/packet/UDP.py
rename to pcap_fuzzer/packet/UDP.py
index c2e586b..b0a324e 100644
--- a/src/packet/UDP.py
+++ b/pcap_fuzzer/packet/UDP.py
@@ -1,4 +1,4 @@
-from packet.Transport import Transport
+from Transport import Transport
 
 class UDP(Transport):
 
diff --git a/pcap_fuzzer/packet/__init__.py b/pcap_fuzzer/packet/__init__.py
new file mode 100644
index 0000000..4db1f6e
--- /dev/null
+++ b/pcap_fuzzer/packet/__init__.py
@@ -0,0 +1,3 @@
+"""
+Initialization script for subpackage `packet`.
+"""
diff --git a/src/packet/mDNS.py b/pcap_fuzzer/packet/mDNS.py
similarity index 97%
rename from src/packet/mDNS.py
rename to pcap_fuzzer/packet/mDNS.py
index 55abe51..60e32b1 100644
--- a/src/packet/mDNS.py
+++ b/pcap_fuzzer/packet/mDNS.py
@@ -1,6 +1,6 @@
 import random
 import scapy.all as scapy
-from packet.DNS import DNS
+from DNS import DNS
 
 class mDNS(DNS):
 
diff --git a/src/pcap_fuzzer.py b/pcap_fuzzer/pcap_fuzzer.py
similarity index 100%
rename from src/pcap_fuzzer.py
rename to pcap_fuzzer/pcap_fuzzer.py
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..4bce13a
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,24 @@
+from setuptools import setup, find_packages
+
+setup(
+    name='pcap_fuzzer',
+    version='0.1.0',
+    author='François De Keersmaeker',
+    author_email='francois.dekeersmaeker@uclouvain.be',
+    description='Randomly edit packet fields in a PCAP file.',
+    long_description=open('README.md').read(),
+    long_description_content_type='text/markdown',
+    url='https://github.com/smart-home-network-security/pcap-fuzzer',
+    license='GPLv3+',
+    packages=find_packages(),
+    classifiers=[
+        'Programming Language :: Python :: 3',
+        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
+        'Operating System :: OS Independent',
+    ],
+    python_requires='>=3.7',
+    install_requires=[
+        'scapy',
+    ],
+    #test_suite='tests',
+)
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644
index bee8a64..0000000
--- a/src/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-__pycache__
diff --git a/traces/.gitignore b/traces/.gitignore
index 2057419..d69b968 100644
--- a/traces/.gitignore
+++ b/traces/.gitignore
@@ -1,2 +1,3 @@
+# Edited PCAP files
 edited
-*.edit.pcap
\ No newline at end of file
+*.edit.pcap
-- 
GitLab