educación, informática y demás

2405 - Scripts GNU/Linux

Ejercicios

checkIp.sh

Crea un script llamado checkIp.sh que obtenga por parámetro una dirección IP. Debemos comprobar si tenemos conexión con dicha dirección IP. Si no tenemos conexión, mostraremos un mensaje de error y terminaremos la ejecución del script.

Utiliza funciones y realiza control de errores. Asegúrate de devolver un valor de retorno 0 en caso de que todo haya ido bien y un código de retorno distinto de 0 en caso de que se produzca un error.

Pasos

  • Obtener el valor de la dirección IP por parámetro
  • Comprobar que me han pasado un valor en el parámetro (Control de errores)
  • Control de errores: si no me han pasado un valor en el parámetro, salimos con código de error. Función error.
  • Comprobar conexión. Comando ping. Cuidado, hay que limitar los paquetes ICMP ECHO_REQUEST enviados por el comando ping. Echad un ojo a la página de manual.
  • Si no hay conexión, terminar el script con código de error. Si hay conexión, terminar con código de éxito.

Solución

Código propuesto

Configuración del script para facilitar su ejecución

Ya conocemos la variable de entorno PATH. Esta variable de entorno se utiliza en sistemas Unix-Like, como Unix, GNU/Linux o Free BSD, pero también se utiliza en sistemas Windows.

Queremos configurar el sistema para que este script, checkIp.sh se pueda ejecutar desde cualquier directorio de trabajo con el nombre checkIp.

Pasos

  • Investigar la variable de entorno PATH para configurar el sistema.
  • Comprobar si se puede configurar un directorio propio de forma permanente.

Soluciones

La más sencilla es mover o copiar el script con el nuevo nombre a uno de los directorios que estén en el path.

Lo movemos a /usr/local/bin con el nuevo nombre y probamos a ejecutarlo.

getMac.sh

Dada una dirección IP que se pasa por parámetro vamos a obtener la dirección MAC de la interfaz de red que tiene asociada dicha dirección IP.

Solo vamos a obtener la dirección MAC si tenemos conexión de red con la dirección IP proporcionada. Vamos a suponer que la dirección IP está en nuestra red o subred.

¿Cómo lo hago?

Podemos obtener la dirección MAC de la interfaz de red configurada con una dirección IP gracias a la tabla de resolución ARP. Para consultar esta información podríamos consultar el comando arp.

Oh! No está instalado el comando arp en el sistema. Podríamos tratar de instalarlo o consultar la ayuda del comando ip.

Podemos consultar la información directamente en el fichero /proc/net/arp. Tenéis información sobre el directorio proc en el sitio web de FHS.

Vamos a tratar de coger solo la MAC.

Parece que no somos capaces de obtener el cuarto campo dados los separadores, porque tenemos una serie de espacios que no son constantes… Pero, tenemos la ayuda del comando tr con la opción -s.

Comando tr

Vamos a jugar un poco más antes de continuar con el comando tr, que es muy útil para un administrador.

Si no sabemos que hace un comando, consultamos su página de manual.

Traduce…

Vale, pero para qué podemos usar el comando tr los administradores, aparte de para cambiar letras o cadenas de texto… Por ejemplo para facilitar la lectura de grandes ficheros de configuración.

Por favor, muestra la configuración de samba que está en /etc/samba/smb.conf

La salida es demasiado extensa… :_(

Si quitamos también los puntos y coma…

Pero hay muchos saltos de línea juntos, vamos a usar tr para juntarlos 🙂

Si ahora quisiéramos guardar esta configuración en un fichero podríamos utilizar redirección de salida.

getMac.sh

Continuamos con getMac.sh, queremos a partir de una dirección IP poder obtener su dirección MAC siempre y cuando tengamos conexión con dicha IP. Si no tenemos conexión con la IP, entonces mostramos un mensaje de error y terminamos la ejecución del script con un valor de salida de error.

Si tenemos conexión, entonces obtenemos la información de la MAC de la interfaz de red que utiliza dicha dirección IP del fichero /proc/net/arp y la mostramos en pantalla. Acto seguido, terminamos la ejecución del script con código de retorno de éxito.

Vamos a usar el script checkIp que hemos creado previamente para comprobar si tenemos conexión.

Solución propuesta

checkIp es un script, que lo hemos almacenado dentro del directorio /usr/local/bin que está en la lista de directorios de PATH. Lo estamos ejecutando igual que ejecutaríamos cualquier otro comando o aplicación, como ping, por ejemplo.

Podemos usar ; para separar comandos que se ejecutarán uno detrás de otro en secuencia.

checkNet.sh

Crea un script llamado checkNet.sh que compruebe la conexión de los equipos en una red. Para ello, almacenará en variables la siguiente información:

  • net: Dirección IP de la clase C con la dirección de red de la red a comprobar.
  • first: Número de host inicial
  • last: Número de host final

El script comprobará si hay conexión con cada una de las direcciones IP de la red almacenada en net que estén entre el host first y el host last.

Es decir, para cada dirección IP entre la dirección IP del host first y el host last, comprobaremos si hay conexión o no.

Pasos

  • Mostrar en pantalla la información.
  • Calcular la dirección IP del host first y del host last.
  • Recorrer los números de host desde el first al last
  • Mostrar en pantalla las direcciones IP que van del host first al host last

Solución propuesta

Vamos solucionando…

¿Sabes mostrar en pantalla los números del first al last?

Ya lo tenemos medio resuelto 🙂

Ahora tendríamos que añadir a los tres primero bloques de la dirección IP, puesto que es de la clase C, el número de host en lugar de mostrarlos en pantalla.

Pero… ¿Cómo le quito el último bloque a la direccion de red que tenemos almacenada en la variable net?. Tendríamos que cortar el último campo o bloque de la dirección IP. Si nos fijamos el separador de bloques es un punto. Nos viene como anillo al dedo el comando cut.

La salida

Ahora si queremos podemos comprobar si tenemos conexión con cada una de las direcciones IP utilizando el script checkIp.

Vamos a ver que tal

Dejar una respuesta