mirror of
https://github.com/smittix/intercept.git
synced 2026-07-06 00:28:12 -07:00
style: apply ruff-format to entire codebase
First-time run of ruff-format via pre-commit hook normalises quote style, trailing commas, and whitespace across 188 Python files. No logic changes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+61
-17
@@ -1,39 +1,83 @@
|
||||
# Detection patterns for various device types
|
||||
|
||||
# Known beacon prefixes for tracker detection
|
||||
AIRTAG_PREFIXES = ['4C:00'] # Apple continuity
|
||||
TILE_PREFIXES = ['C4:E7', 'DC:54', 'E4:B0', 'F8:8A']
|
||||
SAMSUNG_TRACKER = ['58:4D', 'A0:75']
|
||||
AIRTAG_PREFIXES = ["4C:00"] # Apple continuity
|
||||
TILE_PREFIXES = ["C4:E7", "DC:54", "E4:B0", "F8:8A"]
|
||||
SAMSUNG_TRACKER = ["58:4D", "A0:75"]
|
||||
|
||||
# Drone detection patterns (SSID patterns)
|
||||
DRONE_SSID_PATTERNS = [
|
||||
# DJI
|
||||
'DJI-', 'DJI_', 'Mavic', 'Phantom', 'Spark-', 'Mini-', 'Air-', 'Inspire',
|
||||
'Matrice', 'Avata', 'FPV-', 'Osmo', 'RoboMaster', 'Tello',
|
||||
"DJI-",
|
||||
"DJI_",
|
||||
"Mavic",
|
||||
"Phantom",
|
||||
"Spark-",
|
||||
"Mini-",
|
||||
"Air-",
|
||||
"Inspire",
|
||||
"Matrice",
|
||||
"Avata",
|
||||
"FPV-",
|
||||
"Osmo",
|
||||
"RoboMaster",
|
||||
"Tello",
|
||||
# Parrot
|
||||
'Parrot', 'Bebop', 'Anafi', 'Disco-', 'Mambo', 'Swing',
|
||||
"Parrot",
|
||||
"Bebop",
|
||||
"Anafi",
|
||||
"Disco-",
|
||||
"Mambo",
|
||||
"Swing",
|
||||
# Autel
|
||||
'Autel', 'EVO-', 'Dragonfish', 'Lite+', 'Nano',
|
||||
"Autel",
|
||||
"EVO-",
|
||||
"Dragonfish",
|
||||
"Lite+",
|
||||
"Nano",
|
||||
# Skydio
|
||||
'Skydio',
|
||||
"Skydio",
|
||||
# Other brands
|
||||
'Holy Stone', 'Potensic', 'SYMA', 'Hubsan', 'Eachine', 'FIMI',
|
||||
'Xiaomi_FIMI', 'Yuneec', 'Typhoon', 'PowerVision', 'PowerEgg',
|
||||
"Holy Stone",
|
||||
"Potensic",
|
||||
"SYMA",
|
||||
"Hubsan",
|
||||
"Eachine",
|
||||
"FIMI",
|
||||
"Xiaomi_FIMI",
|
||||
"Yuneec",
|
||||
"Typhoon",
|
||||
"PowerVision",
|
||||
"PowerEgg",
|
||||
# Generic drone patterns
|
||||
'Drone', 'UAV-', 'Quadcopter', 'FPV_', 'RC-Drone'
|
||||
"Drone",
|
||||
"UAV-",
|
||||
"Quadcopter",
|
||||
"FPV_",
|
||||
"RC-Drone",
|
||||
]
|
||||
|
||||
# Drone OUI prefixes (MAC address prefixes for drone manufacturers)
|
||||
DRONE_OUI_PREFIXES = {
|
||||
# DJI
|
||||
'60:60:1F': 'DJI', '48:1C:B9': 'DJI', '34:D2:62': 'DJI', 'E0:DB:55': 'DJI',
|
||||
'C8:6C:87': 'DJI', 'A0:14:3D': 'DJI', '70:D7:11': 'DJI', '98:3A:56': 'DJI',
|
||||
"60:60:1F": "DJI",
|
||||
"48:1C:B9": "DJI",
|
||||
"34:D2:62": "DJI",
|
||||
"E0:DB:55": "DJI",
|
||||
"C8:6C:87": "DJI",
|
||||
"A0:14:3D": "DJI",
|
||||
"70:D7:11": "DJI",
|
||||
"98:3A:56": "DJI",
|
||||
# Parrot
|
||||
'90:03:B7': 'Parrot', 'A0:14:3D': 'Parrot', '00:12:1C': 'Parrot', '00:26:7E': 'Parrot',
|
||||
"90:03:B7": "Parrot",
|
||||
"A0:14:3D": "Parrot",
|
||||
"00:12:1C": "Parrot",
|
||||
"00:26:7E": "Parrot",
|
||||
# Autel
|
||||
'8C:F5:A3': 'Autel', 'D8:E0:E1': 'Autel',
|
||||
"8C:F5:A3": "Autel",
|
||||
"D8:E0:E1": "Autel",
|
||||
# Yuneec
|
||||
'60:60:1F': 'Yuneec',
|
||||
"60:60:1F": "Yuneec",
|
||||
# Skydio
|
||||
'F8:0F:6F': 'Skydio',
|
||||
"F8:0F:6F": "Skydio",
|
||||
}
|
||||
|
||||
+259
-257
@@ -12,56 +12,51 @@ from __future__ import annotations
|
||||
# =============================================================================
|
||||
|
||||
SURVEILLANCE_FREQUENCIES = {
|
||||
'wireless_mics': [
|
||||
{'start': 49.0, 'end': 50.0, 'name': '49 MHz Wireless Mics', 'risk': 'medium'},
|
||||
{'start': 72.0, 'end': 76.0, 'name': 'VHF Low Band Mics', 'risk': 'medium'},
|
||||
{'start': 170.0, 'end': 216.0, 'name': 'VHF High Band Wireless', 'risk': 'medium'},
|
||||
{'start': 470.0, 'end': 698.0, 'name': 'UHF TV Band Wireless', 'risk': 'medium'},
|
||||
{'start': 902.0, 'end': 928.0, 'name': '900 MHz ISM Wireless', 'risk': 'high'},
|
||||
{'start': 1880.0, 'end': 1920.0, 'name': 'DECT Wireless', 'risk': 'high'},
|
||||
"wireless_mics": [
|
||||
{"start": 49.0, "end": 50.0, "name": "49 MHz Wireless Mics", "risk": "medium"},
|
||||
{"start": 72.0, "end": 76.0, "name": "VHF Low Band Mics", "risk": "medium"},
|
||||
{"start": 170.0, "end": 216.0, "name": "VHF High Band Wireless", "risk": "medium"},
|
||||
{"start": 470.0, "end": 698.0, "name": "UHF TV Band Wireless", "risk": "medium"},
|
||||
{"start": 902.0, "end": 928.0, "name": "900 MHz ISM Wireless", "risk": "high"},
|
||||
{"start": 1880.0, "end": 1920.0, "name": "DECT Wireless", "risk": "high"},
|
||||
],
|
||||
|
||||
'wireless_cameras': [
|
||||
{'start': 900.0, 'end': 930.0, 'name': '900 MHz Video TX', 'risk': 'high'},
|
||||
{'start': 1200.0, 'end': 1300.0, 'name': '1.2 GHz Video', 'risk': 'high'},
|
||||
{'start': 2400.0, 'end': 2483.5, 'name': '2.4 GHz WiFi Cameras', 'risk': 'high'},
|
||||
{'start': 5150.0, 'end': 5850.0, 'name': '5.8 GHz Video', 'risk': 'high'},
|
||||
"wireless_cameras": [
|
||||
{"start": 900.0, "end": 930.0, "name": "900 MHz Video TX", "risk": "high"},
|
||||
{"start": 1200.0, "end": 1300.0, "name": "1.2 GHz Video", "risk": "high"},
|
||||
{"start": 2400.0, "end": 2483.5, "name": "2.4 GHz WiFi Cameras", "risk": "high"},
|
||||
{"start": 5150.0, "end": 5850.0, "name": "5.8 GHz Video", "risk": "high"},
|
||||
],
|
||||
|
||||
'gps_trackers': [
|
||||
{'start': 824.0, 'end': 849.0, 'name': 'Cellular 850 Uplink', 'risk': 'high'},
|
||||
{'start': 869.0, 'end': 894.0, 'name': 'Cellular 850 Downlink', 'risk': 'high'},
|
||||
{'start': 1710.0, 'end': 1755.0, 'name': 'AWS Uplink', 'risk': 'high'},
|
||||
{'start': 1850.0, 'end': 1910.0, 'name': 'PCS Uplink', 'risk': 'high'},
|
||||
{'start': 1930.0, 'end': 1990.0, 'name': 'PCS Downlink', 'risk': 'high'},
|
||||
"gps_trackers": [
|
||||
{"start": 824.0, "end": 849.0, "name": "Cellular 850 Uplink", "risk": "high"},
|
||||
{"start": 869.0, "end": 894.0, "name": "Cellular 850 Downlink", "risk": "high"},
|
||||
{"start": 1710.0, "end": 1755.0, "name": "AWS Uplink", "risk": "high"},
|
||||
{"start": 1850.0, "end": 1910.0, "name": "PCS Uplink", "risk": "high"},
|
||||
{"start": 1930.0, "end": 1990.0, "name": "PCS Downlink", "risk": "high"},
|
||||
],
|
||||
|
||||
'body_worn': [
|
||||
{'start': 49.0, 'end': 50.0, 'name': '49 MHz Body Wires', 'risk': 'critical'},
|
||||
{'start': 72.0, 'end': 76.0, 'name': 'VHF Low Band Wires', 'risk': 'critical'},
|
||||
{'start': 150.0, 'end': 174.0, 'name': 'VHF High Band', 'risk': 'critical'},
|
||||
{'start': 380.0, 'end': 400.0, 'name': 'TETRA Band', 'risk': 'high'},
|
||||
{'start': 406.0, 'end': 420.0, 'name': 'Federal/Government', 'risk': 'critical'},
|
||||
{'start': 450.0, 'end': 470.0, 'name': 'UHF Business Band', 'risk': 'high'},
|
||||
"body_worn": [
|
||||
{"start": 49.0, "end": 50.0, "name": "49 MHz Body Wires", "risk": "critical"},
|
||||
{"start": 72.0, "end": 76.0, "name": "VHF Low Band Wires", "risk": "critical"},
|
||||
{"start": 150.0, "end": 174.0, "name": "VHF High Band", "risk": "critical"},
|
||||
{"start": 380.0, "end": 400.0, "name": "TETRA Band", "risk": "high"},
|
||||
{"start": 406.0, "end": 420.0, "name": "Federal/Government", "risk": "critical"},
|
||||
{"start": 450.0, "end": 470.0, "name": "UHF Business Band", "risk": "high"},
|
||||
],
|
||||
|
||||
'common_bugs': [
|
||||
{'start': 88.0, 'end': 108.0, 'name': 'FM Broadcast Band Bugs', 'risk': 'low'},
|
||||
{'start': 140.0, 'end': 150.0, 'name': 'Low VHF Bugs', 'risk': 'high'},
|
||||
{'start': 418.0, 'end': 419.0, 'name': '418 MHz ISM', 'risk': 'medium'},
|
||||
{'start': 433.0, 'end': 434.8, 'name': '433 MHz ISM Band', 'risk': 'medium'},
|
||||
{'start': 868.0, 'end': 870.0, 'name': '868 MHz ISM (Europe)', 'risk': 'medium'},
|
||||
{'start': 315.0, 'end': 316.0, 'name': '315 MHz ISM (US)', 'risk': 'medium'},
|
||||
"common_bugs": [
|
||||
{"start": 88.0, "end": 108.0, "name": "FM Broadcast Band Bugs", "risk": "low"},
|
||||
{"start": 140.0, "end": 150.0, "name": "Low VHF Bugs", "risk": "high"},
|
||||
{"start": 418.0, "end": 419.0, "name": "418 MHz ISM", "risk": "medium"},
|
||||
{"start": 433.0, "end": 434.8, "name": "433 MHz ISM Band", "risk": "medium"},
|
||||
{"start": 868.0, "end": 870.0, "name": "868 MHz ISM (Europe)", "risk": "medium"},
|
||||
{"start": 315.0, "end": 316.0, "name": "315 MHz ISM (US)", "risk": "medium"},
|
||||
],
|
||||
|
||||
'ism_bands': [
|
||||
{'start': 26.96, 'end': 27.41, 'name': 'CB Radio / ISM 27 MHz', 'risk': 'low'},
|
||||
{'start': 40.66, 'end': 40.70, 'name': 'ISM 40 MHz', 'risk': 'low'},
|
||||
{'start': 315.0, 'end': 316.0, 'name': 'ISM 315 MHz (US)', 'risk': 'medium'},
|
||||
{'start': 433.05, 'end': 434.79, 'name': 'ISM 433 MHz (EU)', 'risk': 'medium'},
|
||||
{'start': 868.0, 'end': 868.6, 'name': 'ISM 868 MHz (EU)', 'risk': 'medium'},
|
||||
{'start': 902.0, 'end': 928.0, 'name': 'ISM 915 MHz (US)', 'risk': 'medium'},
|
||||
{'start': 2400.0, 'end': 2483.5, 'name': 'ISM 2.4 GHz', 'risk': 'medium'},
|
||||
"ism_bands": [
|
||||
{"start": 26.96, "end": 27.41, "name": "CB Radio / ISM 27 MHz", "risk": "low"},
|
||||
{"start": 40.66, "end": 40.70, "name": "ISM 40 MHz", "risk": "low"},
|
||||
{"start": 315.0, "end": 316.0, "name": "ISM 315 MHz (US)", "risk": "medium"},
|
||||
{"start": 433.05, "end": 434.79, "name": "ISM 433 MHz (EU)", "risk": "medium"},
|
||||
{"start": 868.0, "end": 868.6, "name": "ISM 868 MHz (EU)", "risk": "medium"},
|
||||
{"start": 902.0, "end": 928.0, "name": "ISM 915 MHz (US)", "risk": "medium"},
|
||||
{"start": 2400.0, "end": 2483.5, "name": "ISM 2.4 GHz", "risk": "medium"},
|
||||
],
|
||||
}
|
||||
|
||||
@@ -71,108 +66,101 @@ SURVEILLANCE_FREQUENCIES = {
|
||||
# =============================================================================
|
||||
|
||||
SWEEP_PRESETS = {
|
||||
'quick': {
|
||||
'name': 'Quick Scan',
|
||||
'description': 'Fast 2-minute check of most common bug frequencies',
|
||||
'duration_seconds': 120,
|
||||
'ranges': [
|
||||
{'start': 88.0, 'end': 108.0, 'step': 0.1, 'name': 'FM Band'},
|
||||
{'start': 433.0, 'end': 435.0, 'step': 0.025, 'name': '433 MHz ISM'},
|
||||
{'start': 868.0, 'end': 870.0, 'step': 0.025, 'name': '868 MHz ISM'},
|
||||
"quick": {
|
||||
"name": "Quick Scan",
|
||||
"description": "Fast 2-minute check of most common bug frequencies",
|
||||
"duration_seconds": 120,
|
||||
"ranges": [
|
||||
{"start": 88.0, "end": 108.0, "step": 0.1, "name": "FM Band"},
|
||||
{"start": 433.0, "end": 435.0, "step": 0.025, "name": "433 MHz ISM"},
|
||||
{"start": 868.0, "end": 870.0, "step": 0.025, "name": "868 MHz ISM"},
|
||||
],
|
||||
'wifi': True,
|
||||
'bluetooth': True,
|
||||
'rf': True,
|
||||
"wifi": True,
|
||||
"bluetooth": True,
|
||||
"rf": True,
|
||||
},
|
||||
|
||||
'standard': {
|
||||
'name': 'Standard Sweep',
|
||||
'description': 'Comprehensive 5-minute sweep of common surveillance bands',
|
||||
'duration_seconds': 300,
|
||||
'ranges': [
|
||||
{'start': 25.0, 'end': 50.0, 'step': 0.1, 'name': 'HF/Low VHF'},
|
||||
{'start': 88.0, 'end': 108.0, 'step': 0.1, 'name': 'FM Band'},
|
||||
{'start': 140.0, 'end': 175.0, 'step': 0.025, 'name': 'VHF'},
|
||||
{'start': 380.0, 'end': 450.0, 'step': 0.025, 'name': 'UHF Low'},
|
||||
{'start': 868.0, 'end': 930.0, 'step': 0.05, 'name': 'ISM 868/915'},
|
||||
"standard": {
|
||||
"name": "Standard Sweep",
|
||||
"description": "Comprehensive 5-minute sweep of common surveillance bands",
|
||||
"duration_seconds": 300,
|
||||
"ranges": [
|
||||
{"start": 25.0, "end": 50.0, "step": 0.1, "name": "HF/Low VHF"},
|
||||
{"start": 88.0, "end": 108.0, "step": 0.1, "name": "FM Band"},
|
||||
{"start": 140.0, "end": 175.0, "step": 0.025, "name": "VHF"},
|
||||
{"start": 380.0, "end": 450.0, "step": 0.025, "name": "UHF Low"},
|
||||
{"start": 868.0, "end": 930.0, "step": 0.05, "name": "ISM 868/915"},
|
||||
],
|
||||
'wifi': True,
|
||||
'bluetooth': True,
|
||||
'rf': True,
|
||||
"wifi": True,
|
||||
"bluetooth": True,
|
||||
"rf": True,
|
||||
},
|
||||
|
||||
'full': {
|
||||
'name': 'Full Spectrum',
|
||||
'description': 'Complete 15-minute spectrum sweep (24 MHz - 1.7 GHz)',
|
||||
'duration_seconds': 900,
|
||||
'ranges': [
|
||||
{'start': 24.0, 'end': 1700.0, 'step': 0.1, 'name': 'Full Spectrum'},
|
||||
"full": {
|
||||
"name": "Full Spectrum",
|
||||
"description": "Complete 15-minute spectrum sweep (24 MHz - 1.7 GHz)",
|
||||
"duration_seconds": 900,
|
||||
"ranges": [
|
||||
{"start": 24.0, "end": 1700.0, "step": 0.1, "name": "Full Spectrum"},
|
||||
],
|
||||
'wifi': True,
|
||||
'bluetooth': True,
|
||||
'rf': True,
|
||||
"wifi": True,
|
||||
"bluetooth": True,
|
||||
"rf": True,
|
||||
},
|
||||
|
||||
'wireless_cameras': {
|
||||
'name': 'Wireless Cameras',
|
||||
'description': 'Focus on video transmission frequencies',
|
||||
'duration_seconds': 180,
|
||||
'ranges': [
|
||||
{'start': 900.0, 'end': 930.0, 'step': 0.1, 'name': '900 MHz Video'},
|
||||
{'start': 1200.0, 'end': 1300.0, 'step': 0.5, 'name': '1.2 GHz Video'},
|
||||
"wireless_cameras": {
|
||||
"name": "Wireless Cameras",
|
||||
"description": "Focus on video transmission frequencies",
|
||||
"duration_seconds": 180,
|
||||
"ranges": [
|
||||
{"start": 900.0, "end": 930.0, "step": 0.1, "name": "900 MHz Video"},
|
||||
{"start": 1200.0, "end": 1300.0, "step": 0.5, "name": "1.2 GHz Video"},
|
||||
],
|
||||
'wifi': True, # WiFi cameras
|
||||
'bluetooth': False,
|
||||
'rf': True,
|
||||
"wifi": True, # WiFi cameras
|
||||
"bluetooth": False,
|
||||
"rf": True,
|
||||
},
|
||||
|
||||
'body_worn': {
|
||||
'name': 'Body-Worn Devices',
|
||||
'description': 'Detect body wires and covert transmitters',
|
||||
'duration_seconds': 240,
|
||||
'ranges': [
|
||||
{'start': 49.0, 'end': 50.0, 'step': 0.01, 'name': '49 MHz'},
|
||||
{'start': 72.0, 'end': 76.0, 'step': 0.01, 'name': 'VHF Low'},
|
||||
{'start': 150.0, 'end': 174.0, 'step': 0.0125, 'name': 'VHF High'},
|
||||
{'start': 406.0, 'end': 420.0, 'step': 0.0125, 'name': 'Federal'},
|
||||
{'start': 450.0, 'end': 470.0, 'step': 0.0125, 'name': 'UHF'},
|
||||
"body_worn": {
|
||||
"name": "Body-Worn Devices",
|
||||
"description": "Detect body wires and covert transmitters",
|
||||
"duration_seconds": 240,
|
||||
"ranges": [
|
||||
{"start": 49.0, "end": 50.0, "step": 0.01, "name": "49 MHz"},
|
||||
{"start": 72.0, "end": 76.0, "step": 0.01, "name": "VHF Low"},
|
||||
{"start": 150.0, "end": 174.0, "step": 0.0125, "name": "VHF High"},
|
||||
{"start": 406.0, "end": 420.0, "step": 0.0125, "name": "Federal"},
|
||||
{"start": 450.0, "end": 470.0, "step": 0.0125, "name": "UHF"},
|
||||
],
|
||||
'wifi': False,
|
||||
'bluetooth': True, # BLE bugs
|
||||
'rf': True,
|
||||
"wifi": False,
|
||||
"bluetooth": True, # BLE bugs
|
||||
"rf": True,
|
||||
},
|
||||
|
||||
'gps_trackers': {
|
||||
'name': 'GPS Trackers',
|
||||
'description': 'Detect cellular-based GPS tracking devices',
|
||||
'duration_seconds': 180,
|
||||
'ranges': [
|
||||
{'start': 824.0, 'end': 894.0, 'step': 0.1, 'name': 'Cellular 850'},
|
||||
{'start': 1850.0, 'end': 1990.0, 'step': 0.1, 'name': 'PCS Band'},
|
||||
"gps_trackers": {
|
||||
"name": "GPS Trackers",
|
||||
"description": "Detect cellular-based GPS tracking devices",
|
||||
"duration_seconds": 180,
|
||||
"ranges": [
|
||||
{"start": 824.0, "end": 894.0, "step": 0.1, "name": "Cellular 850"},
|
||||
{"start": 1850.0, "end": 1990.0, "step": 0.1, "name": "PCS Band"},
|
||||
],
|
||||
'wifi': False,
|
||||
'bluetooth': True, # BLE trackers
|
||||
'rf': True,
|
||||
"wifi": False,
|
||||
"bluetooth": True, # BLE trackers
|
||||
"rf": True,
|
||||
},
|
||||
|
||||
'bluetooth_only': {
|
||||
'name': 'Bluetooth/BLE Trackers',
|
||||
'description': 'Focus on BLE tracking devices (AirTag, Tile, etc.)',
|
||||
'duration_seconds': 60,
|
||||
'ranges': [],
|
||||
'wifi': False,
|
||||
'bluetooth': True,
|
||||
'rf': False,
|
||||
"bluetooth_only": {
|
||||
"name": "Bluetooth/BLE Trackers",
|
||||
"description": "Focus on BLE tracking devices (AirTag, Tile, etc.)",
|
||||
"duration_seconds": 60,
|
||||
"ranges": [],
|
||||
"wifi": False,
|
||||
"bluetooth": True,
|
||||
"rf": False,
|
||||
},
|
||||
|
||||
'wifi_only': {
|
||||
'name': 'WiFi Devices',
|
||||
'description': 'Scan for hidden WiFi cameras and access points',
|
||||
'duration_seconds': 60,
|
||||
'ranges': [],
|
||||
'wifi': True,
|
||||
'bluetooth': False,
|
||||
'rf': False,
|
||||
"wifi_only": {
|
||||
"name": "WiFi Devices",
|
||||
"description": "Scan for hidden WiFi cameras and access points",
|
||||
"duration_seconds": 60,
|
||||
"ranges": [],
|
||||
"wifi": True,
|
||||
"bluetooth": False,
|
||||
"rf": False,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -182,41 +170,41 @@ SWEEP_PRESETS = {
|
||||
# =============================================================================
|
||||
|
||||
BLE_TRACKER_SIGNATURES = {
|
||||
'apple_airtag': {
|
||||
'name': 'Apple AirTag',
|
||||
'company_id': 0x004C,
|
||||
'patterns': ['findmy', 'airtag'],
|
||||
'risk': 'high',
|
||||
'description': 'Apple Find My network tracker',
|
||||
"apple_airtag": {
|
||||
"name": "Apple AirTag",
|
||||
"company_id": 0x004C,
|
||||
"patterns": ["findmy", "airtag"],
|
||||
"risk": "high",
|
||||
"description": "Apple Find My network tracker",
|
||||
},
|
||||
'tile': {
|
||||
'name': 'Tile Tracker',
|
||||
'company_id': 0x00ED,
|
||||
'patterns': ['tile'],
|
||||
'oui_prefixes': ['C4:E7', 'DC:54', 'E6:43'],
|
||||
'risk': 'high',
|
||||
'description': 'Tile Bluetooth tracker',
|
||||
"tile": {
|
||||
"name": "Tile Tracker",
|
||||
"company_id": 0x00ED,
|
||||
"patterns": ["tile"],
|
||||
"oui_prefixes": ["C4:E7", "DC:54", "E6:43"],
|
||||
"risk": "high",
|
||||
"description": "Tile Bluetooth tracker",
|
||||
},
|
||||
'samsung_smarttag': {
|
||||
'name': 'Samsung SmartTag',
|
||||
'company_id': 0x0075,
|
||||
'patterns': ['smarttag', 'smartthings'],
|
||||
'risk': 'high',
|
||||
'description': 'Samsung SmartThings tracker',
|
||||
"samsung_smarttag": {
|
||||
"name": "Samsung SmartTag",
|
||||
"company_id": 0x0075,
|
||||
"patterns": ["smarttag", "smartthings"],
|
||||
"risk": "high",
|
||||
"description": "Samsung SmartThings tracker",
|
||||
},
|
||||
'chipolo': {
|
||||
'name': 'Chipolo',
|
||||
'company_id': 0x0A09,
|
||||
'patterns': ['chipolo'],
|
||||
'risk': 'high',
|
||||
'description': 'Chipolo Bluetooth tracker',
|
||||
"chipolo": {
|
||||
"name": "Chipolo",
|
||||
"company_id": 0x0A09,
|
||||
"patterns": ["chipolo"],
|
||||
"risk": "high",
|
||||
"description": "Chipolo Bluetooth tracker",
|
||||
},
|
||||
'generic_beacon': {
|
||||
'name': 'Unknown BLE Beacon',
|
||||
'company_id': None,
|
||||
'patterns': [],
|
||||
'risk': 'medium',
|
||||
'description': 'Unidentified BLE beacon device',
|
||||
"generic_beacon": {
|
||||
"name": "Unknown BLE Beacon",
|
||||
"company_id": None,
|
||||
"patterns": [],
|
||||
"risk": "medium",
|
||||
"description": "Unidentified BLE beacon device",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -226,68 +214,68 @@ BLE_TRACKER_SIGNATURES = {
|
||||
# =============================================================================
|
||||
|
||||
THREAT_TYPES = {
|
||||
'new_device': {
|
||||
'name': 'New Device',
|
||||
'description': 'Device not present in baseline',
|
||||
'default_severity': 'medium',
|
||||
"new_device": {
|
||||
"name": "New Device",
|
||||
"description": "Device not present in baseline",
|
||||
"default_severity": "medium",
|
||||
},
|
||||
'tracker': {
|
||||
'name': 'Tracking Device',
|
||||
'description': 'Known BLE tracker detected',
|
||||
'default_severity': 'high',
|
||||
"tracker": {
|
||||
"name": "Tracking Device",
|
||||
"description": "Known BLE tracker detected",
|
||||
"default_severity": "high",
|
||||
},
|
||||
'unknown_signal': {
|
||||
'name': 'Unknown Signal',
|
||||
'description': 'Unidentified RF transmission',
|
||||
'default_severity': 'medium',
|
||||
"unknown_signal": {
|
||||
"name": "Unknown Signal",
|
||||
"description": "Unidentified RF transmission",
|
||||
"default_severity": "medium",
|
||||
},
|
||||
'burst_transmission': {
|
||||
'name': 'Burst Transmission',
|
||||
'description': 'Intermittent/store-and-forward signal detected',
|
||||
'default_severity': 'high',
|
||||
"burst_transmission": {
|
||||
"name": "Burst Transmission",
|
||||
"description": "Intermittent/store-and-forward signal detected",
|
||||
"default_severity": "high",
|
||||
},
|
||||
'hidden_camera': {
|
||||
'name': 'Potential Hidden Camera',
|
||||
'description': 'WiFi camera or video transmitter detected',
|
||||
'default_severity': 'critical',
|
||||
"hidden_camera": {
|
||||
"name": "Potential Hidden Camera",
|
||||
"description": "WiFi camera or video transmitter detected",
|
||||
"default_severity": "critical",
|
||||
},
|
||||
'gsm_bug': {
|
||||
'name': 'GSM/Cellular Bug',
|
||||
'description': 'Cellular transmission in non-phone device context',
|
||||
'default_severity': 'critical',
|
||||
"gsm_bug": {
|
||||
"name": "GSM/Cellular Bug",
|
||||
"description": "Cellular transmission in non-phone device context",
|
||||
"default_severity": "critical",
|
||||
},
|
||||
'rogue_ap': {
|
||||
'name': 'Rogue Access Point',
|
||||
'description': 'Unauthorized WiFi access point',
|
||||
'default_severity': 'high',
|
||||
"rogue_ap": {
|
||||
"name": "Rogue Access Point",
|
||||
"description": "Unauthorized WiFi access point",
|
||||
"default_severity": "high",
|
||||
},
|
||||
'anomaly': {
|
||||
'name': 'Signal Anomaly',
|
||||
'description': 'Unusual signal pattern or behavior',
|
||||
'default_severity': 'low',
|
||||
"anomaly": {
|
||||
"name": "Signal Anomaly",
|
||||
"description": "Unusual signal pattern or behavior",
|
||||
"default_severity": "low",
|
||||
},
|
||||
}
|
||||
|
||||
SEVERITY_LEVELS = {
|
||||
'critical': {
|
||||
'level': 4,
|
||||
'color': '#ff0000',
|
||||
'description': 'Immediate action required - active surveillance likely',
|
||||
"critical": {
|
||||
"level": 4,
|
||||
"color": "#ff0000",
|
||||
"description": "Immediate action required - active surveillance likely",
|
||||
},
|
||||
'high': {
|
||||
'level': 3,
|
||||
'color': '#ff6600',
|
||||
'description': 'Strong indicator of surveillance device',
|
||||
"high": {
|
||||
"level": 3,
|
||||
"color": "#ff6600",
|
||||
"description": "Strong indicator of surveillance device",
|
||||
},
|
||||
'medium': {
|
||||
'level': 2,
|
||||
'color': '#ffcc00',
|
||||
'description': 'Potential threat - requires investigation',
|
||||
"medium": {
|
||||
"level": 2,
|
||||
"color": "#ffcc00",
|
||||
"description": "Potential threat - requires investigation",
|
||||
},
|
||||
'low': {
|
||||
'level': 1,
|
||||
'color': '#00cc00',
|
||||
'description': 'Minor anomaly - low probability of threat',
|
||||
"low": {
|
||||
"level": 1,
|
||||
"color": "#00cc00",
|
||||
"description": "Minor anomaly - low probability of threat",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -297,34 +285,47 @@ SEVERITY_LEVELS = {
|
||||
# =============================================================================
|
||||
|
||||
WIFI_CAMERA_PATTERNS = {
|
||||
'ssid_patterns': [
|
||||
'cam', 'camera', 'ipcam', 'webcam', 'dvr', 'nvr',
|
||||
'hikvision', 'dahua', 'reolink', 'wyze', 'ring',
|
||||
'arlo', 'nest', 'blink', 'eufy', 'yi',
|
||||
"ssid_patterns": [
|
||||
"cam",
|
||||
"camera",
|
||||
"ipcam",
|
||||
"webcam",
|
||||
"dvr",
|
||||
"nvr",
|
||||
"hikvision",
|
||||
"dahua",
|
||||
"reolink",
|
||||
"wyze",
|
||||
"ring",
|
||||
"arlo",
|
||||
"nest",
|
||||
"blink",
|
||||
"eufy",
|
||||
"yi",
|
||||
],
|
||||
'oui_manufacturers': [
|
||||
'Hikvision',
|
||||
'Dahua',
|
||||
'Axis Communications',
|
||||
'Hanwha Techwin',
|
||||
'Vivotek',
|
||||
'Ubiquiti',
|
||||
'Wyze Labs',
|
||||
'Amazon Technologies', # Ring
|
||||
'Google', # Nest
|
||||
"oui_manufacturers": [
|
||||
"Hikvision",
|
||||
"Dahua",
|
||||
"Axis Communications",
|
||||
"Hanwha Techwin",
|
||||
"Vivotek",
|
||||
"Ubiquiti",
|
||||
"Wyze Labs",
|
||||
"Amazon Technologies", # Ring
|
||||
"Google", # Nest
|
||||
],
|
||||
'mac_prefixes': {
|
||||
'C0:25:E9': 'TP-Link Camera',
|
||||
'A4:DA:22': 'TP-Link Camera',
|
||||
'78:8C:B5': 'TP-Link Camera',
|
||||
'D4:6E:0E': 'TP-Link Camera',
|
||||
'2C:AA:8E': 'Wyze Camera',
|
||||
'AC:CF:85': 'Hikvision',
|
||||
'54:C4:15': 'Hikvision',
|
||||
'C0:56:E3': 'Hikvision',
|
||||
'3C:EF:8C': 'Dahua',
|
||||
'A0:BD:1D': 'Dahua',
|
||||
'E4:24:6C': 'Dahua',
|
||||
"mac_prefixes": {
|
||||
"C0:25:E9": "TP-Link Camera",
|
||||
"A4:DA:22": "TP-Link Camera",
|
||||
"78:8C:B5": "TP-Link Camera",
|
||||
"D4:6E:0E": "TP-Link Camera",
|
||||
"2C:AA:8E": "Wyze Camera",
|
||||
"AC:CF:85": "Hikvision",
|
||||
"54:C4:15": "Hikvision",
|
||||
"C0:56:E3": "Hikvision",
|
||||
"3C:EF:8C": "Dahua",
|
||||
"A0:BD:1D": "Dahua",
|
||||
"E4:24:6C": "Dahua",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -333,6 +334,7 @@ WIFI_CAMERA_PATTERNS = {
|
||||
# Utility Functions
|
||||
# =============================================================================
|
||||
|
||||
|
||||
def get_frequency_risk(frequency_mhz: float) -> tuple[str, str]:
|
||||
"""
|
||||
Determine the risk level for a given frequency.
|
||||
@@ -342,10 +344,10 @@ def get_frequency_risk(frequency_mhz: float) -> tuple[str, str]:
|
||||
"""
|
||||
for _category, ranges in SURVEILLANCE_FREQUENCIES.items():
|
||||
for freq_range in ranges:
|
||||
if freq_range['start'] <= frequency_mhz <= freq_range['end']:
|
||||
return freq_range['risk'], freq_range['name']
|
||||
if freq_range["start"] <= frequency_mhz <= freq_range["end"]:
|
||||
return freq_range["risk"], freq_range["name"]
|
||||
|
||||
return 'low', 'Unknown Band'
|
||||
return "low", "Unknown Band"
|
||||
|
||||
|
||||
def get_sweep_preset(preset_name: str) -> dict | None:
|
||||
@@ -357,9 +359,9 @@ def get_all_sweep_presets() -> dict:
|
||||
"""Get all available sweep presets."""
|
||||
return {
|
||||
name: {
|
||||
'name': preset['name'],
|
||||
'description': preset['description'],
|
||||
'duration_seconds': preset['duration_seconds'],
|
||||
"name": preset["name"],
|
||||
"description": preset["description"],
|
||||
"duration_seconds": preset["duration_seconds"],
|
||||
}
|
||||
for name, preset in SWEEP_PRESETS.items()
|
||||
}
|
||||
@@ -379,7 +381,7 @@ def is_known_tracker(device_name: str | None, manufacturer_data: bytes | str | N
|
||||
if device_name:
|
||||
name_lower = device_name.lower()
|
||||
for _tracker_id, tracker_info in BLE_TRACKER_SIGNATURES.items():
|
||||
for pattern in tracker_info.get('patterns', []):
|
||||
for pattern in tracker_info.get("patterns", []):
|
||||
if pattern in name_lower:
|
||||
return tracker_info
|
||||
|
||||
@@ -393,9 +395,9 @@ def is_known_tracker(device_name: str | None, manufacturer_data: bytes | str | N
|
||||
return None
|
||||
|
||||
if len(mfr_bytes) >= 2:
|
||||
company_id = int.from_bytes(mfr_bytes[:2], 'little')
|
||||
company_id = int.from_bytes(mfr_bytes[:2], "little")
|
||||
for _tracker_id, tracker_info in BLE_TRACKER_SIGNATURES.items():
|
||||
if tracker_info.get('company_id') == company_id:
|
||||
if tracker_info.get("company_id") == company_id:
|
||||
return tracker_info
|
||||
|
||||
return None
|
||||
@@ -405,18 +407,18 @@ def is_potential_camera(ssid: str | None = None, mac: str | None = None, vendor:
|
||||
"""Check if a WiFi device might be a hidden camera."""
|
||||
if ssid:
|
||||
ssid_lower = ssid.lower()
|
||||
for pattern in WIFI_CAMERA_PATTERNS['ssid_patterns']:
|
||||
for pattern in WIFI_CAMERA_PATTERNS["ssid_patterns"]:
|
||||
if pattern in ssid_lower:
|
||||
return True
|
||||
|
||||
if mac:
|
||||
mac_prefix = mac[:8].upper()
|
||||
if mac_prefix in WIFI_CAMERA_PATTERNS['mac_prefixes']:
|
||||
if mac_prefix in WIFI_CAMERA_PATTERNS["mac_prefixes"]:
|
||||
return True
|
||||
|
||||
if vendor:
|
||||
vendor_lower = vendor.lower()
|
||||
for manufacturer in WIFI_CAMERA_PATTERNS['oui_manufacturers']:
|
||||
for manufacturer in WIFI_CAMERA_PATTERNS["oui_manufacturers"]:
|
||||
if manufacturer.lower() in vendor_lower:
|
||||
return True
|
||||
|
||||
@@ -435,15 +437,15 @@ def get_threat_severity(threat_type: str, context: dict | None = None) -> str:
|
||||
Severity level string
|
||||
"""
|
||||
threat_info = THREAT_TYPES.get(threat_type, {})
|
||||
base_severity = threat_info.get('default_severity', 'medium')
|
||||
base_severity = threat_info.get("default_severity", "medium")
|
||||
|
||||
if context:
|
||||
# Upgrade severity based on signal strength (closer = more concerning)
|
||||
signal = context.get('signal_strength')
|
||||
signal = context.get("signal_strength")
|
||||
if signal and signal > -50: # Very strong signal
|
||||
if base_severity == 'medium':
|
||||
return 'high'
|
||||
elif base_severity == 'high':
|
||||
return 'critical'
|
||||
if base_severity == "medium":
|
||||
return "high"
|
||||
elif base_severity == "high":
|
||||
return "critical"
|
||||
|
||||
return base_severity
|
||||
|
||||
Reference in New Issue
Block a user