fix attempt

This commit is contained in:
overcuriousity 2025-09-12 14:26:48 +02:00
parent 4f69cabd41
commit a535d25714
2 changed files with 29 additions and 42 deletions

View File

@ -1,6 +1,7 @@
# dnsrecon/core/logger.py # dnsrecon/core/logger.py
import logging import logging
import threading
from datetime import datetime from datetime import datetime
from typing import Dict, Any, Optional, List from typing import Dict, Any, Optional, List
from dataclasses import dataclass, asdict from dataclasses import dataclass, asdict
@ -49,6 +50,7 @@ class ForensicLogger:
session_id: Unique identifier for this reconnaissance session session_id: Unique identifier for this reconnaissance session
""" """
self.session_id = session_id or self._generate_session_id() self.session_id = session_id or self._generate_session_id()
#self.lock = threading.Lock()
# Initialize audit trail storage # Initialize audit trail storage
self.api_requests: List[APIRequest] = [] self.api_requests: List[APIRequest] = []
@ -78,26 +80,6 @@ class ForensicLogger:
console_handler.setFormatter(formatter) console_handler.setFormatter(formatter)
self.logger.addHandler(console_handler) self.logger.addHandler(console_handler)
def __getstate__(self):
state = self.__dict__.copy()
# Exclude the unpickleable 'logger' attribute
if 'logger' in state:
del state['logger']
return state
def __setstate__(self, state):
self.__dict__.update(state)
# Re-initialize the 'logger' attribute
self.logger = logging.getLogger(f'dnsrecon.{self.session_id}')
self.logger.setLevel(logging.INFO)
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
if not self.logger.handlers:
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
self.logger.addHandler(console_handler)
def _generate_session_id(self) -> str: def _generate_session_id(self) -> str:
"""Generate unique session identifier.""" """Generate unique session identifier."""
return f"dnsrecon_{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}" return f"dnsrecon_{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}"
@ -255,3 +237,25 @@ class ForensicLogger:
start_time = datetime.fromisoformat(self.session_metadata['start_time']) start_time = datetime.fromisoformat(self.session_metadata['start_time'])
duration = (end_time - start_time).total_seconds() / 60 duration = (end_time - start_time).total_seconds() / 60
return round(duration, 2) return round(duration, 2)
# Global logger instance for the current session
_current_logger: Optional[ForensicLogger] = None
_logger_lock = threading.Lock()
def get_forensic_logger() -> ForensicLogger:
"""Get or create the current forensic logger instance."""
global _current_logger
with _logger_lock:
if _current_logger is None:
_current_logger = ForensicLogger()
return _current_logger
def new_session() -> ForensicLogger:
"""Start a new forensic logging session."""
global _current_logger
with _logger_lock:
_current_logger = ForensicLogger()
return _current_logger

View File

@ -8,7 +8,7 @@ from collections import defaultdict
from datetime import datetime, timezone from datetime import datetime, timezone
from core.graph_manager import GraphManager, NodeType, RelationshipType from core.graph_manager import GraphManager, NodeType, RelationshipType
from core.logger import ForensicLogger from core.logger import get_forensic_logger, new_session
from utils.helpers import _is_valid_ip, _is_valid_domain from utils.helpers import _is_valid_ip, _is_valid_domain
from providers.crtsh_provider import CrtShProvider from providers.crtsh_provider import CrtShProvider
from providers.dns_provider import DNSProvider from providers.dns_provider import DNSProvider
@ -73,7 +73,7 @@ class Scanner:
# Initialize logger # Initialize logger
print("Initializing forensic logger...") print("Initializing forensic logger...")
self.logger = ForensicLogger() self.logger = get_forensic_logger()
print("Scanner initialization complete") print("Scanner initialization complete")
@ -82,23 +82,6 @@ class Scanner:
traceback.print_exc() traceback.print_exc()
raise raise
def __getstate__(self):
state = self.__dict__.copy()
# Exclude unpickleable attributes
for attr in ['stop_event', 'scan_thread', 'executor', 'logger', 'providers']:
if attr in state:
del state[attr]
return state
def __setstate__(self, state):
self.__dict__.update(state)
# Re-initialize unpickleable attributes
self.stop_event = threading.Event()
self.scan_thread = None
self.executor = None
self.logger = ForensicLogger()
self._initialize_providers()
def _initialize_providers(self) -> None: def _initialize_providers(self) -> None:
"""Initialize all available providers based on session configuration.""" """Initialize all available providers based on session configuration."""
self.providers = [] self.providers = []
@ -176,7 +159,7 @@ class Scanner:
# Start new forensic session # Start new forensic session
print(f"Starting new forensic session for scanner {id(self)}...") print(f"Starting new forensic session for scanner {id(self)}...")
self.logger = ForensicLogger() self.logger = new_session()
# Start scan in separate thread # Start scan in separate thread
print(f"Starting scan thread for scanner {id(self)}...") print(f"Starting scan thread for scanner {id(self)}...")