Files

54 lines
1.3 KiB
Python

"""
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