fix attempt
This commit is contained in:
parent
4f69cabd41
commit
a535d25714
@ -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] = []
|
||||||
@ -77,27 +79,7 @@ class ForensicLogger:
|
|||||||
console_handler = logging.StreamHandler()
|
console_handler = logging.StreamHandler()
|
||||||
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')}"
|
||||||
@ -254,4 +236,26 @@ 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
|
@ -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)}...")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user