El código está disponible en el GitHub de 0verl0ad:
https://github.com/0verl0ad/pyJuanker/blob/master/scripts/portScan.py
.png)
Empezando por la parte de multiprocessing, declaramos un máximo de 50 procesos paralelos en la línea 44 y, a continuación, lanzamos la función scan cuyos parámetros son el rango de puertos a escanear.
La función scan abre un socket a cada puerto de la ip destino con un timeout de 1 segundo (este tiempo se propria reducir y no debería haber problemas pero influye la conexión por eso he optado en dejarlo a 1 segundo) y espera la respuesta. Si es 0 el puerto estará abierto, mientras que si es un valor distinto no (o el script no es capaz de confirmar que lo esté).
Con todo esto, conforme vaya obteniendo cada proceso el estado del puerto irá mostrándose por pantalla.
¿Cosas que se podrían mejorar?
- Que también soporte UDP como protocolo, lo cual es tan simple como cambiar un parámetro en la declaración del socket.
- Añadir el numero de procesos paralelos como parámetro que basta con añadir otra opcion a argparse.
- Identificar los servicios asociados a los puertos abiertos. Esto se podría implementar creando un diccionario con el puerto y su servicio asociado a partir de la información del fichero /etc/services (en el caso de GNU/Linux) con lo que sería útil para los puertos por defecto aunque pudiera llevar a falsos positivos en la identificación de servicios.
No hay comentarios:
Publicar un comentario