working to analyze timing issues
This commit is contained in:
97
analyzer/protocols/standard.py
Normal file
97
analyzer/protocols/standard.py
Normal file
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
Standard protocol dissectors (Ethernet, IP, TCP, UDP, etc.)
|
||||
"""
|
||||
|
||||
from typing import Dict, Optional
|
||||
|
||||
try:
|
||||
from scapy.all import Packet, Ether, IP, UDP, TCP
|
||||
except ImportError:
|
||||
print("Error: scapy library required. Install with: pip install scapy")
|
||||
import sys
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
class StandardProtocolDissectors:
|
||||
"""Collection of standard protocol dissectors"""
|
||||
|
||||
def __init__(self):
|
||||
self.dissectors = {
|
||||
'ethernet': self._dissect_ethernet,
|
||||
'ip': self._dissect_ip,
|
||||
'udp': self._dissect_udp,
|
||||
'tcp': self._dissect_tcp
|
||||
}
|
||||
|
||||
def dissect_all(self, packet: Packet) -> Dict[str, Optional[Dict]]:
|
||||
"""Apply all standard dissectors to a packet"""
|
||||
results = {}
|
||||
for name, dissector in self.dissectors.items():
|
||||
try:
|
||||
results[name] = dissector(packet)
|
||||
except Exception as e:
|
||||
results[name] = {'error': str(e)}
|
||||
return results
|
||||
|
||||
def _dissect_ethernet(self, packet: Packet) -> Optional[Dict]:
|
||||
"""Dissect Ethernet layer"""
|
||||
try:
|
||||
if packet.haslayer(Ether):
|
||||
eth = packet[Ether]
|
||||
return {
|
||||
'src_mac': eth.src,
|
||||
'dst_mac': eth.dst,
|
||||
'type': hex(eth.type)
|
||||
}
|
||||
except:
|
||||
pass
|
||||
return None
|
||||
|
||||
def _dissect_ip(self, packet: Packet) -> Optional[Dict]:
|
||||
"""Dissect IP layer"""
|
||||
try:
|
||||
if packet.haslayer(IP):
|
||||
ip = packet[IP]
|
||||
return {
|
||||
'version': ip.version,
|
||||
'src': ip.src,
|
||||
'dst': ip.dst,
|
||||
'protocol': ip.proto,
|
||||
'ttl': ip.ttl,
|
||||
'length': ip.len
|
||||
}
|
||||
except:
|
||||
pass
|
||||
return None
|
||||
|
||||
def _dissect_udp(self, packet: Packet) -> Optional[Dict]:
|
||||
"""Dissect UDP layer"""
|
||||
try:
|
||||
if packet.haslayer(UDP):
|
||||
udp = packet[UDP]
|
||||
return {
|
||||
'src_port': udp.sport,
|
||||
'dst_port': udp.dport,
|
||||
'length': udp.len,
|
||||
'checksum': hex(udp.chksum)
|
||||
}
|
||||
except:
|
||||
pass
|
||||
return None
|
||||
|
||||
def _dissect_tcp(self, packet: Packet) -> Optional[Dict]:
|
||||
"""Dissect TCP layer"""
|
||||
try:
|
||||
if packet.haslayer(TCP):
|
||||
tcp = packet[TCP]
|
||||
return {
|
||||
'src_port': tcp.sport,
|
||||
'dst_port': tcp.dport,
|
||||
'seq': tcp.seq,
|
||||
'ack': tcp.ack,
|
||||
'flags': tcp.flags,
|
||||
'window': tcp.window
|
||||
}
|
||||
except:
|
||||
pass
|
||||
return None
|
||||
Reference in New Issue
Block a user