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
import logging
import threading
from datetime import datetime
from typing import Dict, Any, Optional, List
from dataclasses import dataclass, asdict
@ -49,6 +50,7 @@ class ForensicLogger:
session_id: Unique identifier for this reconnaissance session
"""
self.session_id = session_id or self._generate_session_id()
#self.lock = threading.Lock()
# Initialize audit trail storage
self.api_requests: List[APIRequest] = []
@ -78,26 +80,6 @@ class ForensicLogger:
console_handler.setFormatter(formatter)
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:
"""Generate unique session identifier."""
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'])
duration = (end_time - start_time).total_seconds() / 60
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 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 providers.crtsh_provider import CrtShProvider
from providers.dns_provider import DNSProvider
@ -73,7 +73,7 @@ class Scanner:
# Initialize logger
print("Initializing forensic logger...")
self.logger = ForensicLogger()
self.logger = get_forensic_logger()
print("Scanner initialization complete")
@ -82,23 +82,6 @@ class Scanner:
traceback.print_exc()
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:
"""Initialize all available providers based on session configuration."""
self.providers = []
@ -176,7 +159,7 @@ class Scanner:
# Start new forensic session
print(f"Starting new forensic session for scanner {id(self)}...")
self.logger = ForensicLogger()
self.logger = new_session()
# Start scan in separate thread
print(f"Starting scan thread for scanner {id(self)}...")