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.
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.


2 respuestas hasta ahora ↓
1
Homero Simpson
// Feb 10, 2010 a las 12:48 pm
Puede darme dinero….
2
Ariel
// Feb 10, 2010 a las 1:51 pm
Muy bueno el script, anda de diez
Deja un Comentario