Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Script para escanear la red en busca de servidores y servicios" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
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.
Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Script para escanear la red en busca de servidores y servicios" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
febrero 10, 2010 a las 12:48 pm
Puede darme dinero….
febrero 10, 2010 a las 1:51 pm
Muy bueno el script, anda de diez 😉
agosto 13, 2010 a las 5:05 pm
hola como estas que tengo que agregar para que tambien me tire el nombee del equipo, y por que en una red de maquinas win no me descubre todas las maquinas aunque si responden en un ping?
agosto 16, 2010 a las 10:07 am
@Jose Luis Pereira: Hola! Para hacer que te devuelva el nombre del equipo puedes usar un netbios resolver, por ejemplo: http://unixwiz.net/tools/nbtscan.html