Daos Portfolio

Intrusion Detection System (IDS)

This project is an application to detect network packets using Python and Scapy.

Language

Python.

Requirements

Make sure you have Python installed on your machine. Requires the following libraries:

  • scapy
  • tkinter

Code

				
					import tkinter as tk
from scapy.all import sniff, AsyncSniffer
import threading

class IDSApp:
    def __init__(self, master):
        self.master = master
        self.master.title("Sistema de Detección de Intrusos")
        
        # Ajustar el tamaño de la ventana
        self.master.geometry("600x400")  # Ancho x Alto

        self.start_button = tk.Button(master, text="Iniciar Detección", command=self.start_detection)
        self.start_button.pack(pady=5)

        self.stop_button = tk.Button(master, text="Detener Detección", command=self.stop_detection, state=tk.DISABLED)
        self.stop_button.pack(pady=5)

        # Crear un marco para contener el Text y el Scrollbar
        self.frame = tk.Frame(master)
        self.frame.pack(pady=5)

        # Crear el widget de texto
        self.output_text = tk.Text(self.frame, height=35, width=100)  # Aumentar el ancho
        self.output_text.pack(side=tk.LEFT)

        # Crear la barra de desplazamiento
        self.scrollbar = tk.Scrollbar(self.frame, command=self.output_text.yview)
        self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

        # Configurar el Text para usar la barra de desplazamiento
        self.output_text.config(yscrollcommand=self.scrollbar.set)

        self.sniffer = None  # Variable para almacenar el sniffer

    def packet_callback(self, packet):
        self.output_text.insert(tk.END, str(packet) + "\n")
        self.output_text.see(tk.END)

    def start_detection(self):
        self.start_button.config(state=tk.DISABLED)  # Deshabilitar botón de inicio
        self.stop_button.config(state=tk.NORMAL)      # Habilitar botón de detener
        self.sniffer = AsyncSniffer(prn=self.packet_callback, store=0)  # Usar AsyncSniffer
        self.sniffer.start()  # Iniciar la captura en un hilo separado

    def stop_detection(self):
        if self.sniffer:
            self.sniffer.stop()  # Detener la captura
            self.sniffer.join()   # Asegurarse de que el hilo termine
        self.start_button.config(state=tk.NORMAL)  # Habilitar botón de inicio
        self.stop_button.config(state=tk.DISABLED)  # Deshabilitar botón de detener

if __name__ == "__main__":
    root = tk.Tk()
    app = IDSApp(root)
    root.mainloop()
				
			

Dependencies

				
					certifi==2024.8.30
charset-normalizer==3.4.0
click==8.1.7
colorama==0.4.6
conan==2.8.0
fasteners==0.19
idna==3.10
Jinja2==3.1.4
joblib==1.4.2
MarkupSafe==3.0.1
nltk==3.9.1
numpy==2.1.1
pandas==2.2.3
patch-ng==1.18.0
python-dateutil==2.9.0.post0
pytz==2024.2
pywin32==306
PyYAML==6.0.2
regex==2024.9.11
requests==2.32.3
scapy==2.6.0
scikit-learn==1.5.2
scipy==1.14.1
six==1.16.0
threadpoolctl==3.5.0
tqdm==4.66.5
tzdata==2024.2
urllib3==1.26.20