94 lines
3.8 KiB
Python
94 lines
3.8 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""Debug background analyzer issue"""
|
|||
|
|
|
|||
|
|
import sys
|
|||
|
|
sys.path.append('.')
|
|||
|
|
|
|||
|
|
from analyzer.analysis import EthernetAnalyzer
|
|||
|
|
from analyzer.utils import PCAPLoader
|
|||
|
|
from analyzer.analysis.background_analyzer import BackgroundAnalyzer
|
|||
|
|
import time
|
|||
|
|
|
|||
|
|
def debug_background_processing(pcap_file, src_ip="192.168.4.89"):
|
|||
|
|
"""Debug what's different in background processing"""
|
|||
|
|
|
|||
|
|
print("=== BATCH PROCESSING (REFERENCE) ===")
|
|||
|
|
analyzer_batch = EthernetAnalyzer(outlier_threshold_sigma=3.0)
|
|||
|
|
|
|||
|
|
loader = PCAPLoader(pcap_file)
|
|||
|
|
packets = loader.load_all()
|
|||
|
|
print(f"Loaded {len(packets)} packets")
|
|||
|
|
|
|||
|
|
for i, packet in enumerate(packets, 1):
|
|||
|
|
analyzer_batch._process_single_packet(packet, i)
|
|||
|
|
|
|||
|
|
analyzer_batch.calculate_statistics()
|
|||
|
|
|
|||
|
|
flow_batch = None
|
|||
|
|
for flow_key, flow in analyzer_batch.flows.items():
|
|||
|
|
if flow.src_ip == src_ip:
|
|||
|
|
flow_batch = flow
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if flow_batch:
|
|||
|
|
print(f"Batch - Packets: {flow_batch.frame_count}")
|
|||
|
|
print(f"Batch - Inter-arrival count: {len(flow_batch.inter_arrival_times)}")
|
|||
|
|
print(f"Batch - Avg ΔT: {flow_batch.avg_inter_arrival * 1000:.3f} ms")
|
|||
|
|
print(f"Batch - Std σ: {flow_batch.std_inter_arrival * 1000:.3f} ms")
|
|||
|
|
print(f"Batch - Outliers: {len(flow_batch.outlier_frames)} {sorted(flow_batch.outlier_frames)}")
|
|||
|
|
|
|||
|
|
# Show first 10 inter-arrival times
|
|||
|
|
print("Batch - First 10 inter-arrival times:")
|
|||
|
|
for i, t in enumerate(flow_batch.inter_arrival_times[:10]):
|
|||
|
|
print(f" [{i}] {t * 1000:.3f} ms")
|
|||
|
|
|
|||
|
|
print("\n=== BACKGROUND PROCESSING ===")
|
|||
|
|
analyzer_bg = EthernetAnalyzer(outlier_threshold_sigma=3.0)
|
|||
|
|
bg_analyzer = BackgroundAnalyzer(analyzer_bg)
|
|||
|
|
|
|||
|
|
bg_analyzer.start_parsing(pcap_file)
|
|||
|
|
|
|||
|
|
while bg_analyzer.is_parsing:
|
|||
|
|
time.sleep(0.1)
|
|||
|
|
|
|||
|
|
flow_bg = None
|
|||
|
|
for flow_key, flow in analyzer_bg.flows.items():
|
|||
|
|
if flow.src_ip == src_ip:
|
|||
|
|
flow_bg = flow
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if flow_bg:
|
|||
|
|
print(f"Background - Packets: {flow_bg.frame_count}")
|
|||
|
|
print(f"Background - Inter-arrival count: {len(flow_bg.inter_arrival_times)}")
|
|||
|
|
print(f"Background - Avg ΔT: {flow_bg.avg_inter_arrival * 1000:.3f} ms")
|
|||
|
|
print(f"Background - Std σ: {flow_bg.std_inter_arrival * 1000:.3f} ms")
|
|||
|
|
print(f"Background - Outliers: {len(flow_bg.outlier_frames)} {sorted(flow_bg.outlier_frames)}")
|
|||
|
|
|
|||
|
|
# Show first 10 inter-arrival times
|
|||
|
|
print("Background - First 10 inter-arrival times:")
|
|||
|
|
for i, t in enumerate(flow_bg.inter_arrival_times[:10]):
|
|||
|
|
print(f" [{i}] {t * 1000:.3f} ms")
|
|||
|
|
|
|||
|
|
print("\n=== COMPARISON ===")
|
|||
|
|
if flow_batch and flow_bg:
|
|||
|
|
if flow_batch.frame_count != flow_bg.frame_count:
|
|||
|
|
print(f"⚠️ Packet count mismatch! {flow_batch.frame_count} vs {flow_bg.frame_count}")
|
|||
|
|
|
|||
|
|
if len(flow_batch.inter_arrival_times) != len(flow_bg.inter_arrival_times):
|
|||
|
|
print(f"⚠️ Inter-arrival count mismatch! {len(flow_batch.inter_arrival_times)} vs {len(flow_bg.inter_arrival_times)}")
|
|||
|
|
|
|||
|
|
# Check first few times for differences
|
|||
|
|
print("Comparing first 10 inter-arrival times:")
|
|||
|
|
min_len = min(len(flow_batch.inter_arrival_times), len(flow_bg.inter_arrival_times))
|
|||
|
|
for i in range(min(10, min_len)):
|
|||
|
|
t_batch = flow_batch.inter_arrival_times[i] * 1000
|
|||
|
|
t_bg = flow_bg.inter_arrival_times[i] * 1000
|
|||
|
|
diff = abs(t_batch - t_bg)
|
|||
|
|
if diff > 0.001: # More than 1 microsecond difference
|
|||
|
|
print(f" [{i}] DIFF: Batch={t_batch:.6f} vs Background={t_bg:.6f} (diff={diff:.6f})")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
if len(sys.argv) > 1:
|
|||
|
|
debug_background_processing(sys.argv[1])
|
|||
|
|
else:
|
|||
|
|
debug_background_processing("1 PTPGM.pcapng")
|