Qué es
Mi Trabajo Fin de Grado de ASIR: una aplicación de escritorio en Python (interfaz con CustomTkinter) que combina dos herramientas en un único cliente: un escáner de puertos/hosts con fingerprinting de sistema operativo, y un chat cliente-servidor cifrado con TLS/SSL, autenticación por roles y panel de administración.
Por qué lo hice
Quería un proyecto final que no fuera solo “una cosa”, sino que tocara varias partes de lo aprendido en el ciclo: redes a bajo nivel (sockets, Scapy, fragmentación de paquetes), seguridad (cifrado, censura, control de acceso) y una interfaz gráfica real que alguien pudiera usar sin tocar la terminal.
Cómo funciona
El escaneo de puertos usa Scapy para construir paquetes TCP/IP a medida (SYN scans, fragmentación, fingerprinting por banners), mientras que el chat monta un servidor multihilo donde cada cliente se atiende en su propio hilo:
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain(certfile="server-cert.pem", keyfile="server-key.key")
server_socket = context.wrap_socket(server_socket, server_side=True)
while True:
client_socket, address = server_socket.accept()
clients.append(client_socket)
thread = threading.Thread(target=client_thread, args=(client_socket, clients, usernames))
thread.daemon = True
thread.start()
Un UserManager gestiona usuarios, roles (user/admin) y bloqueos, y el panel de administración permite expulsar, banear o crear usuarios sin tocar el servidor directamente.
He escrito el desglose técnico completo de la herramienta —escáner de puertos con fingerprinting de SO, escáner de hosts por ARP con topología visual, y la arquitectura del chat cifrado.
// Desglose técnico completo TFG: escáner de red y chat cifrado en PythonStack
| Pieza | Uso |
|---|---|
| Python | Lógica de cliente, servidor y escáner |
| CustomTkinter | Interfaz gráfica |
| Scapy | Construcción de paquetes para el escáner |
| SSL/TLS | Cifrado de la comunicación del chat |
| Threading | Servidor multicliente y recepción sin bloqueo |
Qué aprendí
La fragmentación manual de paquetes IPv4 fue la parte que más me costó — probé con Scapy y con raw sockets, y ninguno de los dos consiguió que los fragmentos llegaran a verse en las capturas de red, probablemente por reensamblado a nivel de kernel. Ahí aprendí más de las limitaciones reales del sistema operativo que si hubiera funcionado a la primera.