From 698303dfb8f47f799ee2824080db25985a2eb1e8 Mon Sep 17 00:00:00 2001 From: 7ka1 <7ka1@noreply.localhost> Date: Fri, 6 Mar 2026 10:35:51 +0000 Subject: [PATCH] Actualiser 7lna.py --- 7lna.py | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/7lna.py b/7lna.py index 6fa4181..b3cc214 100644 --- a/7lna.py +++ b/7lna.py @@ -52,7 +52,7 @@ class RealTimeShieldHandler(FileSystemEventHandler): class Antivirus7LnA(ctk.CTk): def __init__(self): super().__init__() - self.title("7LnA Security Suite - V10 Quantum Edition") + self.title("7LnA Security Suite - V10.1 Quantum Edition") self.geometry("1250x850") self.minsize(1000, 700) @@ -96,7 +96,7 @@ class Antivirus7LnA(ctk.CTk): self.btn_history = self.create_nav_button("📜 Rapports", 8, "history") 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.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.grid(row=4, column=0, columnspan=3, pady=20, sticky="nsew") 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): 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() 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): frame = ctk.CTkFrame(self, fg_color="transparent") 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="đŸ›Ąïž 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") 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): 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"): - 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()}-> Ouvrez un terminal et tapez : sudo apt install arp-scan\n", "warning") + self.audit_console.insert("end", f"{self.get_time_prefix()}[!] Erreur : arp-scan introuvable.\n", "danger") return 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.stdin.write(pwd + '\n') process.stdin.flush() + count = 0 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(): - self.audit_console.insert("end", f"{self.get_time_prefix()}[-] Mot de passe refusĂ© par le systĂšme.\n", "danger") - process.terminate() + self.audit_console.insert("end", f"{self.get_time_prefix()}[-] Mot de passe refusĂ©.\n", "danger") break - else: - # Coloriser les adresses IP pour une meilleure lisibilitĂ© - if "192.168." in line or "10.0." in line: - self.audit_console.insert("end", line, "success") - else: - self.audit_console.insert("end", line) + + # Si la ligne contient une IP (format x.x.x.x) + if line.strip() and (line[0].isdigit()): + self.audit_console.insert("end", f" đŸ“± Appareil trouvĂ© : {line.strip()}\n", "success") + count += 1 + self.audit_console.see("end") process.wait() - if process.returncode == 0: - 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") + self.audit_console.insert("end", f"\n{self.get_time_prefix()}[+] Scan terminĂ©. {count} appareils dĂ©tectĂ©s sur votre WiFi.\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: - 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) --- def init_tools_view(self):