Actualiser 7lna.py

This commit is contained in:
2026-03-06 10:35:51 +00:00
parent 0258e1b479
commit 698303dfb8

47
7lna.py
View File

@@ -52,7 +52,7 @@ class RealTimeShieldHandler(FileSystemEventHandler):
class Antivirus7LnA(ctk.CTk): class Antivirus7LnA(ctk.CTk):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.title("7LnA Security Suite - V10 Quantum Edition") self.title("7LnA Security Suite - V10.1 Quantum Edition")
self.geometry("1250x850") self.geometry("1250x850")
self.minsize(1000, 700) self.minsize(1000, 700)
@@ -96,7 +96,7 @@ class Antivirus7LnA(ctk.CTk):
self.btn_history = self.create_nav_button("📜 Rapports", 8, "history") self.btn_history = self.create_nav_button("📜 Rapports", 8, "history")
self.btn_update = self.create_nav_button("🔄 Mise à jour", 9, "update") self.btn_update = self.create_nav_button("🔄 Mise à jour", 9, "update")
self.version_label = ctk.CTkLabel(self.sidebar, text="v10.0 - Quantum", text_color="#6B7280", font=ctk.CTkFont(weight="bold")) self.version_label = ctk.CTkLabel(self.sidebar, text="v10.1 - Quantum", text_color="#6B7280", font=ctk.CTkFont(weight="bold"))
self.version_label.grid(row=10, column=0, pady=20, sticky="s") self.version_label.grid(row=10, column=0, pady=20, sticky="s")
self.views = {} self.views = {}
@@ -233,7 +233,7 @@ class Antivirus7LnA(ctk.CTk):
self.scan_console = ctk.CTkTextbox(frame, font=ctk.CTkFont(family="Consolas", size=13), fg_color="#111827", corner_radius=10) self.scan_console = ctk.CTkTextbox(frame, font=ctk.CTkFont(family="Consolas", size=13), fg_color="#111827", corner_radius=10)
self.scan_console.grid(row=4, column=0, columnspan=3, pady=20, sticky="nsew") self.scan_console.grid(row=4, column=0, columnspan=3, pady=20, sticky="nsew")
self.setup_console_tags(self.scan_console) self.setup_console_tags(self.scan_console)
self.scan_console.insert("end", f"{self.get_time_prefix()}[*] Moteur de détection V10 prêt...\n", "info") self.scan_console.insert("end", f"{self.get_time_prefix()}[*] Moteur de détection V10.1 prêt...\n", "info")
def run_rootkit_scan(self): def run_rootkit_scan(self):
self.get_sudo_password(lambda pwd: threading.Thread(target=self._exec_rootkit, args=(pwd,), daemon=True).start()) self.get_sudo_password(lambda pwd: threading.Thread(target=self._exec_rootkit, args=(pwd,), daemon=True).start())
@@ -363,7 +363,7 @@ class Antivirus7LnA(ctk.CTk):
if console == self.scan_console: self.scan_progress.stop() if console == self.scan_console: self.scan_progress.stop()
console.see("end") console.see("end")
# --- VUE : AUDIT & PARE-FEU (AVEC WIFI GUARD V10) --- # --- VUE : AUDIT & PARE-FEU (AVEC WIFI GUARD V10.1) ---
def init_audit_view(self): def init_audit_view(self):
frame = ctk.CTkFrame(self, fg_color="transparent") frame = ctk.CTkFrame(self, fg_color="transparent")
frame.grid_rowconfigure(2, weight=1) frame.grid_rowconfigure(2, weight=1)
@@ -377,8 +377,6 @@ class Antivirus7LnA(ctk.CTk):
ctk.CTkButton(btn_frame, text="⚙️ Lancer l'Audit Processus", command=self.run_audit_thread, fg_color="#D97706", hover_color="#B45309", height=40).pack(side="left", padx=(0, 10)) ctk.CTkButton(btn_frame, text="⚙️ Lancer l'Audit Processus", command=self.run_audit_thread, fg_color="#D97706", hover_color="#B45309", height=40).pack(side="left", padx=(0, 10))
ctk.CTkButton(btn_frame, text="🛡️ Vérifier UFW", command=self.check_firewall, fg_color="#4B5563", hover_color="#374151", height=40).pack(side="left", padx=(0, 10)) ctk.CTkButton(btn_frame, text="🛡️ Vérifier UFW", command=self.check_firewall, fg_color="#4B5563", hover_color="#374151", height=40).pack(side="left", padx=(0, 10))
# NOUVEAU BOUTON : WIFI GUARD
ctk.CTkButton(btn_frame, text="📡 WiFi Guard (Scanner Intrus)", command=self.run_wifi_guard_prompt, fg_color="#059669", hover_color="#047857", height=40).pack(side="left") ctk.CTkButton(btn_frame, text="📡 WiFi Guard (Scanner Intrus)", command=self.run_wifi_guard_prompt, fg_color="#059669", hover_color="#047857", height=40).pack(side="left")
self.audit_console = ctk.CTkTextbox(frame, font=ctk.CTkFont(family="Consolas", size=13), fg_color="#111827", corner_radius=10) self.audit_console = ctk.CTkTextbox(frame, font=ctk.CTkFont(family="Consolas", size=13), fg_color="#111827", corner_radius=10)
@@ -410,38 +408,45 @@ class Antivirus7LnA(ctk.CTk):
def _exec_wifi_guard(self, pwd): def _exec_wifi_guard(self, pwd):
self.audit_console.delete("0.0", "end") self.audit_console.delete("0.0", "end")
self.audit_console.insert("end", f"{self.get_time_prefix()}[*] Démarrage du scan réseau (arp-scan). Recherche d'intrus...\n", "info") self.audit_console.insert("end", f"{self.get_time_prefix()}[*] Démarrage du scan réseau (arp-scan)... \n", "info")
if not shutil.which("arp-scan"): if not shutil.which("arp-scan"):
self.audit_console.insert("end", f"{self.get_time_prefix()}[!] L'outil arp-scan n'est pas installé.\n", "warning") self.audit_console.insert("end", f"{self.get_time_prefix()}[!] Erreur : arp-scan introuvable.\n", "danger")
self.audit_console.insert("end", f"{self.get_time_prefix()}-> Ouvrez un terminal et tapez : sudo apt install arp-scan\n", "warning")
return return
try: try:
cmd = ['sudo', '-S', 'arp-scan', '--localnet'] # Utilisation de stdbuf ou bufsize pour forcer l'affichage ligne par ligne sans lag
cmd = ['sudo', '-S', 'arp-scan', '--localnet', '--ignoredups']
process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1) process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1)
process.stdin.write(pwd + '\n') process.stdin.write(pwd + '\n')
process.stdin.flush() process.stdin.flush()
count = 0
for line in iter(process.stdout.readline, ''): for line in iter(process.stdout.readline, ''):
# On filtre les lignes inutiles (warnings de fichiers ou headers techniques)
if any(x in line.lower() for x in ["permission denied", "starting arp-scan", "packets received", "ending arp-scan", "[sudo]"]):
continue
if "incorrect password" in line.lower() or "try again" in line.lower(): if "incorrect password" in line.lower() or "try again" in line.lower():
self.audit_console.insert("end", f"{self.get_time_prefix()}[-] Mot de passe refusé par le système.\n", "danger") self.audit_console.insert("end", f"{self.get_time_prefix()}[-] Mot de passe refusé.\n", "danger")
process.terminate()
break break
else:
# Coloriser les adresses IP pour une meilleure lisibilité # Si la ligne contient une IP (format x.x.x.x)
if "192.168." in line or "10.0." in line: if line.strip() and (line[0].isdigit()):
self.audit_console.insert("end", line, "success") self.audit_console.insert("end", f" 📱 Appareil trouvé : {line.strip()}\n", "success")
else: count += 1
self.audit_console.insert("end", line)
self.audit_console.see("end") self.audit_console.see("end")
process.wait() process.wait()
if process.returncode == 0: self.audit_console.insert("end", f"\n{self.get_time_prefix()}[+] Scan terminé. {count} appareils détectés sur votre WiFi.\n", "info")
self.audit_console.insert("end", f"\n{self.get_time_prefix()}[+] Scan réseau terminé. Vérifiez qu'aucun appareil inconnu n'est dans la liste.\n", "info")
if count > 15: # Seuil d'alerte arbitraire
send_desktop_notification("WiFi Guard", f"Attention : Beaucoup d'appareils ({count}) sont connectés à votre réseau.", is_critical=True)
except Exception as e: except Exception as e:
self.audit_console.insert("end", f"{self.get_time_prefix()}❌ Erreur WiFi Guard : {e}\n", "danger") self.audit_console.insert("end", f"❌ Erreur : {e}\n", "danger")
# --- VUE : OUTILS AVANCÉS (V10) --- # --- VUE : OUTILS AVANCÉS (V10) ---
def init_tools_view(self): def init_tools_view(self):