Advertisement
angeldp

buscaHosts.sh

Jun 9th, 2015
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.20 KB | None | 0 0
  1. #!/bin/bash
  2. #angeldp
  3. #buscaHosts.sh
  4. # Busca los equipos conectados a una LAN determinada (red pasada como
  5. # parámetro o pedida al usuario si no se pasa nada.)
  6. # Lista las IPs activas en la red y, opcionalmente,
  7. # crea un fichero de configuración para el clusterSsh con las IPs de
  8. # los equipos activos.
  9. clear
  10. # Si no se ha pasado nada como parámetro; o éste no es una IP
  11. # se la solicito de forma interactiva
  12. # La cutre comprobación lo que hace es sustituir los puntos
  13. # de la IP por espacios y luego contar las palabras. Si no
  14. # son 4, es que no ha pasado nada parecido a una IP y se la pido.
  15. if [ `echo $1 | tr \. ' ' | wc -w` != 4 ]
  16.     then
  17.     echo "Indique la dirección de red a escanear: "
  18.     read IPvLAN
  19. else
  20.     IPvLAN=$1
  21. fi
  22. # Se deberá comprobar el contenido de IPvLAN, pero como el script es
  23. # para uso personal, ya me aseguraré de indicar un IP válida.
  24. # Lo que el script hará será escanear desde la dirección X.X.X.1 a la
  25. # X.X.X.254 buscando las IPs que estén activas.
  26. # Para hacerlo, primero guardo los 3 primeros octetos de la IP
  27. rangoIP=`echo $IPvLAN | cut -d. -f1-3`
  28. # Uso nmap para escanear el rango guardando las IPs activas en listaIPS
  29. echo "Escaneando la red..."
  30. listaIPS=`nmap -sP ${rangoIP}.1-254 | grep ${rangoIP}. | cut -d' ' -f5`
  31. # Quiero dar la opción de excluir alguna IP, como el gateway o el equipo
  32. # del profesor...
  33. echo "Señale, si lo desea, la lista de direcciones IP (separadas por comas) a ex
  34. cluir del listado. Pulse enter para no indicar ninguna"
  35. read whiteIPS
  36. # Construyo un bucle for que recorra las IPs activas, las compare con
  37. # la lista de excluidas, y, de no estarlo, las muestre y guarde en
  38. # el  fichero clusters
  39. for IP in $listaIPS
  40.     do
  41. #   Para comprobar si una IP está en la lista de excluidas busco
  42. #   en la lista esa IP y, si no la encuentra, la guardo como válida.
  43.     AUX=`echo $whiteIPS | grep $IP`
  44.     if [ -z $AUX ]
  45.         then
  46.         IPSaula="$IPSaula $IP"
  47.     fi
  48. done
  49. # Muestro la lista
  50. echo -e "IPs asignadas en el rango ${rangoIP}.1-254:\n$IPSaula"
  51. # Pregunto si se desea generar un fichero clusters ssh con ellas
  52. echo "¿Desea generar un cluster con estas IPs? s/n"
  53. read -s -n1 OPC
  54. if [ "$OPC" = "s" -o "$OPC" = "S" ]
  55.     then
  56. # Compruebo que se ha lanzado el script como root, ya que para
  57. # sobreescribir el archivo /etc/clusters es necesario.
  58.     if [ $UID -ne 0 ]
  59.         then
  60.         echo "Para crear el cluster deber root."
  61.         echo "sudo le puede ayudar la próxima vez."
  62.         echo "Saliendo sin realizar cambios en /etc/clusters"
  63.         exit
  64.     fi
  65. # Como quiero abrir la conexión como root, añado la cadena root@ al
  66. # inicio de cada IP y las voy acumulando en listaCLUSTER    
  67.     for IP in $IPSaula
  68.         do
  69.         IP="root@${IP}"
  70.         listaCLUSTER="$listaCLUSTER $IP"
  71.     done
  72. # Pido el nombre del cluster y compruebo mediante la variable
  73. # CONTROL si existe una línea con el nombre proporcionado en el fichero
  74. # saldrá del bucle en el que pide el nombre del cluster solo cuando
  75. # no exista un cluster con ese nombre; o cuando se ha indicado que
  76. # se sobreescriba. (En esos casos pongo a 1 la variable CONTROL)
  77.     CONTROL=0
  78.     while [ "$CONTROL" = "0" ]
  79.         do
  80.         clear
  81.         read -p "Nombre para el cluster: " CLUSTER
  82.     EXISTE=`grep ^$CLUSTER /etc/clusters`
  83.         if [ -n $EXISTE ]
  84.             then
  85.             echo "Ya existe un cluster llamado $CLUSTER"
  86.             read -n1 -s -p "¿Desea sobreescribirlo? s/n: " OPC2
  87.             if [ "$OPC2" = "s" -o "$OPC2" = "S" ]
  88.                 then
  89.                 CONTROL=1
  90.             fi
  91.         else
  92.             CONTROL=1
  93.         fi
  94.     done
  95. # Una vez fuera del bucle, mando una copia del fichero /etc/clusters
  96. # sin la línea del cluster indicado (si existiera) al home del usuario
  97.     grep -v ^$CLUSTER /etc/clusters > $HOME/clusters 2> /dev/null
  98. # Actualizo la información sobre la copia, y muevo esa
  99. # copia a su destino original, comprobando el error.
  100.     echo "$CLUSTER $listaCLUSTER" >> $HOME/clusters
  101.     mv $HOME/clusters /etc/clusters 2> /dev/null
  102.     if [ $? -ne 0 ]
  103.         then
  104.         echo "Se ha producido un error."
  105.         echo "en $HOME/clusters debería tener una copia del fichero clusters"
  106.         exit
  107.     fi
  108.     echo "Hecho, el fichero /etc/clusters se ha actualizado "
  109. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement