diff --git a/.idea/misc.xml b/.idea/misc.xml
index 2a01189..0ea184e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,5 +3,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/webResources.xml b/.idea/webResources.xml
new file mode 100644
index 0000000..aa647dc
--- /dev/null
+++ b/.idea/webResources.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 8828afc..1b59c65 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,7 +4,29 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -21,7 +43,7 @@
@@ -42,9 +64,12 @@
"ASKED_ADD_EXTERNAL_FILES": "true",
"ASKED_MARK_IGNORED_FILES_AS_EXCLUDED": "true",
"ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "Python.__init__.executor": "Run",
+ "Python.__main__.executor": "Run",
"Python.main.executor": "Run",
"RunOnceActivity.ShowReadmeOnStart": "true",
- "git-widget-placeholder": "devel",
+ "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "git-widget-placeholder": "main",
"last_opened_file_path": "/home/slnopriv/projects/2024-bsc-sebastian-lenzlinger/code/kydcap/utils/device_metadata_utils.py",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
@@ -64,6 +89,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -83,7 +165,7 @@
-
+
@@ -109,19 +191,90 @@
1714616343905
-
+
+
+ 1714617162903
+
+
+
+ 1714617162903
+
+
+
+ 1714617231842
+
+
+
+ 1714617231842
+
+
+
+ 1714617266799
+
+
+
+ 1714617266799
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
+
\ No newline at end of file
diff --git a/archive/metadata_utils.py b/archive/metadata_utils.py
index 3630093..770fe63 100644
--- a/archive/metadata_utils.py
+++ b/archive/metadata_utils.py
@@ -3,7 +3,7 @@ from pathlib import Path
from pydantic import BaseModel
-from kydcap.models.device_metadata import DeviceMetadata
+from kydcap.models.device_metadata_model import DeviceMetadata
from kydcap.config import DEVICE_METADATA_FILE
diff --git a/code/kydcap/main.py b/code/kydcap/__main__.py
similarity index 53%
rename from code/kydcap/main.py
rename to code/kydcap/__main__.py
index f2e864a..773ed35 100644
--- a/code/kydcap/main.py
+++ b/code/kydcap/__main__.py
@@ -1,7 +1,8 @@
#!/usr/bin/env python3
import argparse
-from subcommands.sniff import setup_sniff_parser
+from kydcap.subcommands.sniff import setup_sniff_parser
+from kydcap.subcommands.initialize_device_root_dir import setup_init_root_dir_parser
CAP_DIR_PREFIX = ...
@@ -15,12 +16,25 @@ def setup_argparse():
subparsers = root_parser.add_subparsers(title="subcommands", required=True, dest="command")
setup_sniff_parser(subparsers)
+ setup_init_root_dir_parser(subparsers)
return root_parser
-if __name__ == "__main__":
+def main():
parser = setup_argparse()
args = parser.parse_args()
- # if args.command
+ print(args)
+ if args.command:
+ try:
+ args.func(args)
+ except KeyboardInterrupt:
+ print("Received keyboard interrupt. Exiting...")
+ exit(1)
+ except Exception as e:
+ print(f"Error: {e}")
# create_capture_directory(args.device_name)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/code/kydcap/config.py b/code/kydcap/config.py
index 683b016..e39c53c 100644
--- a/code/kydcap/config.py
+++ b/code/kydcap/config.py
@@ -1,6 +1,7 @@
from datetime import datetime
from enum import Flag, unique, global_enum
+
DEVICE_METADATA_FILE = "device-metadata.json"
CAPTURE_METADATA_FILE = "capture-metadata.json"
TODAY_DATE_STRING = datetime.now().strftime("%d%b%Y").lower()
diff --git a/code/kydcap/models/capture_metadata.py b/code/kydcap/models/capture_metadata_model.py
similarity index 100%
rename from code/kydcap/models/capture_metadata.py
rename to code/kydcap/models/capture_metadata_model.py
diff --git a/code/kydcap/models/device_metadata.py b/code/kydcap/models/device_metadata_model.py
similarity index 100%
rename from code/kydcap/models/device_metadata.py
rename to code/kydcap/models/device_metadata_model.py
diff --git a/code/kydcap/subcommands/__init__.py b/code/kydcap/subcommands/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/kydcap/subcommands/initialize_device_root_dir.py b/code/kydcap/subcommands/initialize_device_root_dir.py
index ecbb8ad..88f4ef3 100644
--- a/code/kydcap/subcommands/initialize_device_root_dir.py
+++ b/code/kydcap/subcommands/initialize_device_root_dir.py
@@ -1,19 +1,20 @@
import pathlib
from kydcap.config import DEVICE_METADATA_FILE
-from kydcap.models.device_metadata import DeviceMetadata
+from kydcap.models.device_metadata_model import DeviceMetadata
def setup_init_root_dir_parser(subparsers):
parser = subparsers.add_parser("init-device-root", aliases=["idr"])
- parser.add_argument("root_dir", type=pathlib.Path, default=pathlib.Path.cwd())
+ parser.add_argument("--root_dir", type=pathlib.Path, default=pathlib.Path.cwd())
group = parser.add_mutually_exclusive_group()
- group.add_argument("--dynamic", action="store_false", help="enable guided setup")
- group.add_argument("-n", "--name", action="store", required=True, type=str, help="name of device")
+ group.add_argument("--dynamic", action="store_true", help="enable guided setup", default=False)
+ group.add_argument("-n", "--name", action="store", type=str, help="name of device")
parser.set_defaults(func=handle_idr)
def handle_idr(args):
+ print("Entered kydcap initialize-device-root")
root_dir = args.root_dir
device_name = None
if args.dynamic:
diff --git a/code/kydcap/subcommands/sniff.py b/code/kydcap/subcommands/sniff.py
index b2446ce..a84600e 100644
--- a/code/kydcap/subcommands/sniff.py
+++ b/code/kydcap/subcommands/sniff.py
@@ -2,7 +2,7 @@ import subprocess
from pathlib import Path
from kydcap.config import *
-from kydcap.models.device_metadata import DeviceMetadata
+from kydcap.models.device_metadata_model import DeviceMetadata
def setup_sniff_parser(subparsers):
@@ -85,7 +85,18 @@ def handle_sniff(args):
pass
print('Executing: ' + ' '.join(cmd))
# TODO maybe dump this into file -> put into device metadata
- start_time = datetime.now().strftime('%H:%M:%S')
- subprocess.run(cmd)
- stop_time = datetime.now().strftime('%H:%M:%S')
+ try:
+ start_time = datetime.now().strftime('%H:%M:%S')
+ subprocess.run(cmd)
+ stop_time = datetime.now().strftime('%H:%M:%S')
+ except KeyboardInterrupt:
+ print("Received keyboard interrupt.")
+ exit(ReturnCodes.ABORTED)
+ except subprocess.CalledProcessError as e:
+ print(f"Failed to capture packet: {e}")
+ exit(ReturnCodes.FAILURE)
+ except Exception as e:
+ print(f"Failed to capture packet: {e}")
+ exit(ReturnCodes.FAILURE)
+
return ReturnCodes.SUCCESS
diff --git a/code/tests/fixtures/__init__.py b/code/tests/fixtures/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/tests/fixtures/shared_fixtures.py b/code/tests/fixtures/shared_fixtures.py
new file mode 100644
index 0000000..7b714ce
--- /dev/null
+++ b/code/tests/fixtures/shared_fixtures.py
@@ -0,0 +1,15 @@
+import pytest
+import tempfile
+from pathlib import Path
+
+
+@pytest.fixture(scope='session')
+def tmp_dir():
+ with tempfile.TemporaryDirectory() as tmp_dir:
+ yield Path(tmp_dir)
+
+
+@pytest.fixture
+def mock_device_metadata_json_(tmp_dir):
+ with tempfile.TemporaryDirectory() as tmp_dir:
+ pass
diff --git a/code/tests/models/test_capture_metadata_model.py b/code/tests/models/test_capture_metadata_model.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/tests/models/test_device_metadata_model.py b/code/tests/models/test_device_metadata_model.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/tests/subcommands/test_initialize_device_root_dir.py b/code/tests/subcommands/test_initialize_device_root_dir.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/tests/subcommands/test_sniff.py b/code/tests/subcommands/test_sniff.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/tests/test_main.py b/code/tests/test_main.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/tests/utils/test_capture_metadata_utils.py b/code/tests/utils/test_capture_metadata_utils.py
new file mode 100644
index 0000000..26647c8
--- /dev/null
+++ b/code/tests/utils/test_capture_metadata_utils.py
@@ -0,0 +1,6 @@
+import json
+from pathlib import Path
+from unittest.mock import mock_open, patch
+import pytest
+
+from kydcap.utils.capture_metadata_utils import set_device_ip_address
\ No newline at end of file
diff --git a/code/tests/utils/test_device_metadata_utils.py b/code/tests/utils/test_device_metadata_utils.py
new file mode 100644
index 0000000..e69de29
diff --git a/code/tests/utils/test_tcpdump_utils.py b/code/tests/utils/test_tcpdump_utils.py
new file mode 100644
index 0000000..e69de29