El rincón de Zerial

Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio

Script para escanear la red en busca de servidores y servicios

Febrero 10th, 2010 · 2 Comentarios

Hace un par de días tuve la necesidad de escanear 3 redes completas, mas de 50 direcciones ip, en busca de servicios que corrieran en ellas. Obviamente, no iba a ingresar a cada servidor y hacer un netstat o revisar uno por uno que servicios tenia instalado, si para eso existe nmap!
Lo que hicste fue separar los rangos de ip en archivos distintos, para tener un orden y escanear la red en orden según los segmentos y luego hice un script que leia cada archivo y escaneaba la ip en busca de servicios, la salida del nmap la parseaba y lo guarda en un archivo separado por comas. En un principio el script mostraba todo en el stdout pero para que quedara más ordenado, preferí hacerlo en un CSV para poder abrirlo con oocalc.
El script me genera un archivo con la siguiente información:

host, IP, Servicio, Puerto, Version

El script es el siguiente:

#!/bin/bash

nmap=/usr/bin/nmap
params="-sV"
tmp_file=/tmp/nmap_scanner_output
output=Servidores.csv
export SCANNER_ERROR=0

echo "host,IP,Servicio,Puerto,Version" >> $output
for ips in ips.*
do
	echo "Analizando $ips ..."
	for ip in $(cat $ips)
	do
		echo -e "\t-> $ip ..."
		ping -c 1 $ip 1>/dev/null 2>&1|| export SCANNER_ERROR=1
		if [ $SCANNER_ERROR = "1" ]; then
			echo -e "\t\t- Host no activo"
		fi
		if [ $SCANNER_ERROR = "0" ]; then
			$nmap $params $ip |grep -v "Starting Nmap" |grep -v "Nmap scan report" |grep -v "Host is up" |grep -v "Not shown" |grep -v "Service detection performed" |grep -v "Nmap done" > $tmp_file
			export _host=$(grep "Service Info" $tmp_file |sed 's/,//g'|grep "Host" |awk -F ' ' {'print $4'} |sed 's/;//g')
			grep tcp $tmp_file |scanner_ip=$ip awk -F " " '{print ENVIRON["_host"]","ENVIRON["scanner_ip"]","$3","$1","$4,$5,$6,$7,$8;}' >>$output
			echo -e "\n" >>$output
		fi
		export SCANNER_ERROR=0
	done
done

El script necesita para funcionar archivos con el listado de direcciones ip. Los (o el) archivo(s) se deben llamar “ips.“. En mi caso, tengo los siguientes archivos:
ips.192 ips.10 ips.172
Dentro de cada archivo hay direcciones del tipo 192.168.0.X, 10.0.0.X, 172.20.20.X…

$ sh scan.sh
Analizando ips.10 ...
-> 10.0.0.2 ...
-> 10.0.0.3 ...
-> 10.0.0.11 ...
- Host no activo
-> 10.0.0.20 ...
- Host no activo
-> 10.0.0.21 ...
- Host no activo
-> 10.0.0.70 ...
-> 10.0.0.72 ...
-> 10.0.0.73 ...
Analizando ips.172 ...
-> 172.20.20.2 ...
-> 172.20.20.3 ...
Analizando ips.192 ...
-> 192.168.0.55 ...
-> 192.168.0.101 ...

[...]

El script generará un output a un archivo llamado “Servidores.csv”, el cual lo podemos encontrar en la misma ruta donde tenemos el script.

Posts relacionados

Etiquetas: GNU/Linux · Tips

2 respuestas hasta ahora ↓

  • 1
    Homero Simpson CHILE Windows NT Google Chrome 4.0.249.78 // Feb 10, 2010 a las 12:48 pm

    Puede darme dinero….

  • 2
    Ariel ARGENTINA Linux Opera 9.80 // Feb 10, 2010 a las 1:51 pm

    Muy bueno el script, anda de diez ;)

Deja un Comentario