Aplicación de consola escrita en Python la cual incluye algunas utilidades empleando los módulos scapy y socket.
Utilidades que incluye
- Escaneo de dispositivos (Scan devices on WLAN)
- Escaneo de puertos (Scan ports of an specific device)
- Suplantación de ARP (ARP spoofing)
Saber más
- Desde que me empecé a interesar por la ciberseguridad mientras me formaba en Python, siempre había deseado crear mi propia aplicación con utilidades para este campo.
- He decidido recopilar tres sencillas utilidades en una única aplicación de consola para así poder afianzar mi proceso de aprendizaje.
- La aplicación consume, principalmente, métodos del módulo scapy. Muy útil y comúnmente empleado para la manipulación de paquetes en red.
Requerimientos
Para instalar y ejecutar correctamente el proyecto, deberás tomar las siguientes consideraciones:
- Tener Git instalado.
- Tener Python 3 instalado.
- Sistema operativo Windows con el driver WinPcap versión 4.1.3 instalado.
- Descargar repositorio
git clone https://github.com/victorsanantonio/pywlan.git
- Posicionarse en la raíz del proyecto
cd .\pywlan
- Crear entorno virual
python -m virtualenv venv
- Activar entorno virtual
.\venv\Scripts\activate
- Instalar dependencias
pip install -r requirements.txt
- Una vez estés en la raíz del proyecto, ejecuta el siguiente comando.
python main.py
Este es el menú con el que podemos interaccionar con la aplicación.
Pulsa la tecla 1 y ENTER para acceder al escáner de dispositivos. A continuación, solicitará que ingresemos un rango de IP:
El rango de IPv4 que introduciremos, en mi caso será:
192.168.1.0/24
Estos son los dispositivos conectados a mi red:
Como se puede apreciar, conocemos su IP privada y su dirección de MAC.
Nota: Si deseas exportar los resultados, introduce la palabra
Yes
o la letraY
:
Se generará un directorio
data/
en la raíz del proyecto con un archivo CSV. Esto funcionará de igual manera para la utilidad de escaneo de puertos.
Ahora que conocemos los dispositivos conectados a nuestra red... Pulsa la tecla 2 y ENTER para acceder al escáner de puertos.
A continuación, solicitará que ingresemos una IP, puerto de comienzo y puerto de fin.
Finalizado el escaneo: Nos muestra un resultado en el que visualizaremos el número de puerto y si está abierto o cerrado.
Nota: Para esta implementación se utiliza el módulo socket debido a dificultades y problemas encontrados con la implementación en scapy.
Pulsa la tecla 3 y ENTER para acceder a la suplantación de ARP.
A continuación, nos solicitará una IP objetivo y una IP de entrada:
Tablas de ARP del equipo víctima antes del ataque. Las direcciones físicas señaladas son distintas.
Tablas de ARP del equipo víctima durante el ataque. Las direcciones físicas indicadas son iguales.
Para detener el ataque, introduce el comando Ctrl + C. Las tablas de ARP volverán a sus valores normales una vez finalizado.
Pulsa la tecla 4 y ENTER para detener la ejecución de la aplicación.
Se hace uso principalmente del paradigma de la orientación a objetos con aplicaciones prácticas de herencia. Así como la implementación de dataclasses.
'''
Scanner es la clase padre.
Comparte métodos que serán usados varias funcionalidades principales
'''
class Scanner:
pass
'''
Las siguientes clases heredan de Scanner.
Esto es debido a que comparten varios métodos, evitando duplicidad de código.
'''
class DeviceScanner(Scanner):
pass
class ARPSpoofer(Scanner):
pass
Para representar más fácilmente los resultados de los escaneos, se ha decidido representar las clases Client
y Port
como clases modelo:
'''
Dataclass Cliente con atributos de su IP y su dirección MAC.
'''
class Client:
ip: str
mac: str
'''
Dataclass Puerto con atributos de su número y un booleano que indica si está abierto o cerrado.
'''
class Port:
port: int
is_opened: bool