mirror of
https://github.com/Oxbian/SIDPS.git
synced 2025-05-17 14:08:14 +02:00
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
from datetime import datetime, time, timedelta
|
|
from scapy.all import IP
|
|
|
|
# Dictionnaire pour stocker les dernières alertes envoyées pour chaque IP
|
|
last_alert_time = {}
|
|
|
|
# Définir la plage horaire
|
|
start_time = time(21, 0)
|
|
end_time = time(6, 0)
|
|
|
|
|
|
def rule(packet, objets):
|
|
"""
|
|
Règle pour détecter l'activité réseau entre une plage horaire donnée.
|
|
"""
|
|
global last_alert_time
|
|
|
|
if IP in packet:
|
|
|
|
src_ip = packet[IP].src
|
|
dst_ip = packet[IP].dst
|
|
|
|
# Obtenir l'heure actuelle
|
|
current_time = datetime.now()
|
|
|
|
# Vérifier si l'heure est dans la plage
|
|
if rule.start_time <= current_time.time() or current_time.time() <= end_time:
|
|
# Vérifier si une alerte a déjà été envoyée récemment pour cette IP
|
|
if src_ip in last_alert_time:
|
|
time_since_last_alert = current_time - last_alert_time[src_ip]
|
|
if time_since_last_alert < timedelta(minutes=5): # 5 minutes de délai
|
|
return # Ne pas envoyer une nouvelle alerte
|
|
|
|
# Envoyer une alerte
|
|
objets["database"].send_alert(current_time, 5, None, f"Activité réseau détectée entre {start_time} et {end_time}", src_ip, dst_ip, proto="TCP", reason=f"Activité réseau à {current_time.time()}",act="Alerte")
|
|
print(f"Alerte : activité réseau détectée à {current_time.time()} entre {src_ip} et {dst_ip}")
|
|
|
|
# Mettre à jour le temps de la dernière alerte pour cette IP
|
|
last_alert_time[src_ip] = current_time
|