A menudo nos encontramos con inconvenientes de conexión en las redes o sin acceso a Internet, momentos en los cuales podríamos necesitar hacer un escaneo de la red, o saber si la regla de firewall está funcionando. Para ello, herramientas como Nmap podrían ser de utilidad, pero en caso de que no estén a nuestro alcance y no dispongamos de una conexión para descargarlas, podemos automatizar comandos de sistema operativo con Python.
Algo que tenemos que tener presente siempre es que, si contamos con un live-CD o live-USB de un sistema operativo Linux, este por defecto trae instalado Python, un potente lenguaje de programación que entre muchas de sus funciones permite automatizar procesos. Es por eso que es muy usado en tareas como penetration testing.
A continuación mostraremos cómo crear un script de red, que permitirá detectar equipos encendidos en la red haciendo lo que se conoce como ping sweep o barrido de ping, a través de la herramienta ping propiamente:
Para empezar a entender este programa, comenzaremos a detallar las líneas más importantes.
Lo que hace este script de automatización es ejecutar un ping a cada dirección de IP en la red. Por ejemplo, en máscara de subred /24, podrá hacerlo solo con los 3 primeros octetos de la IP. Por eso mencionamos la importancia de crear la herramienta a la medida de la situación.
Entonces, el script invoca a Python, esto es necesario ya que al tratarse de un lenguaje interpretado, debe invocar su intérprete, que en este caso es /usr/bin/Python.
La línea número 2 importa las librerías sys y subprocess. Sys provee funcionalidades y variables relacionadas directamente con el intérprete, mientras que subprocess permite trabajar de forma directa con órdenes del sistema operativo. Vale destacar que pueden importarse por separado en líneas diferentes.
A partir de la quinta línea, básicamente lo que hace es mostrar un ejemplo de ejecución si el comando no es correcto. Esto quiere decir que si solo se ejecutara la herramienta en Python, sin ningún argumento, la ayuda dirá que debes ejecutar, por ejemplo, "psweep.py 10.0.0. ", que es lo mismo que herramienta + direcciones IP.
A partir de la línea 6, si se ejecuta correctamente con el rango de direcciones IP, lo que hace es ejecutar un solo ping a cada dirección en la red, para lo cual usa el comando ping –c1. Esto se aplica en entornos Unix, ya que los ping son infinitos.
Una vez hecho esto, la respuesta es la siguiente:
Como puede verse, claramente las respuestas Host Unreachable significan que no responde nadie. Si bien no significa que no haya un equipo, ya que puede tener bloqueada la respuesta en su firewall, es un buen comienzo para ver si hay equipos en la red que responden al comando.
En caso de que responda un dispositivo conectado, la respuesta se vería de la siguiente manera:
El equipo respondió, por lo que marca que en la dirección IP 192.168.221.128 hay un equipo encendido y conectado sin marcar la respuesta como host unreachable.
Como se aprecia en los ejemplos, la herramienta solo hace un ping para obtener una respuesta positiva o negativa y pasar a la siguiente dirección IP, y así sucesivamente hasta analizar todo el rango de direcciones que se establezca.
Estos conceptos de programación, orientados a la automatización, serán muy útiles a la hora de realizar diferentes tipos de auditorías. Si bien el comando puede ejecutarse manualmente, habría que hacerlo una vez por cada dirección IP, lo que significa que en este caso hubiera sido unas 254 veces -lo cual lo vuelve un trabajo muy tedioso.
De esta manera, en tan solo 18 líneas de código, evitamos tener que hacer este trabajo manualmente. Aquí la creatividad queda a criterio de cada uno, ya que por ejemplo, podría hacerse que también muestre las direcciones MAC (dirección física de placa de red) pertenecientes a cada IP. Esto comenzará a abrir ampliamente nuestras posibilidades, permitiéndonos no estar atados a ninguna herramienta particular, sino a conceptos.
De esta forma, cuando no disponemos de las herramientas que usamos habitualmente, sin ningún problema podemos crear nuestro propio programa, que se adapte perfectamente a la situación para la que lo necesitamos.