import json import logging import uuid from datetime import datetime from pathlib import Path logger = logging.getLogger('iottb.sniff') # Log with sniff subcommand class CaptureMetadata: def __init__(self, device_id, capture_dir, interface, address, capture_file, tcpdump_command, tcpdump_stdout, tcpdump_stderr, packet_filter, alias): self.base_data = { 'device_id': device_id, 'capture_id': str(uuid.uuid4()), 'capture_date': datetime.now().isoformat(), 'capture_dir': str(capture_dir), 'capture_file': capture_file, 'start_time': "", 'stop_time': "", 'alias': alias } self.features = { 'interface': interface, 'device_ip_address': address if address else "No IP Address set", 'tcpdump_stdout': str(tcpdump_stdout), 'tcpdump_stderr': str(tcpdump_stderr), 'packet_filter': packet_filter } self.command = tcpdump_command def save_to_file(self): metadata = { 'base_data': self.base_data, 'features': self.features, 'command': self.command } metadata_file_path = Path(self.base_data['capture_dir']) / 'metadata.json' with open(metadata_file_path, 'w') as f: json.dump(metadata, f, indent=4) logger.info(f'Metadata saved to {metadata_file_path}')