Descubriendo la red con Python y Nmap – Parte 3

Buenos vamos con la siguiente entrega de Python y Nmap, recordar que tenemos la parte 1 y parte 2, para entender que vamos a hacer en este post, donde vamos a crear un pequeño script que nos almacenara en un fichero los host que están levantados, que luego podemos usar en otras herramientas.

python-nmap

Aquí tenemos nuestro pequeño script que vamos a ir explicando poco a poco, el cual nos guardara un listado de las ips una por linea.

#!/usr/bin/python

import nmap

nm = nmap.PortScanner()
host_scan = raw_input('Host scan: ')
while host_scan == "":
	host_scan = raw_input('Host scan: ')
nm.scan(hosts=host_scan, arguments='-n -sP -PE -PA21,23,80,3389')
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]
archivo = open('scan.txt', 'w')
for host, status in hosts_list:
	print host, status
	archivo.write(host+'\n')
archivo.close()	

 

Lo primero que tenemos que hacer es inicializar el script en python, importar nmap y lo inicializamos.

 

#!/usr/bin/python

import nmap
nm = nmap.PortScanner()

 

A continuación pedimos al usuario el host que vamos a escanear, puede ser un rango utilizando /24 /20… Para que no nos deje en blanco el valor utilizamos un while para que nos los pida mientras lo dejemos en blanco, podríamos completar las comprobaciones con una expresión regular para asegurarnos que es un ip, pero eso os lo dejo a vosotros 😉

 

host_scan = raw_input('Host scan: ')
while host_scan == "":
	host_scan = raw_input('Host scan: ')

 

Ahora que ya tenemos los datos vamos a proceder al escaneo y luego a su guardado en un fichero.

Lanzamos un escaneo de nmap con -n para no hacer resolución de dns, -sP para realizar sondeos de ping, -PE para un análisis ICMP y -PA realiza un ping TCP ACK con lo que podemos hacer un buen descubrimiento de la red, una vez obtenidos los datos recorremos el objeto nm para guardarlos en hosts_list que luego es el que recorreremos para guardarlos en un fichero.

 

nm.scan(hosts=host_scan, arguments='-n -sP -PE -PA21,23,80,3389')
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]

 

Vamos a crear el fichero scan.txt y vamos a ir guardado los hosts, por lo que creamos el fichero scan.txt con open y el parámetro w para que podamos escribir en el, recorremos la variable hosts_list y vamos imprimiendo en pantalla que host están levantado y los vamos guardando en el fichero, al acabar de recorrerlo lo cerramos y ya tenemos nuestro fichero listo, con los hosts levantados de la red.

 

archivo = open('scan.txt', 'w')
for host, status in hosts_list:
	print host, status
	archivo.write(host+'\n')
archivo.close()	

De esta manera tan sencilla podemos obtener un fichero con los hosts levantados de la red, listo para utilizarlos en otro programas o seguir avanzando este.

¿Quien se anima a continuar con el script y compartirlo con todos nosotros?

Y como siempre espero mi jamón, al final me va a tocar bajar a comprarlo 😉