Files

54 lines
1.3 KiB
Python
Raw Permalink Normal View History

2025-07-25 15:52:16 -04:00
"""
Base protocol dissector interface and common structures
"""
from abc import ABC, abstractmethod
from dataclasses import dataclass
from enum import IntEnum
from typing import Dict, List, Optional, Any
try:
from scapy.all import Packet
except ImportError:
print("Error: scapy library required. Install with: pip install scapy")
import sys
sys.exit(1)
class ProtocolType(IntEnum):
"""Protocol type identifiers"""
UNKNOWN = 0
CHAPTER10 = 1
PTP = 2
IENA = 3
@dataclass
class DissectionResult:
"""Container for dissection results"""
protocol: ProtocolType
fields: Dict[str, Any]
payload: Optional[bytes] = None
errors: List[str] = None
def __post_init__(self):
if self.errors is None:
self.errors = []
class ProtocolDissector(ABC):
"""Abstract base class for protocol dissectors"""
@abstractmethod
def can_dissect(self, packet: Packet) -> bool:
"""Check if this dissector can handle the given packet"""
pass
@abstractmethod
def dissect(self, packet: Packet) -> Optional[DissectionResult]:
"""Dissect the packet and return structured data"""
pass
def get_protocol_type(self) -> ProtocolType:
"""Get the protocol type this dissector handles"""
return ProtocolType.UNKNOWN