Construir un escáner de red en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás cómo construir un escáner de red utilizando Python. El escáner de red utilizará la herramienta de línea de comandos nmap para escanear una dirección IP especificada y mostrar los resultados en una interfaz gráfica de usuario (GUI, por sus siglas en inglés) utilizando la biblioteca Tkinter.

Ejemplo de GUI de un escáner de red

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo configurar el proyecto e instalar las bibliotecas necesarias
  • Cómo importar las bibliotecas necesarias para la GUI y ejecutar la herramienta de línea de comandos nmap
  • Cómo definir una función de escaneo para recuperar la dirección IP ingresada por el usuario y escanear la red
  • Cómo crear la ventana principal de la GUI
  • Cómo agregar un campo de entrada para la dirección IP y un botón "Escanear red"
  • Cómo crear un área de texto para mostrar los resultados del escaneo
  • Cómo ejecutar el proyecto y realizar un escaneo de red

🏆 Logros

Después de completar este proyecto, podrás:

  • Configurar un proyecto de Python e instalar bibliotecas
  • Importar bibliotecas y utilizarlas en un script de Python
  • Crear una GUI utilizando Tkinter
  • Manejar la entrada del usuario y activar funciones
  • Utilizar la herramienta de línea de comandos nmap para escanear redes

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/NetworkingGroup(["Networking"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/ControlFlowGroup -.-> python/while_loops("While Loops") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") python/NetworkingGroup -.-> python/networking_protocols("Networking Protocols") subgraph Lab Skills python/while_loops -.-> lab-298855{{"Construir un escáner de red en Python"}} python/function_definition -.-> lab-298855{{"Construir un escáner de red en Python"}} python/importing_modules -.-> lab-298855{{"Construir un escáner de red en Python"}} python/using_packages -.-> lab-298855{{"Construir un escáner de red en Python"}} python/standard_libraries -.-> lab-298855{{"Construir un escáner de red en Python"}} python/classes_objects -.-> lab-298855{{"Construir un escáner de red en Python"}} python/catching_exceptions -.-> lab-298855{{"Construir un escáner de red en Python"}} python/os_system -.-> lab-298855{{"Construir un escáner de red en Python"}} python/networking_protocols -.-> lab-298855{{"Construir un escáner de red en Python"}} end

Configurar el proyecto

Crea un nuevo archivo de Python y llámalo network_scanner.py. Abre el archivo en un editor de código de tu elección.

cd ~/project
touch network_scanner.py

Luego, instala la herramienta de línea de comandos nmap, tkinter y python-nmap utilizando el siguiente comando:

sudo apt update
sudo apt-get install nmap -y
sudo apt-get install python3-tk -y
sudo pip install python-nmap
✨ Revisar Solución y Practicar

Importar bibliotecas necesarias

Al principio del archivo, importa las bibliotecas necesarias: tkinter para la interfaz gráfica de usuario (GUI) y subprocess para ejecutar la herramienta de línea de comandos nmap.

import tkinter as tk
import subprocess
✨ Revisar Solución y Practicar

Definir la función de escaneo

Define una función llamada scan_network que se activará cuando se haga clic en el botón "Escanear red". Esta función recuperará la dirección IP ingresada por el usuario, borrará el área de texto de resultados y ejecutará el comando nmap para escanear la red.

def scan_network():
    ip_address = entry_ip.get()
    result_text.delete(1.0, tk.END)
    result_text.insert(tk.END, f"Scanning network: {ip_address}\n\n")

    try:
        output = subprocess.check_output(["nmap", "-F", ip_address])
        result_text.insert(tk.END, output.decode("utf-8"))
    except subprocess.CalledProcessError:
        result_text.insert(tk.END, "An error occurred while scanning the network.")
✨ Revisar Solución y Practicar

Crear la ventana principal

Crea la ventana principal de la interfaz gráfica de usuario (GUI) utilizando la clase Tk() de Tkinter.

window = tk.Tk()
window.title("Network Scanner")
✨ Revisar Solución y Practicar

Agregar campo de entrada y botón de escaneo

Crea una etiqueta y un campo de entrada para que el usuario ingrese la dirección IP. Luego, crea un botón "Escanear red" que llamará a la función scan_network cuando se haga clic en él.

label_ip = tk.Label(window, text="Enter IP Address:")
label_ip.pack()
entry_ip = tk.Entry(window)
entry_ip.pack()
scan_button = tk.Button(window, text="Scan Network", command=scan_network)
scan_button.pack()
✨ Revisar Solución y Practicar

Agregar área de texto de resultados

Crea un área de texto utilizando la clase Text() de Tkinter. Esta área de texto mostrará los resultados del escaneo.

result_text = tk.Text(window)
result_text.pack()
✨ Revisar Solución y Practicar

Iniciar el bucle principal

Agrega la siguiente línea al final del archivo para iniciar el bucle principal de la interfaz gráfica de usuario (GUI):

window.mainloop()
✨ Revisar Solución y Practicar

Ejecutar el proyecto

Guarda el archivo y ejecútalo utilizando un intérprete de Python. Aparecerá la ventana de la interfaz gráfica de usuario (GUI).

cd ~/project
python network_scanner.py

Ingresa la dirección IP que deseas escanear en el campo de entrada y haz clic en el botón "Escanear red". El escaneo de la red se realizará utilizando nmap, y los resultados se mostrarán en el área de texto.

Ventana de la GUI del escáner de red
✨ Revisar Solución y Practicar

Resumen

En este proyecto, has aprendido cómo construir un escáner de red en Python utilizando la biblioteca Tkinter. El escáner de red utiliza la herramienta de línea de comandos nmap para escanear una dirección IP especificada. Los resultados se muestran en una interfaz gráfica de usuario (GUI), lo que permite a los usuarios realizar fácilmente escaneos de red y ver la salida. Puedes mejorar aún más el escáner de red agregando más funciones y mejorando la interfaz de usuario según tus requisitos.