Demostración en vídeo de este post:
Me atrevería a afirmar que Nmap es la herramienta más difundida en el mundo del pentesting y el Hacking, gracias al tiempo que lleva en desarrollo, cuenta con funcionalidades que son ideales para las primeras etapas de una auditoría de seguridad y por lo tanto, es fundamental conocerla en profundidad. No obstante, en ocasiones resulta interesante crear scripts y rutinas que permitan automatizar la ejecución de ésta y otras herramientas y una buena forma de hacerlo es con Python que gracias al amplio conjunto de librerías existente, facilita mucho esta tarea.
En primer lugar, hay tener en cuenta que existen muchas formas de integrar un lenguaje de programación como Python (o cualquier otro) con una utilidad como Nmap, por ejemplo se podría ejecutar la herramienta desde un script con la función os.system o con Popen y luego «parsear» la salida incluida en el flujo de STDOUT, pero este enfoque puede que no sea el más limpio u optimo. Es mejor utilizar alguna librería que ya incluya estas rutinas en lugar de «reinventar la rueda» y en este sentido, tenemos python-nmap.
Uso de Python-nmap
Se puede instalar con el comando «pip install python-nmap» y a continuación, es posible utilizar su API en un script o desde el interprete de Python. Por ejemplo:
La clase PortScanner se encarga de ejecutar el comando «nmap», por lo tanto la herramienta se debe encontrar instalada en el sistema y su directorio de instalación, ubicado en la variable de entorno PATH.
Por otro lado, cuando el escaneo finaliza los resultados se almacenan en un objeto del tipo «dict» lo que facilita trabajar con los datos al encontrarse estos en una estructura ordenada. Además, un objeto del tipo PortScanner cuenta con varios métodos que ayudan a obtener información sobre el escaneo que se ha realizado
Aunque la clase PortScanner es la que se suele utilizar con más frecuencia, también es posible ejecutar el escaneo en un segundo plano mientras el script realiza otras actividades, esto se consigue con la clase PortScannerAsync
Además de las clases PortScanner y PortScannerAsync, hay otro elemento que permite ejecutar escaneos con Nmap, en este caso de forma progresiva. La clase PortScannerYield se encarga de ejecutar el escaneo con Nmap y devolver cada resultado que la herramienta va generando. Esto es especialmente útil cuando se analiza un entorno de red completo y no se quiere esperar a ver resultados hasta que el escaneo termine sino de forma progresiva en la medida en la que Nmap va generando información.
Finalmente, para acceder a los resultados del escaneo es necesario recorrer la estructura, que como se ha mencionado anteriormente, es un objeto del tipo «dict». En este punto, es necesario consultar las claves de cada sección de la estructura e ir extrayendo la información que se necesita.
Como has podido comprobar, se trata de una librería sencilla y que permite ejecutar Nmap desde cualquier script en Python, aunque python-nmap es una buena alternativa, no es la única librería que hace esto, conviene revisar el Pypi para ver otras alternativas que pueden resultar igualmente interesantes.
Un saludo y Happy Hack!
Adastra.