Vous êtes sur la page 1sur 62

Ir a capitulo 2

Prologo El presente articulo solo pretende ser una forma de acercarse de una forma rpida y cmoda en castellano a Linux, conforme he ido yo personalmente adquiriendo conocimientos sobre este fantstico sistema operativo. Tambin pretende ser una gua de mano de consulta para las posibles lagunas mentales que podamos tener a la hora de usar los distintos comandos. Bsicamente voy a tratar el uso de la terminal (shell) y los comandos que mas nos interesan a la hora de tratar con ficheros y configuraciones de dispositivos. GNU/Linux, que es? Un sistema operativo, bien, eso ya lo sabemos pero que supone ? Empecemos por su nombre o denominacin. GNU/Linux proviene de la unin de GNU ( GNU is not Unix) y Linux, un sistema operativo pensado en primera instancia para uso recreativo por su desarrollador Linus Torvalds. El cual gracias a la colaboracin de muchos desarrolladores y la posibilidad de portabilidad de aplicaciones gracias al proyecto GNU de la Free Software Fundation de Cambridge, es hoy el sistema potente y complejo pero cada vez mas accesible que conocemos. Bueno si queremos saber sobre los principios de Linux y las diferencias que existen en comparacin con Unix, hay multitud de artculos y papers que tratan sobre ello en internet. Vamos a lo que nos importa. Capitulo primero. Principios y Comandos Bsicos. La Shell o interprete de comandos de GNU/Linux.

La Shell es el medio que tenemos para interactuar con la maquina con la que estamos trabajando y con su sistema operativo, literalmente interpreta ordenes. Esto es una shell:

Hay muchos tipos de shell, la mas popular es 'bash' (bourne again shell) fue creada por J.Bourne, en principio cre 'bsh' despus la mejor, y la renombr aadiendo la 'a' La Shell se encarga de: 1 De interpretar las variables de entorno * 2 Interpreta los metacarcteres,(caracteres comodines) '*' '?'. 3 Maneja la entrada y salida standart de los comandos. 4 Busca alias, y los interpreta. 5 Interpreta las ordenes comparando si son comandos internos de la shell, o binarios ejecutables, mirando en $PATH. * Las variables de entorno son porciones de memoria a las que se asigna un valor, por ejemplo una variable de entorno seria el propio 'bash' ($BASH=/bin/bash), lo cual nos indica que cuando se llama a la variable $BASH, la shell busca en las variables, e interpreta que tiene que ejecutar: /bin/bash. Esto es til cuando veamos en otros captulos, la iniciacin a el shell-script. Principales diferencias con la lnea de comandos de wuindos. En la terminal de Linux (de ahora en adelante shell), el interprete de comandos distingue entre maysculas y minsculas a la hora de interpretar los comandos, cosa que en la lnea de comandos (de ahora en adelante cmd.exe) de Guindos no ocurre: Shell: ls no es igual a LS cmd.exe: dir es igual a DIR En la shell los modificadores de los comandos se representan con un guin '-', y en cmd.exe el modificador es '/'. Shell: ls -l cmd.exe: dir /all En la shell no son estrictamente necesarias las extensiones de fichero, solo se usan para reconocer visualmente los archivos.

El Promt: Hay muchos tipos de promt, los mas usuales son '$' para la terminal de usuario y '#' para la terminal de root. Cuando abrimos una terminal, la nica informacin en principio con la que contamos es el promt, este nos indica el usuario con el que estamos accediendo a la shell, la maquina sobre la que esta corriendo la shell y el directorio donde nos encontramos, el cual lo normal sea nuestro directorio home. ejemplos de promt: rh3nt0n@rh3nt0n-laptop:~$ root@rh3nt0n-laptop:/home/rh3nt0n# El primer promt nos indica que el usuario es rh3nt0n que esta en la maquina rh3nt0n-laptop en el directorio home de rh3nt0n (/home/rh3nt0n) y que la terminal es de usuario '$'. El segundo promt nos indica que el usuario es root el cual esta en la maquina rh3nt0n-laptop, dentro del directorio /home/rh3nt0n y que la terminal es de root '#'. Principales diferencias entre usuario y root.. El usuario root, es el administrador del sistema es el amo y seor, es el que asigna permisos a otros usuarios, crea grupos, usuarios etc.. en fin tiene todos los derechos de hacer lo que quiera, es por esto que no es recomendable usar de continuo este usuario para el da a da de uso del sistema, ya que por un descuido o un comando mal efectuado, podemos causar graves daos al sistema o perder informacin de la cual no nos queramos desprender. El usuario, depende de root para tareas de administracin del sistema y configuracin de dispositivos. Pero para el trabajo con ficheros propios o navegacin por internet y el sistema de archivos, el usuario por defecto no tendra ningn problema para usar el sistema. En Linux no existen unidades, existen particiones del disco duro. En Linux todo es un fichero, el monitor estar representado como fichero as como el teclado el mouse etc. Por ejemplo: hda ---- representara a todo el disco duro hda1 ---- representara a la particin 1 hda2..... representara a la particin 2 El sistema de ficheros de Linux representa un rbol invertido del cual la raz, es '/', y de la cual cuelgan el resto de directorios del sistema. Cualquier fichero que comience por un punto '.' (eje:.fichero) es un fichero oculto. Para cualquier usuario el smbolo de la '~' en el promt, representa su directorio home. a la hora de buscar ficheros existen los meta caracteres: '*' el asterisco representa a cualquier fichero o carcter '?' la interrogacin representa un carcter. Sistema de ficheros.

/<-----directorio raz | |_______/bin <-------------almacena binarios (ejecutables) |_______/etc <------------contiene ficheros de configuracin de programas. |_______/media <-------------- dispositivos tipo CDROM, floppy |_______/root <-------------directorio home de el administrador del sistema |_______/dev <-------------contiene los ficheros de dispositivos tipo monitor, teclado etc |_______/home <-------------- contiene los directorios home de los usuarios normales |_______/sbin <-------------contiene ficheros imprescindibles, accesible a root |_______/tmp <-------------ficheros temporales |_______/var <------------ficheros variables eje: fichero.log |_______/usr <------------tiene una estructura parecida a el directorio raz.(explicado mas abajo) |_______/lib <------------contiene libreras dinmicas. |_______/boot <--------------contiene ficheros de arranque de sistema |_______/mnt <--------------aqu se montan los dispositivos extrables.

/usr |_____/bin <----------binarios ejecutables de usuario |_____/local <--------aqu van todas las compilaciones |_____/src <--------aqu deberan de compilarse los programas de los usuarios. |_____/share <---------ficheros de entorno grfico. |_____/include <-------archivos de cabecera que usan las aplicaciones. |_____/lib <-----------enlaces dinmicos a libreras. Permisos de los ficheros.. Los ficheros se protegen con permisos, los cuales pueden ser de lectura 'r', escritura 'w', y ejecucin 'x'.Los cuales se asignan a los tres tipos de usuarios que puede tener un fichero, dueo, grupo. otros, y se representa de esta manera en la terminal:

Columnas: La primera es del tipo de fichero: 'd' si es directorio, '-' si es fichero regular, 'c' fichero de caracteres. 'b' fichero por bloques. 1.Permisos de los usuarios, se agrupan de tres en tres: [rwx] [r-x] [r-x], el primer grupo de permisos, corresponde a el dueo, el segundo a el grupo, y el tercero a 'otros'. 2.El numero de nombres que tiene el fichero. 3.Dueo 4.Grupo 5.Tamao en bytes 6.Fecha y hora de la ultima modificacin. 7.Nombre del fichero. Cada permiso esta representado por una cifra en octal:

Por lo que si un fichero tiene los siguientes permisos: rwx rw- r--, su valor en octal sera 764.Esto nos servir para cambiar a nuestro criterio los permisos de cada fichero del que seamos dueos. Comandos bsicos para moverse en la Shell. Para empezar aclaro algo importante, cada vez que se crea un directorio, este dentro de si mismo crea dos ficheros: '.' que representa el directorio actual. '..' que representa el directorio padre, o anterior. rh3nt0n@rh3nt0n-laptop:~/guia$ ls -la nuevo/ total 8 drwxr-xr-x 2 rh3nt0n rh3nt0n 4096 2006-10-21 16:03. drwxr-xr-x 3 rh3nt0n rh3nt0n 4096 2006-10-21 16:03.. Y los crea con unos permisos predeterminados por el sistema. en realidad, son enlaces a otros directorios como dije anteriormente y as consta en la primera columna 'd'. Dicho esto pasamos a los comandos: Comandos para movernos por el rbol de directorios.. Comando ls. abreviatura de list (listar) sintaxis: ls [opciones] [fichero ] opciones: -l vemos todos los datos de los ficheros del directorio actual. -ld vemos los permisos del directorio actual. -ldi vemos el numero de Inodo del fichero en cuestin * -R muestra de forma recursiva, los ficheros que halla dentro de los directorios que se encuentren dentro de el directorio que estamos listando. -lS lista los ficheros de mayor a menor en tamao de bytes. -lSr lo contrario que el anterior. -t ordena los ficheros por fecha de modificacin. -tr forma inversa a la anterior opcin. Comando pwd: print working directory, imprime en la pantalla el directorio actual. ejemplo: rh3nt0n@rh3nt0n-laptop:~/guia$ pwd /home/rh3nt0n/guia Esto es muy til, cuando estamos dentro de muchos directorios y no sabemos donde nos encontramos. Comando cd: change directory. Cambia de directorio Sintaxis: cd [directorio] Formas tiles de usarlo: cd sin mas, te lleva a tu directorio home. cd.. te lleva al directorio padre (directorio anterior) cd ~ igual que el primero, te lleva a tu directorio home. Comando mkdir: make diretory. Hacer directorio. Sintaxis: mkdir [directorio] mkdir -p [directorio]/[directorio]/[directorio]/etc..

puedes crear tantos directorios como quieras, desde el directorio actual, o desde tu home poniendo la ruta absoluta ** notas: * inodo es el numero de sector donde se encuentran los datos en el disco duro. ** ruta absoluta, es la ruta desde el directorio home del usuario. Comando rmdir: remove directory. Borrar directorio. Sintaxis: rmdir [directorio] rmdir -p [ruta de directorios ] Comando cat: Muestra el contenido del archivo en cuestin, en pantalla. Sintaxis: cat [fichero] Comando more: igual que cat, pero muestra si el contenido de el fichero es grande, pantalla a pantalla. Sintaxis: more [fichero] Comando head: muestra la cabecera del archivo, por defecto las 10 primeras lneas. opcin: -n [numero] muestra el numero de lneas que especifiques Sintaxis: head [opcin] [fichero] Comando tail: al contrario que head, este comando muestra el final de el archivo. Por defecto al igual que head muestra 10 lneas. sintaxis: tail [opciones] [fichero] opciones: -n numero de lneas especificado -f esta opcin, es muy interesante, ya que te muestra el incremento de lneas a tiempo real. Comando cp: copy. Copiar. sintaxis: cp [opciones] [fichero origen] [directorio destino] opciones: -b hace back up del archivo si en el directorio donde copiamos existe un fichero con el mismo nombre y la renombra aadiendo al final ~. -- no-dereference copia forzosamente si es un enlace simblico. -F fuerza la copia en caso de que exista el fichero. por lo tanto sobre escribe. -i interactivo, te pregunta en caso de que pueda sobre escribir. -l hace enlace duro. link. -L te copia el contenido del fichero en caso de que intentes copia un enlace simblico. -r copia el contenido total de un fichero y ficheros hijos recursivamente. -s crea un enlace simblico, soft. -u en caso de que halla un archivo con el mismo nombre, lo actualiza.update. Comando mv: move. mueve o renombra el archivo o directorio. sintaxis: mv [opciones] [origen] [destino] opciones: -b si es un fichero, hace back-up. si es directorio, mueve el directorio y su contenido. -f fuerza -i interactivo -u actualiza si el fichero movido existe en destino

Comando ln: link, enlace duro por defecto (sin opciones). Sintaxis: ln [opciones] [fichero] opciones: -b hace back-up -f fuerza -i interactivo -s enlace simbolico o soft Comando file:muestra el tipo de archivo de que se trata. sintaxis: file [opciones] [archivo] opciones: -z muestra el tipo de archivo si es un comprimido con gz. -L en caso de que sea enlace simbolico, te muestra los datos del fichero al que apunta. Comando rm: remove. borra el fichero sintaxis: rm [opciones] [fichero/s] opciones: -i pregunta antes de borrar -r borra de forma recursiva todo el contenido de un directorio si es el caso.Muy peligroso efectuarlo, usadlo con cautela. -f fuerza el borrado sin preguntar, mas peligroso aun que el anterior si se efectan en conjunto: rm -fr directorio ( el caos) sed prudentes al borrar archivos. Comando chmod: change mode, cambiar permisos. sintaxis: chmod [permisos] [ficheros] Forma octal de cambiar permisos: Como ya he explicado anteriormente el valor de cada permiso ( lectura, escritura y ejecucin) se representa con nmeros octales, y se agrupan en conjuntos de tres, un conjunto para el dueo, otro grupo para el grupo, y otro grupo para otros usuarios: 4 para 'r' ---> lectura 2 para 'w' --> escritura 1 para 'x' --> ejecucin Por lo cual si tenemos un fichero con estos permisos: rwx rw- r-Tendremos que el primer grupo tiene un valor de 7, resultante de la suma de 4+2+1, el segundo grupo tendr un valor de 6 resultado de la suma de 4+2 y el tercer grupo tendr un valor de 4 resultante del valor de 'r'. Por lo tanto el valor en octal de los permisos de ese fichero en cuestin ser de 764. Para cambiar los permisos de ese archivo a: rw- r-- --x La orden seria la siguiente: chmod 641 fichero Forma abreviada de cambiar permisos: La sintaxis seria la misma, pero variaran las opciones, para mi, es mas cmodo

y menos laborioso que la anterior manera, pero de la forma anterior podemos sacar partido a el comando umask que veremos posteriormente. Opciones:

Por lo tanto una orden para dejar los permisos como la orden del otro modo seria: chmod u+rw,g+r,o+x fichero Comando umask: te dice la mascara de permisos del fichero en cuestin. Sin especificar la nueva mascara te dice la mascara del directorio. sintaxis: umask [mascara] Si queremos que los archivos que creemos tengan un valor distinto a el valor por defecto habra que restar a 666 (por defecto rw-rw-rw-) el valor en octal que queramos para nuestros archivos: Si por ejemplo queremos que nuestros archivos se creen con permisos r-- para dueo, r-- para grupo y r-- para otros, deberamos restar 444 a 666 y nos dara 222, entonces el comando seria el que sigue: umask 222 Comando touch: crea un fichero sintaxis: touch [fichero] Comando which: busca el fichero/s binario especificado/s. Te devuelve la ruta absoluta donde se encuentra/n sintaxis: witch [fichero] [fichero] Comando id: muestra nombre de usuario y grupo Comando su: te permite cambiar al usuario que desees. sintaxis: su usuario password Comandos de ayuda. La terminal de Linux se caracteriza por su ayuda, sabiendo usarla, no se debera tener ningn problema a la hora de interactuar con ella. Los mas tiles: Comando man: manual, especificando el comando a usar te muestra la ayuda y opciones que tiene el comando sintaxis: man [comando] Comando apropos: apropsito, te muestra los comandos relacionados con la palabra objeto. sintaxis: apropos [palabra]

Esto no es un comando, en realidad es una opcin que tienen todos los comandos en Linux, la opcin - - help. sintaxis: [comando] - - help Comando Whatis: que es rh3nt0n@rh3nt0n-laptop:~$ whatis ls ls (1) - list directory contents Comando uname: este comando te devuelve informacin sobre el sistema que estas usando. sintaxis: uname [opcin] rh3nt0n@rh3nt0n-laptop:~$ uname -a Linux rh3nt0n-laptop 2.6.15-27-386 #1 PREEMPT Sat Sep 16 01:51:59 UTC 2006 i686 GNU/Linux opciones: -a da toda la informacin. -r versin del kernel Comando date: te devuelve la fecha actual, esto es usado en shell-script con opciones. sintaxis: date + %[opcion] sintaxis: date -s [formato de fecha] <------- cambia la hora y fecha del sistema recomiendo usar la opcin - - help para este comando ya que tiene multitud de opciones. Comando who: quien, aporta informacin sobre quien esta usando el sistema. sintaxis: who [opcin] opciones: -b system boot, hora y fecha de cuando arranco el sistema. -H para ver en columnas quien esta y mas informacin. -q cuantos usuarios -r nivel de ejecucin Comando cal: devuelve el calendario mensual actual. Especificando mes y ao en numero te devuelve el calendario pedido. sintaxis: cal [mes] [ao] opciones: -m cambia el formato del calendario a Europeo, empezando la semana por lunes. -y devuelve el calendario de todo el ao. Hasta aqu llega la descripcin de los comandos mas usados en la terminal,

Volver al capitulo 1 Capitulo segundo. En este capitulo veremos algunos aspectos interesantes de la shell y el uso de los comandos, conoceremos aspectos de las variables del sistema, como aadirlas como editarlas, redireccin de la

entrada/salida estndar de los comandos, los filtros de bsqueda, iniciacin y manejo de los procesos ,entre alguna que otra utilidad . Empecemos . Antes de nada me gustara mencionar un comando que a mi modo de ver es muy interesante, me refiero al comando 'alias', con este comando se puede dar un alias a un comando determinado . Aqui vemos como le doy como alias a iwconfig 'red' rh3nt0n@rh3nt0n-laptop:~$ alias red='iwconfig' rh3nt0n@rh3nt0n-laptop:~$ red lo no wireless extensions. irda0 no wireless extensions. eth1 no wireless extensions. sit0 no wireless extensions. Cabe resaltar que el alias espira cuando cerramos la shell donde la hemos creado, pero esto es fcilmente subsanable editando el archivo '.bashrc' de nuestro home, aadiendo el alias al final del archivo, este archivo se encarga de la configuracin inicial de nuestra shell, y ejecuta automticamente las ordenes que contiene al iniciar la shell . Esto es muy bueno, por ejemplo para tema de configuraciones de red etc. Para eliminar un alias, solo hay que ejecutar el siguiente comando: unalias -a alias_creado Concatenacin de comandos en la shell . Cuando estamos utilizando la shell, podemos hacer que los comandos o aplicaciones acten en el 'back-ground' o en el 'front-ground' . Que es esto? muy sencillo, al ser linux un sistema operativo multitarea, la shell puede trabajar con muchos procesos a la vez, aunque solo se puede ejecutar un proceso cada vez mientras los dems estn preparados o dormidos. Este tema de los procesos lo veremos mas adelante. Los procesos en back-ground, son los que se ejecutan invisiblemente para el usuario y dejan libre la shell para seguir trabajando con ella. los procesos en front-ground, son justo lo contrario, son procesos que se ejecutan en primer plano y ocupan la shell el tiempo que estn en funcionamiento. Tambin podemos unir una serie de ordenes, e interactuar con la salida de cada orden aprovechando esa salida para que sirva de argumento para otra orden esto lo entenderemos mejor viendo unos ejemplos: Modos de invocar ordenes:

orden &

El umpersand '&', hace que esta orden se ejecute en back-ground y nos dejara la shell libre para poder seguir usando otros comandos. orden1 ; orden2 El punto y coma ';' hace que se ejecuten las ordenes una a una, independientemente de que una u otra funcione.

rh3nt0n@rh3nt0n-laptop:~$ cd .. ; ls rh3nt0n rh3nt0n@rh3nt0n-laptop:/home$ Como se puede observar, en el anterior comando, se ejecuta 'cd..' y despus se ejecuta 'ls', sobre el directorio al que se sube con 'cd..'

orden1 | orden2 El pipe '|' hace que la salida de la orden1, de argumentos a la orden 2. Ejemplo:

dmesg | grep ipw Estos comandos los explicare mas adelante, la orden dmesg, da los argumentos a grep para que filtre el texto especificado .

orden1 `orden2` Estas comillas -``- ejecutan la orden2 que esta dentro de las comillas y pasan la salida de este como argumento a la orden1.

apt-get install kernel-headers`uname -r` Aqu el resultado de uname -r dara argumentos al comando apt-get

orden1 && orden2 En esta opcin la orden2 se ejecutara si orden1 termina sin errores. make && make install orden1 || orden2

En esta opcin las ordenes iran ejecutndose, hasta que una de ellas se ejecute correctamente ,en ese momento se detiene. Histrico de ordenes: Un buen comando de ayuda en referencia a comandos, y a trabajar con ellos en la shell, es el comando 'history', este comando guarda en buffer de memoria los comandos que se han ido ejecutando en la shell y con el es posible conocer cuales se han efectuado, y citarlos por su nmero de orden.

rh3nt0n@rh3nt0n-laptop:/home$ history 1 sudo iwconfig eth0 essid j ........... 174 iwconfig 175 dmesg 176 lsusb 177 iwconfig 178 lsusb 179 dmesg 180 wget http://www.bluntmen.com/ipw2200-1.1.4-inject.patch 181 bogomips 182 yes 183 yes >/dev/null & 184 jobs 185 bg 2 186 fg 2 187 kill 2 188 jobs 189 top 190 cd .. ; ls 191 dmesg 192 history La primera columna indica el nmero de comando, en el orden en el que se ha ejecutado. La segunda evidentemente es el comando que se ha ejecutado, es una muy buena utilidad, ya que por ejemplo en comandos largos haciendo un history y fijndote en el nmero de orden, con solo citar el nmero de la forma que explicare ahora, se ejecutara el comando: Si por ejemplo de la lista anterior queremos hacer el nmero 180, haramos lo siguiente: rh3nt0n@rh3nt0n-laptop:/home$ !180 wget http://www.bluntmen.com/ipw2200-1.1.4-inject.patch --21:03:51-- http://www.bluntmen.com/ipw2200-1.1.4-inject.patch => `ipw2200-1.1.4-inject.patch' Resolviendo www.bluntmen.com... Variables de entorno. Las variables de entorno, son como explique en el anterior capitulo, porciones de memoria que el sistema coge para guardar valores especficos necesarios para el sistema. Si queremos saber las variables de entorno que hay en el sistema, solo tenis que usar el comando 'set'.

rh3nt0n@rh3nt0n-laptop:/home$ rh3nt0n@rh3nt0n-laptop:/home$ set | more BASH=/bin/bash BASH_ARGC=() BASH_ARGV=() BASH_COMPLETION=/etc/bash_completion BASH_COMPLETION_DIR=/etc/bash_completion.d BASH_LINENO=() BASH_SOURCE=() ........ Para ejecutar una variable de entorno solo hay que citarla de esta manera: rh3nt0n@rh3nt0n-laptop:/home$ echo $HOSTNAME rh3nt0n-laptop las variables siempre se citan con el signo del dlar delante $, y es de resaltar que las variables predeterminadas del sistema, suelen estar en maysculas . Nosotros podemos creas variables de entorno, las cuales pueden ejecutarse en la shell donde las hemos creado, o exportarlas para poder usarlas en cualquier terminal de la sesin que esta en marcha, aunque estas variables una vez reiniciado el sistema se pierden, esto es til en servidores en los cuales rara vez se reinicia el sistema. Para crear una variable de entorno seria de esta forma:

nombre_variable=concepto Ejemplo: rh3nt0n@rh3nt0n-laptop:/home$ edad=30 rh3nt0n@rh3nt0n-laptop:/home$ nombre=rh3nt0n rh3nt0n@rh3nt0n-laptop:/home$ echo $edad 30 rh3nt0n@rh3nt0n-laptop:/home$ echo $nombre rh3nt0n rh3nt0n@rh3nt0n-laptop:/home$ Es recomendable a la hora de crear variables de entorno, que las que hagamos nosotros, las hagamos en minsculas, as a la hora de borrar variables, no borraremos nada que no tengamos que borrar . Las variables de entorno, cuando las crea un usuario, solo se ejecutan en la terminal donde se crean, para poder ejecutarlas en todas las terminales tendramos que exportarlas: Comando 'export'

rh3nt0n@rh3nt0n-laptop:/home$ export edad

Esto hara que en la misma sesin en la que estamos, pero en otra terminal, se pueda ejecutar esa variable sin problemas. Para borrar una variable determinada, solo habra que usar el comando 'unset' para ello: comando 'unset'

rh3nt0n@rh3nt0n-laptop:/home$ export edad Hay variables como $PWD que se van actualizando dependiendo de donde nos encontremos y automticamente. Entrecomillado de caracteres en la shell. Hay ordenes que requieren de argumentos los cuales habitualmente dependiendo de la forma que se quieren utilizar se usan unas comillas u otras. echo ''$PATH '' echo ' $PATH ' echo \$PATH En el primer caso, " " las comillas son denominadas dbiles, el comando o el argumento lo usa la shell tal y como esta escrito y lo ejecuta si viene al caso. En el segundo caso, ' ' las comillas son denominadas fuertes ,lo cual quiere decir que la shell no acta dentro de ellas, por lo tanto se toma literalmente el argumento. En el tercer caso, el back slash '\' se utiliza para escapar caracteres especiales como $ para que la shell tome el argumento como en el segundo caso. Las comillas `` se usan en el caso de las variables para que se pueda usar un comando asignado a una variable:

fecha:`date` Esta orden ejecutara el comando date, al llamar a la variable 'fecha'. Redireccin de la entrada/salida estndar. La shell, toma informacin de la entrada estndar, (teclado) denominada stdin, cuando se ejecuta la orden dependiendo de como se ejecute, puede dar una salida valida o errnea, en caso de la salida valida la informacin por defecto la shell como salida estndar usa la pantalla, con lo cual nos muestra la informacin en la shell, en caso de que la ejecucin del comando sea errnea, nos muestra la salida de error por defecto tambin por la pantalla y nos la muestra por la shell, aunque parezca en principio que tanto la salida estndar como la salida estndar de errores es lo mismo, no lo son, solo tienen por defecto asignado que enseen la informacin por la pantalla . Estas salidas, se pueden redireccionar, as mismo tambin la entrada estndar, o bien para que un comando tome los argumentos o sea la entrada de datos de un fichero o que la salida de un comando sea el argumento de otro, o que esa salida salga por la impresora, se imprima en un fichero etc . Lo mejor es que lo veamos grficamente:

Formas de redireccionar la entrada estndar 'stdin'. el signo '<' cambia la entrada estndar. ejemplos:

mail rh3nt0n < carta.txt El anterior comando tomara como argumento para el comando mail, el contenido del fichero carta.txt.

comando < fichero El anterior comando tomara como argumento para el comando ejecutado, el contenido de fichero. Formas de redireccionar la salida stantdart 'stdout' . El signo '>' redirecciona la salida estndar, creando el fichero si no existe y sobre escribiendo el archivo si existe. comando > fichero comando > contenido comando > argumentos comando > /dev/dispositivo

comando > stdout El comando anterior, redireccionaria la salida del comando a el fichero stdout

La salida estndar de errores, tambin puede redireccionarse, ya que si el comando ejecutado, aun teniendo la salida estndar redireccionada a el sitio que sea que no sea la salida estndar, si ese comando falla, la salida de errores la muestra por pantalla. Para que esto no ocurra si no es nuestro deseo, o bien capturar en un fichero las posibles salidas de error, se usa '2>' lo cual hace lo mismo que con la anterior opcin hacia con la salida estndar.

comando 2> stderr Este comando mostrara en caso de que la ejecucin fuera correcta, por la pantalla, salida estndar de errores. y en caso de que hubiera algn error, la salida de error la mostrara en el fichero stderr. En conjuncin ,seria algo como esto:

comando > stdout 2> stderr Esta sintaxis, redireccionaria la salida del comando en caso de que fuera correcto, a el archivo stdout, en caso de que fallara enviara la salida de error a el fichero stderr. Cuando no queremos que el archivo, a sabiendas de que existe, se sobrescriba, se utiliza el mayor que doble '>>' de esta forma:

echo " hola mundo " >> fichero.txt El anterior comando aadira el texto hola mundo a el fichero.txt sin sobrescribirlo. esto ocurre de igual manera con la salida de errores, pero de este modo:

eco "hola mundo" 2>> errores.txt Como se podr apreciar, el comando echo esta mal escrito, pero la salida de errores se redireccionaria a el fichero errores.txt, en lugar de mostrarla por la pantalla.

rh3nt0n@rh3nt0n-laptop:~$ eco "hola mundo" 2>> errores.txt rh3nt0n@rh3nt0n-laptop:~$ cat errores.txt bash: eco: orden no encontrada rh3nt0n@rh3nt0n-laptop:~$ Redireccin a dispositivos 'especiales' Se pueden redireccionar salidas muy extensas, o salidas de errores a el dispositivo '/dev/null', para evitar colapsar de informacin la salida estndar, o simplemente por que no nos interese ver esa salida. Este dispositivo es denominado 'agujero negro' ya que lo que es redireccionado all, no se puede recuperar.

Ejemplo de uso: Aqu cabe resaltar el uso del comando 'time', el cual tiene la peculiaridad de mostrar su salida estndar, por la salida de errores. En el siguiente ejemplo ,este comando se encarga de cronometrar el tiempo que tarda en ejecutarse el comando junto al que se ejecuta, mostrando la salida por pantalla y enviando la salida del comando a ejecutar a el dispositivo /dev/null.

rh3nt0n@rh3nt0n-laptop:~$ time ls -R /etc > /dev/null ls: /etc/cups/ssl: Permiso denegado ls: /etc/ssl/private: Permiso denegado real 0m0.382s user 0m0.024s sys 0m0.012s rh3nt0n@rh3nt0n-laptop:~$ Los filtros de bsqueda. Los filtros de bsqueda son una utilidad muy interesante a la hora de buscar palabras comandos etc de forma ordenada y desechando lo que no nos interesa . vamos a ver algunos comandos de bsqueda interesantes: Comando "sort" sin opciones, ordena lneas de texto alfabticamente aunque sean nmeros. opciones: -n ordena nmeros " 1 2 3 4 " -t: define delimitador de campos +(n) n de nmero, para elegir que columna queremos ver primero. -F no considera maysculas o minsculas. -r invierte la salida normal. Comando "grep", busca lneas de texto en un archivo o salida de comando especificada. sintaxis: grep patrn fichero ejemplo de otro uso: dmesg argumento | grep opciones: -v busca todas las lneas que no contienen el patrn -i no considera maysculas de minsculas . -n numera las lneas que contienen el patrn especificado. Comando "wc" 'word count' cuenta palabras la salida normal sin parmetros saca tres columnas: sintaxis: wc [opciones] fichero 1 cantidad de lneas del fichero . 2 cantidad de palabras. 3 cantidad de caracteres. opciones: -l nmero de lneas nicamente -w nmero de palabras nicamente -c nmero de caracteres nicamente

Ejemplo de redireccin con este comando:

ls /bin/l* | wc-l Iniciacin a los procesos. Los procesos no son mas que los programas que se estn ejecutando, cada procesador puede ejecutar solo un proceso cada vez que acta. existen multitud de estados de los procesos, pero a groso modo podramos destacar estos cuatro: Los procesos pueden estar en varios estados: Estado runing - solo puede haber un proceso runing o funcionando. Estado preparado - son procesos que estn preparados para ser ejecutados por el procesador. Estado dormido - son procesos que han acabado, pero pueden ser llamados otra vez a funcionar. Estado zombie - son procesos como su propio nombre indica, que al no acabar bien, siguen en memoria sin borrarse. Esto se aprecia mejor con el siguiente grafico:

Comandos de informacin de procesos. Comando "ps" este comando sirve para ver los procesos que se estn ejecutando. Esto es muy til para dar preferencias a algn proceso determinado, matar procesos, en definitiva conocer los PID de los procesos, para poder mandarles seales entre otras cosas . La forma mas habitual de usar este comando es con las opciones a y x. a para ver todos los procesos y x que muestre cuales se estn ejecutando. sintaxis: ps ax

ejemplo: rh3nt0n@rh3nt0n-laptop:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:01 init [2] 2 ? SN 0:00 [ksoftirqd/0] 3 ? S 0:00 [watchdog/0] 4 ? S< 0:00 [events/0] 5 ? S< 0:00 [khelper] 6 ? S< 0:00 [kthread] 8 ? S< 0:00 [kblockd/0] 9 ? S< 0:00 [kacpid] 10 ? S< 0:00 [kacpid-work-0] 162 ? S 0:00 [pdflush] 163 ? S 0:00 [pdflush] 165 ? S< 0:00 [aio/0] 164 ? S 0:00 [kswapd0] 766 ? .................. La primera columna de la salida del comando anterior muestra el PID del proceso ,todos los procesos tienen un PID del proceso, no es mas que un nmero identificador, para poder mandarle seal a cada proceso ejecutandose desde la consola. La segunda columna indica la consola virtual donde se esta ejecutando el proceso, si no tiene aparece un signo de interrogacion '?'. La tercera columna indica en el estado en el que se encuentra el proceso: s ---- dormido r ---- runing o corriendo z ---- zombie t ----- detenido comando til:

ps ax | grep "proceso" Busca y filtra el proceso buscado. La cuarta columna, indica el tiempo que lleva ejecutndose el proceso. Los procesos pueden recibir seales a travs de la terminal, para interactuar con ellos . Pueden trabajar como he explicado anteriormente en el front-ground, de forma visible en la terminal, y en el back-ground, de forma transparente, para nosotros desde la terminal. Cuando un proceso recibe una seal desde la terminal, puede reaccionar de tres maneras diferentes: 1 puede ignorar la seal . 2 puede interpretar la seal . 3 puede aceptar que se encargue de el, el kernel . Seales a los procesos. Comando "kill" en principio mata el proceso, con opciones puede hacer reiniciar procesos dormidos.

sintaxis: kill -seal PID Seales mas importantes: seal -1 para que se reinicie un proceso, si no se puede, el sistema lo mata . seal -2 interrupcin seal -3 para que el proceso acabe, pero sin errores . seal -9 para el proceso, y el proceso no puede ignorar esta orden. seal -15 es lo mismo que ejecutar kill sin opciones es como decirle al proceso 'cuando puedas cierra', esta seal puede ser ignorada por el proceso . Comando 'nohup' Ejecuta la orden ignorando las seales de colgar, sirve para que las ordenes sigan funcionando, aunque salgamos de la terminal. Sintaxis: nohup orden [argumento] Cabe resaltar que cuando la shell deja un comando funcionando y salimos de ella lo hereda init. Para ver los procesos y los niveles de ejecucin existe el comando 'top', este comando muestra de forma dinmica los procesos que se ejecutan en el sistema:

Esta aplicacin (parecida a el visor de procesos de Windows) nos es muy til para interactuar con los procesos, a la hora de mandar seales, y dar prioridades a uno u otro proceso . Prioridades de los procesos. Podemos asignar prioridades de ejecucin a los procesos, si queremos que un programa tenga mas prioridad o menos, podemos bajarle o subirle el nivel de ejecucin con el comando "nice". Comando "nice" Este comando asigna nivel de ejecucin a los procesos, por defecto asigna el valor 10. sintaxis: nice [valor] orden [argumentos] Los valores de nivel de ejecucin van de el +19 al -19 siendo el de menor valor '-19' el que mas prioridad tiene de ejecucion. Los valores del -0 al -19 solo puede asignarlo el usuario root.

Comando "renice". Este comando repone el nivel de ejecucin, a un procesos que este ejecutndose. Sintaxis: renice [valor] nmero PID Comando "sleep". Este comando duerme el proceso deseado 'x' segundos especificados. Sintaxis: sleep [tiempo] [opcin] [orden] Opciones: -s tiempo en segundos (por defecto) -h tiempo en horas. -d tiempo en das. Comando "jobs". Muestra los procesos que se ejecutan en el back-ground. Para usar este comando y los siguientes, nos viene muy bien el comando anteriormente citado "top", ya que debemos apoyarnos en el IDE de proceso "PID", para poder interactuar con los procesos en back-ground.

rh3nt0n@rh3nt0n-laptop:~$ yes > /dev/null & [2] 6521 rh3nt0n@rh3nt0n-laptop:~$ jobs [1]+ Stopped yes >/dev/null [2]- Running yes >/dev/null & rh3nt0n@rh3nt0n-laptop:~$ Comando "fg". Lleva un comando ejecutndose en back-ground, al front-ground. Sintaxis: fg [PID de proceso]

rh3nt0n@rh3nt0n-laptop:~$ fg 2 yes >/dev/null Comando "bg". Relanza un proceso dormido, ejecutndolo en el back-ground. Sintaxis: bg [PID del proceso dormido]

[2]+ Stopped yes >/dev/null rh3nt0n@rh3nt0n-laptop:~$ jobs [1]- Stopped yes >/dev/null [2]+ Stopped yes >/dev/null

rh3nt0n@rh3nt0n-laptop:~$ bg 2 [2]+ yes >/dev/null & rh3nt0n@rh3nt0n-laptop:~$ jobs [1]+ Stopped yes >/dev/null [2]- Running yes >/dev/null & rh3nt0n@rh3nt0n-laptop:~$ En este punto, recuerdo que para matar un proceso conociendo su PID podemos usar lo siguiente: Sintaxis: kill "% PID"

rh3nt0n@rh3nt0n-laptop:~$ kill %2 rh3nt0n@rh3nt0n-laptop:~$ jobs [1]+ Stopped yes >/dev/null [2]- Terminado yes >/dev/null rh3nt0n@rh3nt0n-laptop:~$ tambin recuerdo, como lanzar un proceso en el back-ground. Sintaxis: orden [argumentos] & Capitulo tercero. En este capitulo trataremos los ltimos aspectos de la shell a tener en cuenta antes de meternos de lleno en la programacin en shell-script, aspectos tales como las expresiones regulares como patrones de bsqueda, algunos otros comandos de filtrado, el editor de textos 'vi',y al fin nos meteremos con aspectos bsicos de shell-script, y nuestro primer shell-script. Empecemos Expresiones regulares . Patrones de busqueda. Los metacaracteres son caracteres especiales que se refieren a otros caracteres con la finalidad de de efectuar bsquedas de archivos, lneas o palabras depurando resultados. Hay multitud de formas de intercalarlos para depurar al mximo las bsquedas, tantas como nuestra 'imaginacin' o conocimiento del manejo de ellos nos permitan, yo me limitare a deciros cuales son, para que sirven, y os dar algunos ejemplos. Metacarateres: opciones: ? ---------------> hace coincidir con cualquier carcter al menos una vez. * ---------------> hace coincidir con el carcter precedente u otro 0 o mas veces. + ---------------> hace coincidir con el carcter precedente 1 o mas veces. {n} -------------> hace coincidir con el carcter precedente 'n' veces. {,m}-------------> hace coincidir con el carcter precedente al menos 'm' veces. {n,m}------------> busca 'n', 'm' veces. ^ ---------------> El acento circunflejo mira el principio de la lnea de bsqueda. ejemplo: '^a' buscara las lneas que empiecen por 'a'.

$ ---------------> busca al final de la lnea. ejemplo: 'a$' busca las lneas acabadas en 'a'. . ---------------> hace coincidir con cualquier carcter solo una vez. []---------------> hace coincidir cualquier letra dentro de los corchetes una vez o varias separadas por comas ','.Se pueden dar rangos. ejemplos: ^[a-z] ---> esto buscara las lneas empezadas de la 'a' la 'z'. ^[a-z,A-Z]> esto buscara como la anterior, tambin maysculas. [^a-z,A-Z]> al contrario que las anteriores, buscara las que no empiecen por ninguna letra ni mayscula ni minscula. ^[0-9] ---> buscara lneas empezadas por nmeros. Comandos de filtrado. Comando 'cut': corta o filtra campos o columnas. el argumento puede ser la salida de una tubera, un fichero.. etc Sintaxis: cut [opciones [delimitador]] argumento Opciones: -c corta columnas ----> cut -c 1-3 /etc/passwd -f corta campos. esta opcin necesitara en algunos casos de la opcin -d la cual fija un delimitador de campos. Sin usarla por defecto usa el tabulador. Os recomiendo que practiquis con este comando y sus distintas posibilidades, ya que es realmente til, a continuacin unos ejemplos: cut -c 1-3 /etc/passwd cut -c 1,3 /etc/passwd ls -l /etc|cut -c 2-10 ls -l /etc|cut -f 1 ls -l /etc|cut -f 1 -d " " cut -f 5,3 -d ":" /etc/passwd Comando 'tr' Traductor. Traduce caracteres con la finalidad de igualar patrones de filtrado. Por defecto lee de la entrada estndar, pero se puede redireccionar la entrada a un fichero o dar argumentos a travs de tubera. Sintaxis: tr [opcin] ["patrn"]["patrn"] Al igual que con el comando anterior, os recomiendo que miris su ayuda y practiquis su uso, ya que es tambin extremadamente til. Opciones: -d --- delete. Se especifica solo un rango de caracteres. -s --- Elimina caracteres repetidos. -c --- Todos aquellos caracteres que no sean 'x' los combierte a 'x'. Ejemplos: tr -d [a-z]< /ruta/archivo tr -d [0-9]< /ruta/archivo tr -s " " < /ruta/archivo

tr -c [a-z\n] "," < /ruta/archivo ls -l | tr -c "0-9 a\n" "x" Comando 'tee'.Duplica la salida estndar, esto es que la salida estndar adems de ir redireccionada o simplemente salir por pantalla, tambin se guarda en un fichero de texto. Si el fichero no existe lo crea, si existe lo sobre escribe. En el caso de que no queramos sobre escribir, existe la opcin -a (append), esta opcin, aade la salida al archivo sin sobre escribir. Sintaxis: stdin tee archivo.txt ----> stdout Ejemplo: rh3nt0n@rh3nt0n-laptop:~$ ls | tee listado borrador.odt capitulo2.odt configuracion ..... rh3nt0n@rh3nt0n-laptop:~$ head listado borrador.odt capitulo2.odt configuracion ..... Comando 'find'. Busca ficheros recursivamente directorio a directorio. Sintaxis: find fichero [opciones] Opciones: -name ---- busca el nombre del fichero buscado. -maxdepth (n) Mxima profundidad. Busca solo hasta el nivel de directorios que le digamos en numero 'n'. -iname --- No toma en consideracin maysculas y minsculas. -user ---- (find fichero -user [user]) Busca los ficheros del usuario especificado. se pueden incluir mas opciones con -a (and) y -o (). -group --- Busca los ficheros del grupo especificado. -mtime [+ - n] Busca segun modificacin. +n busca en archivos modificados hasta 'n' dias.-n busca en archivos modificados como mucho en 'n' dias. -size [+ - n] Busca por tamao. (find ruta -size [+ -]n[k M G]) -links [n] Busca por numero de enlaces duros. -inum [n] Busca por numero de inodo. -type [b c d f l] [-a -o !] [opcin de find]. Busca por tipo de archivo. -exec [orden] {}\; Ejecuta la orden sobre el fichero buscado. Herramienta de edicin de texto. Hay muchos editores de texto de uso para linux, tanto en modo texto, como en modo grafico. En modo texto tenemos 'emacs' de los primeros en usarse en Unix, 'Joe' una extensin de GNU, 'vi' de los mas extendidos en distribuciones Linux, y tambin los de entorno Grafico, el mas usual en el entorno grafico Gnome es 'gedit', y para Kde 'kedit'.Nosotros vamos a ver el editor 'vi' para modo texto que a mi modo de ver es el que mas y mejor se lleva con la shell, sin salir de ella.

Editor de textos 'vi'. El editor de textos 'vi' es una herramienta muy potente, para la programacin de shell-script ya que nos permite ir editando el script segn lo vamos probando en otra consola. Este editor, no lo encontrareis en ningn men grafico, ya que funciona en la shell, as que lo llamaremos de la siguiente forma desde la terminal: vi fichero

Si el fichero existe lo abre y lo podremos editar, si no existe lo crea. Para empezar a insertar texto, pulsaremos 'i' de insertar y para agregar texto, pulsaremos 'a' de append. En esta aplicacin debis de olvidaros del uso del ratn lo suyo es usar el teclado para moverse por el texto, con las teclas de direccin, 'intro' para salto de lnea, 'Supr' para suprimir caracteres, tambin 'dell' para esto.. etc, doy por hecho que sabis para que sirven las teclas.. Para salir de la edicin pulsamos 'Esc', ojo, salimos de la edicin pero no del editor. Para guardar los cambios sin salir pulsamos ':w 'enter' '. Para salir del editor guardando los cambios ':x 'enter' '. Para salir ':q 'enter''. Para forzar salida ':q! 'enter''. Primeros pasos en shell-script. Que es un shell-script. Un shell script es un fichero de texto, que contiene ordenes de shell, la cual va ejecutando una a una siguiendo un guin preestablecido en el propio script. Se pueden hacer shell-script en todos los tipos de shell que existen, 'bash' 'sh' 'ksh' 'csh'... pero no tienen por que ser compatibles unos con otros, para que sean compatibles hay distintas formas de ejecutarlos y de indicar a la shell como actuar. Maneras de ejecutar un shell-script. Lo mejor para ver como se ejecuta un shell-script es crear uno, as que a ello. vi script1

Una vez abierto en la shell el editor, pulsamos 'i' e insertamos el siguiente texto. echo "hola mundo" A continuacin pulsamos escape 'Esc', y tecleamos ':w' para grabar los cambios. a continuacin, abrimos otra shell y empezamos a ver las formas de ejecutarlo. 1 La forma mas rpida para ir ejecutando un script segn lo vamos editando, es llamar a la propia shell que estemos usando, para que ejecute el archivo de nuestro script: rh3nt0n@rh3nt0n-laptop:~$ bash script1 hola mundo rh3nt0n@rh3nt0n-laptop:~$ Como podis apreciar, el script se ha ejecutado sin problemas y ha imprimido en la pantalla 'hola mundo' ejecutando la orden echo. 2 Del modo anterior, usamos 'bash' para que ejecute nuestro script. Para ejecutar directamente nuestro script en la shell, sin tener que llamar a 'bash', la opcin que tenemos es dar a nuestro script permiso de ejecucin de la siguiente manera: chmod +x script1 Para ejecutar nuestro script una vez tenga permiso de ejecucin solo hay que llamarlo de la siguiente manera: rh3nt0n@rh3nt0n-laptop:~$ chmod +x script1 rh3nt0n@rh3nt0n-laptop:~$ ./script1 hola mundo rh3nt0n@rh3nt0n-laptop:~$ Como podris apreciar, para ejecutarlo hemos usado './' esto no es mas que la ruta relativa de donde se encuentra el fichero de nuestro script, si este se encontrara en otro directorio de nuestro home, la orden tendra que ser: ./directorio/script1. Espero que hallis captado la idea. 3 Para definir en que shell ha de ejecutarse nuestro script, existe el 'shebang' que corresponde a la primera lnea de nuestro script y que es algo que tendremos que aadir siempre a nuestros script para evitarnos problemas a la hora de ejecutarlos, ya que define la shell hija donde se ejecutaran estos. #!/bin/bash Esto es un 'shebang', el cual indica que para ejecutar el script, hay que usar la aplicacin 'bash' que se encuentra en el directorio '/bin'. Una buena idea, y algo que deberamos de tener en cuenta a la hora de programar nuestros shellscript, es comentar las ordenes que vayamos aadiendo a estos, ya que a la hora de configurar la orden sabremos que funcin tiene, pero a la hora de echarle tiempo despus un vistazo al cdigo, si no hemos comentado las ordenes elaboradas, puede ser realmente tedioso el hecho de interpretarlo. Esto ocurre tambin con la identacin de el cdigo que veremos mas adelante. Para comentar lneas de ordenes, existe el carcter '#' almohadilla, el cual la shell salta sin ejecutar el contenido de la lnea que empiece por ella, esto lo veremos mejor insertando en nuestro script1, tanto el shebang, como una lnea comentando lo que hace nuestro script.

Si hemos dejado abierto el editor vi, en otra terminal, vamos a ella, si no es as abrimos nuestro script1 de esta manera: vi script1 Se abrir nuestro fichero script1 con 'vi'.Ahora insertamos 'i' las siguientes lneas, de tal modo que quede as: #!/bin/bash # Mi primer shell-script echo "hola mundo" Para poder ejecutar nuestro script desde cualquier lugar de nuestro sistema de archivos, tenemos dos opciones, la primera es copiar el script en el directorio /bin (si no existe, no hay problema en crearlo) de nuestro /home, en mi caso rh3nt0n. Lo cual permitira que ejecutramos nuestro script sin necesidad de tener privilegios de administrador como cualquier otro comando, con solo nombrarlo. O bien la opcin de copiar nuestro script en el directorio /bin de root, lo cual permitir ejecutarlo con privilegios de administrador con solo nombrarlo, siendo root. En todo caso os doy los dos ejemplos, y vosotros decids como queris trabajar con vuestros scripts, eso si, teniendo en cuenta que trabajar como root es bastante peligroso para la integridad de nuestro sistema de ficheros. cp script1 /home/bin cp script1 /bin Con el primer comando copiamos script1 a el directorio /home/bin, lo cual nos permitira ejecutar el script con solo nombrarlo, pero solo a nosotros como usuario sin privilegios. Con el segundo comando copiaramos nuestro script a el directorio /bin, lo cual permitir solo a 'root' ejecutarlo, para esta opcin deberemos tener privilegios de administrador. Supongamos que elejimos el primer caso, despues de copiar el script1 en /home/bin lo ejecutaramos: rh3nt0n@rh3nt0n-laptop:~$ ls -l ~/bin total 4 -rwxr-xr-x 1 rh3nt0n rh3nt0n 18 2006-11-05 15:26 script1 rh3nt0n@rh3nt0n-laptop:~$ ./bin/script1 hola mundo rh3nt0n@rh3nt0n-laptop:~$ ./script1 hola mundo rh3nt0n@rh3nt0n-laptop:~$ script1 hola mundo rh3nt0n@rh3nt0n-laptop:~$ Bueno, pues habiendo visto, algunos de los aspectos bsicos de la programacin en shell-script, os emplazo a la semana que viene, para meternos de lleno con asuntos mas serios y nuevos comandos de uso en shell-script.

Capitulo cuarto. En este cuarto capitulo trataremos de lleno la base de la programacin en shell-script, para que os sirva como punto de partida en la elaboracin de vuestros propios shell-script Trataremos el paso de parmetros o variables de captura, las variables autodefinidas por la shell, comandos de captura de variables, comandos para operaciones aritmticas, condicionales simples, condicionales mltiples, ciclos o 'loops', iteracin, el uso de funciones, y captura de seales. Dada la dificultad que conlleva el explicar cada comando con las posibles variantes con las que se puede aplicar, explicare con ejemplos genricos, los cuales podris ir copiando y pegando en la terminal para ver su forma de funcionar y poder practicar con ellos para un mejor entendimiento de estos. Consideraciones a tener en cuenta Un shell-script es un guin de comandos que la shell va ejecutando en orden. A la shell le da igual si comentamos los comandos, o los identamos, los ejecutar por orden igualmente, pero a nosotros en scripts lo suficientemente largos no nos da igual, es algo bsico llevar un orden a la hora de elaborarlos, ya que como coment anteriormente en otras ocasiones, en el momento de hacer un comando, tendremos claro lo que queremos que haga, pero a la hora de modificar un script o intentar interpretar lo que hace un comando dentro de este, pasado el tiempo, no lo tendremos tan claro, y agradeceremos mucho el hecho de haber tenido en cuenta esto. Para comentar el cdigo, ya vimos anteriormente el uso del caracter '#' almohadilla el cual se puede utilizar antes de el comando a comentar o incluso en lneas que efecten el comando propiamente dicho de este modo : #!/bin/bash # Ejemplo de comentado de scripts echo "hola mundo" # este comando imprime el texto entre comillas en pantalla Identacin del cdigo La identacin del cdigo es algo extendido y normal en todos los lenguajes de programacin. Es un buen modo de ordenar de una forma visual el cdigo, para poder ver a simple vista donde acaba una orden y empieza otra, la cual a su vez se ejecuta o no dentro de otra orden o condicin. Esto lo entenderemos mejor de una forma visual, del mismo modo que se identan los programas: inicio comando 1 >>>>>>>>>inicio comando 2 >>>>>>>>>>>>>>>>>>inicio comando 3 >>>>>>>>>>>>>>>>>>fin comando 3 >>>>>>>>>fin comando 2 fin comando 1 Como se puede ver, el comando 3 empieza y acaba dentro de el comando 2 el cual empieza y termina dentro del comando 1. Paso o captura de parmetros o argumentos. Como bien sabemos, en un script podemos incorporar cientos de comandos, pero estos necesitan de argumentos para poder funcionarn shell-script que use siempre los mismos parmetros, nos servir una vez o dos.. pero lo realmente til es que podamos incorporar a nuestro script distintos argumentos para que funcione segn nos interese en cada momento. Estos parmetros se traducen en forma de variables dentro de nuestro script las cuales modificamos nosotros aadiendo o

pasndoselas en el momento de lanzarlo lo llamaremos forma 'esttica', o haciendo que nos las pida en un momento determinado de su ejecucin, la cual llamaremos forma 'dinmica'. Esto lo entendermos mejor, como siempre con un ejemplo: #!/bin/bash #Paso de argumentos de forma 'estatica'. echo "primera opcin $1" echo "segunda opcin $2" echo "tercera opcin $3" En el ejemplo anterior al ejecutar el script tendramos que pasarle el valor de las variables $1, $2 y $3, en el momento de lanzar el script, para que este las tome en consideracin. rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script2 primera segunda tercera primera opcin primera segunda opcin segunda tercera opcin tercera rh3nt0n@rh3nt0n-laptop:~/scripts$ Como vemos en su ejecucin, las variables $1,$2 y $3 la shell las coge de la lnea al lanzar este, y las traduce por orden dentro del script segn se las ha llamado. Estas variables pueden ser cadenas de texto (entrecomilladas), nmeros, ficheros o rutas de directorios. Dependiendo de el tipo de argumento que necesite el comando que las requiera. El paso de argumentos esta limitado a 9 pero este inconveniente se subsana con el comando 'shift' el cual explicare un poco mas adelante ya que es necesario que antes conozcis las variables autodefinidas por la shell para shell-script. Variables autodefinidas por shell-script $# ---- Esta variable contiene el numero de argumentos que hemos pasado al script. $0 ---- Esta variable contiene el nombre de el shell-script que se ejecuta. $* ---- Esta variable muestra una cadena con los parmetros que hemos pasado al script. $? ---- Esta variable contiene la salida del comando anterior donde se encuentre dentro de el script. Esto lo veremos mas claro aadiendo estas variables a nuestro script anterior #!/bin/bash #Paso de argumentos de forma 'esttica'. echo "primera opcin $1" echo "segunda opcin $2" echo "tercera opcin $3" #Variables autodefinidas echo "se ejecuta $0" echo "tengo $# argumentos" echo "los cuales han sido $*" cp #este comando necesita parmetros, por lo tanto lanzara un error que $? capturara echo "salida de error: $?" Al ejecutar nuestro script, obtendremos la siguiente salida: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script2a primera segunda tercera primera opcin primera segunda opcin segunda

tercera opcin tercera se ejecuta script2a tengo 3 argumentos los cuales han sido primera segunda tercera cp: falta un fichero como argumento Pruebe `cp --help' para ms informacin. salida de error: 1 rh3nt0n@rh3nt0n-laptop:~/scripts$ Como se puede apreciar las variables autodefinidas del script toman el valor de los parmetros y las circunstancias en las que se ejecuta el script, variando si estas circunstancias varan. Comando 'shift' Este comando hace posible que podamos una vez usada una variable, eliminarla y poder usar ese valor de variable para otro argumento, esto como es habitual lo veremos mejor con un ejemplo: #!/bin/bash #uso del comando shift echo "primera opcin $1" shift echo "segunda opcin $1" shift echo "tercera opcin $1" Como podremos apreciar en la ejecucin de este script, el comando shift nos permite usar una misma variable, para distintos argumentos: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script2b primera segunda tercera primera opcin primera segunda opcin segunda tercera opcin tercera rh3nt0n@rh3nt0n-laptop:~/scripts$ Como se puede observar obtenemos la misma salida que en el primer script pero sin la necesidad de dar un valor a cada argumento. Pase o captura de parmetros de forma 'dinmica'. Si en un momento dado de la ejecucin de nuestro script, necesitamos de la introduccin de algn parmetro de forma, por llamarlo de alguna manera, 'en caliente', mientras se ejecuta el script, tenemos la opcin de usar el comando 'read'. Comando 'read' Durante la ejecucin de un script, si este se encuentra con el comando read seguido de un nombre de variable, la ejecucin se detendr y nos mostrara el cursor parpadeando en espera de que introduzcamos un parmetro, que a continuacin la shell almacenara asignndolo como valor de el nombre de variable en cuestin. Ejemplo: #!/bin/bash #uso del comando read

echo "Cual es tu nombre?" read nombre echo "Hola $nombre" Si hasta ahora hemos sido un poco avispados, nos habremos dado cuenta, de que para asignar un nombre a una variable desde read, no se usa el signo de '$' ,se usa solo en el momento de usar dicha variable. Veamos la ejecucin del script: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script3 Cual es tu nombre? rh3nt0n <------------ aqui tipeamos el valor de la variable nombre. Hola rh3nt0n <-------- aqui toma el valor tipeado y lo muestra por pantalla rh3nt0n@rh3nt0n-laptop:~/scripts$ Se pueden asignar varias variables en un mismo read, as como pedir varios argumentos con varios read. Ejemplo: #!/bin/bash #uso del comando read con varios parmetros y varios read echo "Cual es tu nombre?" read nombre echo "Cuales son tus apellidos?" read apellido1 apellido2 sleep 5 # dormimos la terminal 5 segundos echo " Tu segundo apellido es $apellido2 " echo " Tu nombre completo es $nombre $apellido1 $apellido2" echo " Hola $nombre" Como veremos en la salida podemos llamar a las variables introducidas en el orden en que queramos. Solo he usado el comando sleep para que podis apreciar la salida de el script diferenciada de la entrada de parmetros. La salida seria la siguiente: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script4 Cual es tu nombre? pingino Cuales son tus apellidos? unix linux Tu segundo apellido es linux Tu nombre completo es pingino unix linux Hola pingino rh3nt0n@rh3nt0n-laptop:~/scripts$ Comando para operaciones aritmticas comando 'expr'. Este comando suele usarse con asiduidad dentro de condicionales tanto simples como mltiples que explicare mas adelante, o para simplemente hacer operaciones aritmticas. Necesita como mnimo tres argumentos, dos operandos y un operador. Los operadores son los tpicos de operaciones aritmticas :

suma ---------- '+' resta --------- '-' multiplicacin- '*'Este smbolo hay que escaparlo '\*' dada su condicin de carcter especial. divisin------- '/' modulo--------- '%' el modulo no es mas que el resto de una divisin, el cual suele ser el divisor menos uno. Ejemplo de modulo: 100 % 5 ------> el modulo 5 de 100 sera de 0 a 4.Esto nos puede servir a la hora de generar un numero aleatorio, reducirlo a la cantidad que deseemos, Se entender mas adelante con algunos ejemplos. Sintaxis: expr [operando1] operador [operando2] Ejemplo de expr: #!/bin/bash #Ejemplo de expr (el cuadrado de un numero) echo "Dame un numero." read numero resultado=`expr $numero \* $numero` # declaramos la variable resultado, como resultado de expr echo "El resultado de el cuadrado de $numero es $resultado" La salida del script seria la siguiente: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script5 Dame un numero. 6 El resultado de el cuadrado de 6 es 36 rh3nt0n@rh3nt0n-laptop:~/scripts$ Como se puede observar read pide la variable numero, y expr se encarga de dar como valor a la variable resultado, la operacin que realiza con la variable numero, la cual en este caso no es mas que una multiplicacin por si misma. Como se puede tambin observar 'escapamos' el carcter asterisco '\*' para que la shell no lo tome como metacarcter. Evaluar cadenas Para evaluar cadenas, ya sean cadenas de texto, ficheros, o nmeros, tenemos el comando 'test' el cual nos permite de una forma rpida y fcil comparar o comprobar cualidades o valores de las cadenas evaluadas para poder a grosso modo obtener un resultado positivo o negativo que haga actuar a tal o cual comando de uno u otro modo. Comando 'test'. Este comando para que no cause confusin desde el principio se suele abreviar usando solo corchetes [cadena valor cadena ] y suprimiendo el propio comando 'test', dentro de un 'if', 'case', 'until', 'for' etc ... (que veremos mas adelante) o simplemente para definir una variable, variable=`[ $1 != $2 ]` Como veo que me enredo mucho, veamos un ejemplo con test, con y sin comando. Un sencillo ejemplo de 'test'para ver su sintaxis: #!/bin/bash # ejemplo de test test $1 = $2 # necesitamos dos argumentos al lanzar el script echo $? #si 'echo' devuelve un 0 es que el comando test es verdadero.

Si lo ejecutamos introduciendo dos valores iguales como argumentos, el resultado de la comparacin ser verdadero, ya que evaluamos si $1 es igual '=' a $2, por lo tanto 'echo' imprimir un 0 en la pantalla: rh3nt0n@rh3nt0n-laptop:~$ bash script6 uno uno 0 rh3nt0n@rh3nt0n-laptop:~$ En caso de que introduzcamos dos argumentos distintos, la comparacin no ser verdadera, y por lo tanto nos devolver un 1: rh3nt0n@rh3nt0n-laptop:~$ bash script6 paquito paquita 1 rh3nt0n@rh3nt0n-laptop:~$ Ahora probemos a editar el anterior script de la siguiente manera, y lo ejecutamos del mismo modo que el anterior: #!/bin/bash # ejemplo de test con corchetes [ $1 = $2 ] # necesitamos dos argumentos al lanzar el script echo $? #si 'echo' devuelve un 0 es que el comando test es verdadero. Una vez ejecutado el script, nos daremos cuenta que es lo mismo poner los corchetes que la palabra test. Como dijimos anteriormente, el comando test sirve para evaluar ficheros, cadenas de texto, y nmeros, pero estos no se evalan de la misma forma ya que evidentemente no son argumentos del mismo tipo, y cada uno se trata de forma diferente: Modos de evaluar con 'test'. 1 Evaluando ficheros. Los ficheros se pueden avaluar con estos parmetros: -f-----------indica si el fichero existe.0 si es verdadero y 1 si es falso. -s-----------indica si el fichero existe y no esta vacio.0 si verdad, 1 si falso. -r-----------indica si tiene permiso de lectura.0 verdad, 1 falso. -w-----------indica si tiene permiso de escrituta.0 verdad, 1 falso. -x-----------indica si tiene permiso de ejecucin.0 verdad, 1 faslo. -d-----------indica si es directorio. 0 verdad, 1 falso. Estos parmetros se pueden unir usando los enlazadores : -a-----------and, 'y'. -o-----------or, 'o'. !------------not, no. Veamos un ejemplo de evaluacin de ficheros: #!/bin/bash # evaluacin de ficheros con test. [ -f $1 ] # al lanzar el script damos ruta relativa o absoluta del fichero. echo $? #mostrara 0 si exite y 1 si no existe Probemos con uno de nuestros scripts:

rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script7 script1 0 rh3nt0n@rh3nt0n-laptop:~/scripts$ Podemos comprobar que existe ya que la evaluacin nos retorna un 0. rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script7 script10 1 rh3nt0n@rh3nt0n-laptop:~/scripts$ Podemos comprobar que no existe ya que test nos retorna un uno. Tambin podemos usar 'read' para introducir dinmicamente el fichero a evaluar. 2 Evaluando cadenas de texto. Para evaluar cadenas de texto tenemos los parmetros: parmetros: '=' ---------- igual '!='---------- distinto Ejemplo: #!/bin/bash # evaluacin de ficheros con test. [ $1 != $2 ] # al lanzar el script damos dos cadenas de texto como argumento echo $? #mostrara 0 si distinto y 1 si si igual Si ejecutamos el script, nos dar en funcin de los argumentos una salida u otra. nmeros aleatorios: Antes de nada, explicare como se genera un numero aleatorio usando la variable $RANDOM. La variable $RANDOM genera un numero aleatorio de entre 1 y 32000, podemos necesitar conseguir un numero aleatorio para multitud de funciones, a mi por ejemplo se me ocurre una, los nmeros de la primitiva, pero hay un problema, nos sobran muchos nmeros ya que la primitiva solo tiene 48, para solucionar el problema utilizaremos la expresin '%' modulo, la cual nos limita el numero aleatorio a el modulo que elijamos de este, en este caso ser 49. Lo mejor es un ejemplo: #!/bin/bash # aleatorio con random 'primitiva' alea=`expr $RANDOM % 49` # generamos un numero aleatorio1=`expr $alea + 1`# nos aseguramos que no sea 0 sumndole 1 alea=`expr $RANDOM % 49` # el segundo .. aleatorio2=`expr $alea + 1` alea=`expr $RANDOM % 49` aleatorio3=`expr $alea + 1` alea=`expr $RANDOM % 49` aleatorio4=`expr $alea + 1` alea=`expr $RANDOM % 49` aleatorio5=`expr $alea + 1` alea=`expr $RANDOM % 49` aleatorio6=`expr $alea + 1`

echo "Copia estos numeros:" echo " $aleatorio1 - $aleatorio2 - $aleatorio3 " # imprimimos los tres primeros echo " $aleatorio4 - $aleatorio5 - $aleatorio6 " # imprimimos los otros tres La salida seria algo parecido a esto: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash aleatorio Copia estos numeros: 24 - 2 - 29 6 - 33 - 11 rh3nt0n@rh3nt0n-laptop:~/scripts$ Por supuesto hay mas mtodos para generar nmeros aleatorios, pero me pareci la forma mas rpida y sencilla de que vierais un ejemplo, espero que hallis captado la idea. Sigamos con text. 3 Evaluando nmeros Pensareis que con las opciones anteriores de evaluacin de cadenas de texto, tambin se pueden evaluar nmeros, y en cierto modo si se puede, pero hay que tener algo en cuenta : [ 04 = 4 ] Si nos damos cuenta, esa evaluacin nos devolvera '1', ya que el '=' evala si 04 es igual a 4, y como cadena de texto, no lo es. Por lo tanto, si lo que queremos es evaluar nmeros, tenemos las siguientes opciones o parmetros: -lt --------- menor que ... -le --------- menor o igual -gt --------- mayor que ... -ge --------- mayor o igual -eq --------- igual -ne --------- no igual Visto lo cual haremos un script para adivinar un numero aleatorio, en el cual nos basaremos para ir mejorndolo y para as entender lo que viene a continuacin: condicional simple. #!/bin/bash # adivinador con evaluacin numrica echo "Adivina mi numero" read adiv aleatorio=`date +%S` #creamos un numero aleatorio en segundos de 0 a 59 aleatorio=`expr $aleatorio % 5` # lo reducimos a su modulo 5 (de 0 a 4) # si nos damos cuenta hemos sobrescrito la variable $aleatorio # no hay problema en esto ... [ $aleatorio -eq $adiv ] # evaluamos si el numero que hemos introducido es igual a el aleatorio echo $? # nos imprime si lo es o no: 0 si, 1 no . Ejecutad el script: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash adivinador Adivina mi numero: 3 0 rh3nt0n@rh3nt0n-laptop:~/scripts$ bash adivinador Adivina mi numero: 2

1 rh3nt0n@rh3nt0n-laptop:~/scripts$ Como se puede apreciar, en la primera ejecucin he tipeado el numero 3, y he acertado, por consiguiente la salida de el comando test es 0. Por contra, en la segunda ejecucin, he tipeado 2, y he fallado, por consiguiente la salida ha sido un 1. Bueno despus de todo esto, espero que halla quedado claro lo que significa un 0 y lo que significa un 1 en la salida de de un test...sigamos Condicional simple. Cuando hablamos de condicional simple, bsicamente hablamos de el uso de el comando 'if', el cual nos permite usar el 'test' para que dependiendo de la salida de este, nuestro script haga una cosa u otra.. veamos un ejemplo con el anterior script: #!/bin/bash # adivinador mejorado con if echo "Adivina mi numero:" read adiv aleatorio=`date +%S` #creamos un numero aleatorio en segundos de 0 a 59 aleatorio=`expr $aleatorio % 5` # lo reducimos a su modulo 5 (de 0 a 4) # si nos damos cuenta hemos sobrescrito la variable $aleatorio # no hay problema en esto ... if [ $aleatorio -eq $adiv ] ; # evaluamos si el numero que hemos introducido es igual a el aleatorio then # si es igual pasamos a el echo de la siguiente lnea echo "has acertado!!" else # si no es igual pasamos a el echo de mas abajo echo "has errado!!" fi Si lo ejecutamos: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash adivinador2 Adivina mi numero: 3 has errado!! rh3nt0n@rh3nt0n-laptop:~/scripts$ Podemos ver que la principal diferencia es que la salida de test nos redirige el camino a tomar por el script hacia un comando u otro, segn sea la salida de este falsa o verdadera. sintaxis de comando 'if': if [ evaluacin ] ; ----then ---------paso a tomar si verdadero ----else ---------paso a tomar si falso

fi Como podris comprobar, este comando es de los que hay que identar para una mayor comprensin de el a la hora de comprenderlo cuando lo miremos tiempo despus de hacerlo. Respecto a su funcionamiento solo aadir, que en caso de que no se cumpla la condicin evaluada, no es estrictamente necesario usar 'else', con lo cual la opcin 'else' es opcional, si lo que nos interesa es una salida verdadera de la evaluacin.. Otro ejemplo de 'if' pero esta vez evaluando ficheros: #!/bin/bash #################################### # Este script evalua dos ficheros dados de forma estatica# # diciendonos cual es mayor en tamao .########### #################################### uno=`ls -l $1 | tr -s " " | cut -f5 -d " "` #filtramos el primer fichero dos=`ls -l $2 | tr -s " " | cut -f5 -d " "` #filtramos el segundo fichero if [ $uno -gt $dos ] ; then echo " $1 es mayor " else echo " $2 es mayor " fi Si ejecutamos nuestro script, evaluando por ejemplo dos de los script que hemos creado hasta ahora: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash ficheromayor /home/rh3nt0n/scripts/script1 /home/rh3nt0n/scripts/script7 /home/rh3nt0n/scripts/script7 es mayor rh3nt0n@rh3nt0n-laptop:~/scripts$ Condicional mltiple. Para explicar el uso de esta forma de condicionar, haremos una calculadora simple la cual necesitara de tres argumentos a aadir de forma 'esttica'. as entenderemos el como y por que de la opcin de el comando 'case' para poder hacer mltiples condiciones, sin necesidad de alargar el cdigo con 'if' recurrentes, como en el siguiente caso: #!/bin/bash # calculadora con if. if [ $3 = "suma" ] then expr $1 + $2 else if [ $3 = "resta" ] then expr $1 - $2 else if [ $3 = "multi" ] then expr $1 \* $2 else if [ $3 = "divi" ]

then expr $1 / $2 else echo "opcin no valida" fi fi fi fi Si ejecutamos la calculadora: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash calculadora 34 56 suma 90 rh3nt0n@rh3nt0n-laptop:~/scripts$ bash calculadora 34 56 multi 1904 rh3nt0n@rh3nt0n-laptop:~/scripts$ Bien, vemos que la calculadora funciona, pero el cdigo es demasiado extenso y adems tiene demasiados 'if', y no es necesario si usamos 'case'. Comando 'case'. Sintaxis:(cambiad '>' por espacios) case variable in >>>>>>patron1)>>>>ordenes ;; >>>>>>patron2)>>>>ordenes ;; >>>>>>patron3)>>>>ordenes ;; . . . >>>>>>*)>>>>>>>>ordenes ;; esac Veamos como ejemplo la calculadora anterior a que se reduce con 'case': #!/bin/bash # Calculadora con case case $3 in "suma") expr $1 + $2 ;; "resta") expr $1 - $2 ;; "multi") expr $1 \* $2 ;; "divi") expr $1 / $2 ;; esac Al ejecutar nuestra nueva calculadora con la mitad de lneas gracias a case, tenemos que case nos permite dar mltiples valores a una variable y actuar de la forma que sea, segn el valor que introduzcamos. rh3nt0n@rh3nt0n-laptop:~/scripts$ bash calculadora2 50 50 multi 2500

rh3nt0n@rh3nt0n-laptop:~/scripts$ bash calculadora2 50 50 suma 100 rh3nt0n@rh3nt0n-laptop:~/scripts$ Ciclos o loops. Los ciclos o loops, sirven para hacer que cuando se cumple una determinada circunstancia, una orden se repita, hasta que esa circunstancia deje de cumplirse. Para esto tenemos varios comandos que comentaremos a continuacin: Comando 'while'.'mientras' Este comando ejecuta las ordenes que contenga, si la condicin es cierta.(0). Sintaxis: while [ condicin ] do #orden #orden . . . done Veamos un ejemplo: #!/bin/bash # El cuadrado de 1 a 100 con while cont=1 while [ $cont -lt 100 ] #siempre se usa test, se evalua que $cont sea menor que 100 do cuad=`expr $cont \* $cont` #hacemos que $cuad valga el cuadrado de $cont echo "el cuadrado de $cont es: $cuad" cont=`expr $cont + 1` #hacemos que $cont se vaya incrementando en uno. done Al ejecutarlo, veremos que while hace que se repitan de la lnea 4 a la 8, hasta que la condicin $cont -lt 100, se incierta, o sea que $cont valga 100 o mas. rh3nt0n@rh3nt0n-laptop:~$ bash script8 el cuadrado de 1 es: 1 el cuadrado de 2 es: 4 el cuadrado de 3 es: 9 el cuadrado de 4 es: 16 el cuadrado de 5 es: 25 . . . el cuadrado de 94 es: 8836 el cuadrado de 95 es: 9025 el cuadrado de 96 es: 9216 el cuadrado de 97 es: 9409 el cuadrado de 98 es: 9604

el cuadrado de 99 es: 9801 rh3nt0n@rh3nt0n-laptop:~$ Tambin tenemos la opcin de el comando 'until' que hace lo mismo que while pero al contrario, o sea su negacin. Comando 'until'.'hasta' Negacin de while. Sintaxis: until [ condicin ] do ordenes #misma estructura que while done Veamos otro ejemplo: #!/bin/bash # imprimimos hasta 10 con until cont=1 until [ $cont -gt 10 ] #hasta que $cont sea mayor que 10 do echo $cont cont=`expr $cont + 1` done Al ejecutarlo veremos que el bucle funciona hasta que la variable $cont es mayor que 10. rh3nt0n@rh3nt0n-laptop:~$ bash script9 1 2 3 4 5 6 7 8 9 10 rh3nt0n@rh3nt0n-laptop:~$ Comando de iteracin 'for'. Este comando es muy til para evaluar y actuar sobre elementos que estamos pasando por parmetros. Sintaxis: for variable in 'lista de parmetros' do ordenes done Veamos un ejemplo basico:

#!/bin/bash # ejemplo basico de for for numero in $1 do echo $numero done Al ejecutarlo veremos que coge los argumentos y ejecuta uno a uno el comando entre do y done: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script10 "uno dos tres" uno dos tres rh3nt0n@rh3nt0n-laptop:~/scripts$ Continuemos con for. Ahora veremos una forma de estructurar for condicionando directamente la variable a introducir por parametros. Sintaxis: for (( 1 ; 2 ; 3 )) do done 1 Da un valor de inicio a la variable. 2 Condiciona la variable. 3 Incrementa la variable. Veamos un ejemplo tonto en el que nuestro script nos dir de un rango entre dos nmeros dados por parmetros la cantidad de nmeros que hay entre ellos y que son menores que el mayor de los introducidos, en caso de que el primer parmetro sea mayor que el segundo se parara el script avisando del error : #!/bin/bash # mas opciones de for if [ $1 -lt $2 ] then numero=`expr $2 + 1` for (( i=$1 ; i<$numero ; i++ )) do echo "$i es menor que $numero" if [ $i = $2 ] then exit 0 fi done else echo "opcion incorrecta !! la primera variable a de ser menor" fi Si ejecutamos el script veremos que for da el valor a la variable i, la compara con el segundo parmetro dado, si es menor ejecuta el comando echo, y despus incrementa el valor de i en uno, haciendo esto hasta que i es igual o mayor que el segundo parmetro: rh3nt0n@rh3nt0n-laptop:~$ bash prueba 44 45 44 es menor que 46

45 es menor que 46 rh3nt0n@rh3nt0n-laptop:~$ Si la primera variable es mayor que la segunda, nos lanza el error y sale: rh3nt0n@rh3nt0n-laptop:~$ bash prueba 46 45 opcion incorrecta !! la primera variable a de ser menor rh3nt0n@rh3nt0n-laptop:~$ Como operar con los ciclos. Podemos interactuar con los ciclos o bucles segn se comporten estos, es decir, si por ejemplo obtenemos una indeterminacin dentro de un bucle, podemos hacer que este pare y salte a la siguiente lnea del script dejando el bucle, que siga con el bucle, o que el script pare. Para esto, podemos usar los siguientes comandos: Comando 'break'. Si despus de una indeterminacin en un bucle, la shell encuentra un break, esta lo interpreta saltando el bucle y siguiendo con la siguiente orden despus del bucle. Comando 'continue'. continue, es un escape, con lo cual, si el bucle termina correcta o incorrectamente, y la shell encuentra un continue, en lugar de proseguir con el siguiente comando despus del bucle, vuelve a ejecutar el bucle. Comando 'exit'. Aunque exit no es un comando exclusivo de los bucles, tambin se usa con estos, en el caso de que queramos parar la ejecucin del script, si se produce una situacin determinada. Para comprender el uso de estas ordenes, crearemos un script con un bucle que de como resultado una indeterminacin. Por ejemplo una indeterminacin seria el resultado de dividir un numero entre cero : #!/bin/bash # ejemplo de indeterminacin for (( i=-10 ; i<=10 ; i++ )) do if [ $i -ne 0 ] ; then expr 1 \ $i else break # continue # exit # aqui probad con cada una de las opciones fi done Ahora probemos estas opciones con un script mas til, el siguiente ejemplo te dice de un rango de nmeros dados por parmetros, cuales son pares: #!/bin/bash # ejemplo con continue break y exit if [ $# -ne 2 ] ; then echo "necesito dos argumentos" exit 1 fi if [ $1 -gt $2 ] ; then echo "$1 no puede ser mayor que $2" exit 2 fi for (( i=$1 ; i<$2 ; i++ )) do mod=`expr $i % 2`

if [ $mod -ne 0 ] ; then continue # aqui probad primero segun esta y despues con break y exit fi echo " $i es par !!" done Al ejecutarlo segn esta, la salida ser: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script13 4 9 4 es par !! 6 es par !! 8 es par !! rh3nt0n@rh3nt0n-laptop:~/scripts$ Si cambiamos la lnea que contiene el continue, por break o exit, la salida ser como esta, ya que el bucle con estas dos opciones quedara inutilizado: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script13 4 9 4 es par !! rh3nt0n@rh3nt0n-laptop:~/scripts$ Mens selectivos en shell-script. En shell-script, podemos confeccionar mens con los cuales elegir opciones a ejecutar con solo pulsar una tecla, para esto tenemos el comando 'select', el cual siempre debe de ir acompaado de el comando 'case'. Sintaxis: select i in lista de opciones do case esac done Veamos un ejemplo: #!/bin/bash # ejemplo de select select i in managed monitor cualquiera_orden salida do case $i in "managed") echo "aqu podramos poner la configuracin de nuestra interfaz de red en modo managed";; "monitor") echo "aqu podramos poner la configuracin de nuestra interfaz de red en modo monitor";; "cualquiera_orden") echo "aqu podramos hacer lo que nos diera la gana..";; "salida") break;; *) exit;; # esta opcin hace que con cualquier opcin que tecleemos invalida, el script pare. esac done Al ejecutarlo tendremos: rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script11 1) managed 3) cualquiera_orden

2) monitor 4) salida #? 1 aqu podramos poner la configuracin de nuestra interfaz de red en modo managed #? 3 aqu podramos hacer lo que nos diera la gana.. #? 4 rh3nt0n@rh3nt0n-laptop:~/scripts$ Uso de funciones Una funcin es un trozo de cdigo que se utilizara con frecuencia en un script, y que solo varia en una variable. Sintaxis: nombre_funcion() { cdigo a ejecutar en la funcin } Veamos un ejemplo: #!/bin/bash # determina par e impar de los nmeros que introduzcamos dinmicamente determinaPar() { # aqu empieza la funcin num=`expr $a % 2` if [ $num -eq 1 ];then echo "impar ; $a" else echo "par: $a" fi } # aqu termina la funcin echo "Dame tres nmeros" read a1 read a2 read a3 export a=$a1 determinaPar export a=$a2 determinaPar export a=$a3 determinaPar Si lo ejecutamos veremos que a cada variable introducida se le aplica la funcin, lo cual ahorra muchas lneas de cdigo ya que sin usar la funcin, tendramos que repetir continuamente el cdigo que contiene esta, para cada variable, con lo que esto conllevara. rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script12 Dame tres numeros 700 75 12346 par: 700 impar: 75 par: 12346 rh3nt0n@rh3nt0n-laptop:~/scripts$

Captura de seales. Podemos hacer que nuestro script capture seales a la shell, lanzadas desde el teclado tipo 'crtl+c' y que la shell las ignore. Para esto, se usa el comando 'trap'. Comando 'trap'.Atrapa seales. Sintaxis: trap ordenes seal : trap seal <---- captura seal Veamos un ejemplo: #!/bin/bash # Ejemplo de trap trap mensaje 2 mensaje() { echo "no puedes pararme ;)" } while [ 1 -eq 1 ] # buble infinito do date sleep 1 done Al ejecutarlo veremos que con 'ctrl+c' no podemos pararlo, podremos 'pararlo' usando 'ctrl+z', pero no podremos terminarlo hasta que no hagamos un 'kill %PID' : rh3nt0n@rh3nt0n-laptop:~/scripts$ vi script15 rh3nt0n@rh3nt0n-laptop:~/scripts$ bash script15 sb nov 18 23:46:52 CET 2006 sb nov 18 23:46:53 CET 2006 no puedes pararme ;) sb nov 18 23:46:54 CET 2006 sb nov 18 23:46:55 CET 2006 no puedes pararme ;) sb nov 18 23:46:56 CET 2006 sb nov 18 23:46:57 CET 2006 no puedes pararme ;) sb nov 18 23:46:57 CET 2006 sb nov 18 23:46:58 CET 2006 sb nov 18 23:46:59 CET 2006 [2]+ Stopped bash script15 rh3nt0n@rh3nt0n-laptop:~/scripts$ jobs [1]- Stopped bash script15 [2]+ Stopped bash script15 rh3nt0n@rh3nt0n-laptop:~/scripts$kill %1 rh3nt0n@rh3nt0n-laptop:~/scripts$ jobs [1]- Terminado bash script15 [2]+ Stopped bash script15 rh3nt0n@rh3nt0n-laptop:~/scripts$ kill %2 rh3nt0n@rh3nt0n-laptop:~/scripts$ jobs

[2]+ Terminado bash script15 rh3nt0n@rh3nt0n-laptop:~/scripts$ Bueno, pues con esto ultimo hemos acabado la iniciacin a la shell-script. Por supuesto que hay mas comandos y mas funciones, pero esto es lo bsico, y solo es un punto de partida para que podis seguir practicando con este 'lenguaje de programacin' y profundicis en el para que podis sacarle el mayor partido a la shell. Tambin deciros que es posible que halla algn error en las explicaciones, si os dais cuenta de alguno, espero que perdis un par de minutos en comunicrmelo en el foro. Gracias por leerlo y espero que os sirva de ayuda . despus de este rollo que os he soltao, os emplazo a el siguiente capitulo y espero que no ultimo, en el que trataremos temas de configuraciones de interfaces de red, iptables, y alguna que otra sorpresa mas. Saludos.

CONCEPTOS BSICOS DE REDES WIFI Y SU SEGURIDAD (para principiantes)


Autor: Aironjack
Bueno, algunos ya conocen este texto que publiqu en un hilo y he mejorado y corregido durante bastante tiempo. Ahora creo que est listo para publicarlo en un topic a parte y espero que me comenten lo que les parece, he puesto mucho tiempo y esfuerzo en l. En el futuro, aadir otros posts en este hilo sobre diversos temas, ataques ms avanzados, incluir explicaciones, nuevos enlaces... Bienvenidos a este texto que he realizado con la intencin de explicar una serie de conceptos bsicos sobre las redes wireless (inalmbricas, 802.11), que considero fundamentales para poder entender un poco lo que nos traemos entre manos en el foro de hacking wireless. Antes de nada comentar que algunos aspectos que no se desarrollan en exceso en este manual, se resumen o esquematizan, se pueden encontrar magistralmente explicados en el taller de Vic_THOR (*Bibliografa) por si necesitan ampliar sus conocimientos. Si usted no sabe lo que son los estndares 802.11 le vuelvo a recomendar que visite el anterior taller, ya que contiene los conocimientos ms bsicos que no se explican en este manual. Es necesario conocer tambin la arquitectura de una red wifi 802.11 Al final del manual se ha introducido un glosario con las definiciones de los trminos tcnicos de redes 802.11 para su consulta en caso de duda.

INTRODUCCIN
El hacking como muchos ya sabrn no consiste en seguir los pasos de una receta de cocina. Consiste en conocer tericamente las tcnicas de ataque, fundamentos bsicos del entorno... esto posibilita desarrollar nuevas herramientas de seguridad, combinar diferentes tcnicas de ataque para aumentar la efectividad, desarrollar estrategias de ataque... ------------------------------------------------------------------------------------------------------------------------Antes de nada me parece vital distinguir entre:

- Hacking wireless: Consiste en acceder a la red WLAN de otro usuario y utilizar su ancho de banda para conectarse a internet (es decir nos conectamos por el morro). Acceder a los recursos compartidos de los dems ordenadores de la red y sustraer datos confidenciales de todo tipo. No es est en el fondo la intecin de este manual, sino comprender el tema, montado de una red segura, proteccin de esta, hacer una auditora inalmbrica... en fin que lo de siempre lanse la tica del hacker (Muchos por aqu la necesitan y dan ganas de no postear nada pues se imaginan los usos que darn a esta informacin). - Hacking una red con un router: Consiste en ganar acceso a un ordenador que se encuentra detrs de una red y se conecta mediante un server/gateway/router (lo que sea) a internet. Sobre esto tambin estoy posteando as que si les interesa pueden mirar mis ltimos mensajes, e informarse de como funcionan las IPs en una red, la teora de ataque, mtodos para saltarse router y firewall (como conexiones inversas ya sea mediante netcat o troyanos de conexin inversa) + Todo sobre hacking de una mquina en red que se conecta a travs de un router en: http://foro.elhacker.net/index.php/topic,62799.msg287872.html#msg287872 Esto lo digo porque son muchos los que no distinguen entre lo uno y lo otro y nada tienen que ver entre ellos. ------------------------------------------------------------------------------------------------------------------------La intencin de este manual no es otra que puedan entender de qu hablan. Conceptos bsicos de las redes 802.11 y su seguridad by Aironjack, espero que les sirva: Conocimientos previos antes de empezar el tema: Sera imposible tratar todos los puntos partiendo desde cero. Habitualmente se aconseja antes de introducirse en redes: - Conocer el modelo de capas OSI. *Ir al subforo de redes - Conocer el protocolo TCP/IP. *Subforo de redes - Conocer los diferentes estndares IEEE 802.11: Diferentes actualizaciones del estndar inicial en relacin a la velocidad de transmisin de datos. - Topologa bsica de redes.

1.- Hardware 802.11:


La monitorizacin de redes consiste en detectar las redes inalmbricas cuyas ondas llegan a nuestro captador de seal. Equipo necesario: Para esto se necesita una tarjeta de red inalmbrica WNIC (Wireless Network Interface Card. Tambin reciben el nombre de adaptador inalmbricos AIs) + un software para detectar APs (Access Points o puntos de acceso). AI (Adaptador Inalmbrico): Es necesario saber como se mide la potencia. Nos tienen que sonar conceptos como: IR, EIRP... Para medirla se utilizan varias unidades: milivatios mW o decibelios dB. El modo ms preciso es el dBm (decibelio por milivatio) > Un aumento de 3dB duplica o reduce a la mitad la potencia. > dBm = dBi A la hora de escoger una tarjeta inalmbrica se deben tener en cuenta: > El chipset: El chipset es el chip de la tarjeta, el cerebro si me permiten el trmino. En el siguiente enlace encontrarn un listado de modelos de tarjetas y sus respectivos chipsets. http://www.linux-wlan.org/docs/wlan_adapters.html.gz

> > > > >

Nivel de potencia de salida y posibilidad de ajustarlo Sensibilidad en la recepcin Conectores para antenas externas Soporte de algoritmos de encriptacin mejorados. Imporante: Compatibilidad con el sistema operativo.

Sobre el chipset podra estar hablando horas (jeje quizs no tanto). 1.1.- Qu tarjeta escojo? Es imposible hacer un estudio de mercado sobre todos los modelos disponibles, estudiar la relacin calidad/precio, probar si las mediciones de potencia o distancia son correctas... Esta pregunta no es nada fcil de responder sin conocer las circustancias del usuario: presupuesto, inters, ataques que piensa desplegar... Quizs no sepan que algunas herramientas estn pensandas para actuar con chipsets determinados y que conseguir que funcionen con otros conllevara adaptar el cdigo, lo cual no est al alcance de muchos usuarios, ya sean avanzados, sino de expertos y profesionales. En el subapartado de tarjetas inalmbricas (apartado de hardware 802.11) he comentado las especificaciones a considerar antes de la compra, repasemos. Voy a realizar una lista para guiar al comprador inexperto: --------------------------------------------------------------------------------------------------------------------------> De qu presupuesto dispone? Las tarjetas inalmbricas an hoy en da no son tan baratas como sus compaeras de red 802.33 Ethernet, pero empiezan a tener precios muy asequibles. Las hay desde 20 euros hasta 300 o ms (estas tienen de todo, por ejemplo pigtails que son realmente caros y a la hora de la verdad hay que ponerles cinta aislante para que no se hagan pupa al moverlos) > Qu sistema operativo tiene? - windows: Una tarjeta con chipset Atheros es bastante recomendable. No encontrar problemas para ponerla en modo monitor con drivers airopeek de wildpackets, aunque hay ms chipsets compatibles (slo debe consultar el listado en la pgina de wildpackets). Un modelo interesante podra ser: Conceptronic c54c, aunque mi compaero lovalost me inform que ya no las fabrican, quizs pueda encontrarla rebajada en alguna tienda por internet (bendito stock!) - Linux y BSD: La recomendacin por antonomasia no deja de ser PRISM. por qu? Pues bsicamente porque permiten variedad de opciones: - DoS, ruptura de WEP, fake APs, ataques man-in-the-middle... - Porque funcionan con la gran mayora de aplicaciones, etc. - Estn bien documentadas y darn poca guerra, perfectas para principiantes. - Los linux con kernels a partir de 2.4.18 tienen controladores incorporados. > pero qu modelo? No se olviden de cmo saber que chipset tiene nuestro modelo. http://www.linux-wlan.org/docs/wlan_adapters.html.gz > ADVERTENCIA! Demasiado fcil, no? Pues hasta ahora s. Entramos con el conocido y engorroso problema de las revisiones qu son? Actualizaciones de un mismo modelo qu actualizan? Hace un cambio del chipset. Esto es reamente peligroso, porque podemos comprar un modelo de tarjeta pensando que tiene por ejemplo chipset Prism1 y resulta que tenga Prism Lamadrequelopari (porque es la tercera revisin, mucho ojito!) Los nuevos chipsets no suelen tener, cuando salen, mucha cobertura. Dan problemas y en ocasiones no hay drivers para que puedan entrar en modo monitor, porque se estn desarrollando. Por eso son muchos los piratas del aire que recomiendan usar Intersil Prisms antiguas, porque lo retro est de moda.

pero cmo s que revisin tiene la tarjeta? Aqu es donde viene lo peor. La revisin es algo que viene escrito en la parte de atrs de las tarjetas y casi ninguna web tiene tal exceso de informacin que comente la revisin, es por esto que es recomendable comprar la tarjeta en una tienda especializada con un dependiente que comprenda lo que est tratanto de vender y pueda abrir la caja. Sino podemos buscar por internet sobre nuestro modelo y descubrir si tiene revisiones conflictivas. Cuidense mucho pues sino pueden llevarse una desagradable sorpresa, como por ejemplo encontrarse con un chipset que hayan inventado dos muertos de hambre y no tenga controladores de ningn tipo. > Pues ahora pueden consultar el listado de tarjetas, donde vienen los chipsets, informarse de si tienen conectores externos para antenas y de qu tipo, buscar en una tienda virtual o google el modelo, precios aproximados y decidirse. ------------------------------------------------------------------------------------------------------------------------En estos momentos si tienes una red inalmbrica cuyas ondas de radio lleguen hasta el captador, detectars el AP correspondiente a esa WLAN (Red LAN wireless). Pero y si nuetros vecinos an no se han modernizado y no cuentan con la ltima tecnologa, tan presente hoy en todas las compaas telefnicas (nos regalan un router en los donetes, con los tazos de matutano...) El proceso se puede implementar con un porttil para poder salir de casa e ir en busca de redes en un centro comercial, otros edificios... Es aqu donde surge el conocido trmino wardriving: que no es otra cosa que ir en busca de redes con un coche, as tambin est el warcycling (en bici para mantenernos en forma), warwalking (dando un paseito, estilo golf)... Si somos vagos por naturaleza o nos gusta demasiado el silln-ball (deporte de riesgo donde los haya) podemos aumentar nuestra potencia de deteccin. As sin movernos de casa, detectaremos redes a largas distancias. 1.2.- Material necesario para la deteccin a larga distancia: - Una antena: Lo que hace la antena es "apuntar", dirigir la seal aumentando su calidad. Desde la perspectiva de un atacante: > La distancia supone ocultacin fsica y alejamiento. > Es esencial para ataques sobre la capa fsica, de denegacin de servicios (DoS) y ataques man-in-the-middle (de intermediario). Para comprender las antenas son necesarios unos conceptos bsicos de rediofrecuencia, que no trataremos en este texto, debido a la extensin del asunto. Un par de apuntes: > La ganancia de un antena es la amplificacin de potencia. Se expresa en dBi y es pasiva, ya que la antena como hemos dicho no aade en realidad potencia, sino que enfoca las ondas radiadas para conseguir un haz ms estrecho (apunta) > El ancho de haz determina la zona de cobertura de la antena. Conviene no olvidar su tridimensionalidad. > "Regla de los 6 dB": Un aumento de 6dB en la EIRP duplica el alcance de transmisin o recepcin. Tipos de antenas. Se diferencian tres tipos generales: 1. Omnidireccionales (360 grados en un plano horizontal) 2. Parcialmente direccionales (De 60 a 120) > Antena yagi. 3. De alta direccionalidad El precio de una antena oscila segn sus caractersticas y su ganancia: las hay de 25 euros, de 120... Si tu presupuesto es cero, siempre tienes la opcin Mc Gyver. Puedes construirte una antena

casera. La pega es que el rendimiento no es muy fiable. Aqu el precio puede ir de 7 euros (antena pringles jeje) a lo que queramos. Consultar el Recopilatorio de textos y enlaces interesantes para ms informacin sobre su construccin. Aqu os dejo el enlace donde mi compaero lovalost explica un poco el tema (Si estis interesados os recomiendo lo leis detenidamente) http://foro.elhacker.net/index.php/topic,60677.0.html lluis_11 dejo en un post este enlace (Considero interesante) sobre el montaje de muchos tipos de antenas distintos bien organizadas. http://www.antenaswireless.net Es necesario tener conocimientos sobre como instalar la antena, tipos de conectores (SMA, RPSMA, SMC, MMCX...) - Conectando una antena wireless: http://foro.elhacker.net/index.php/topic,65332.0.html Podremos instalar nuestra antena tanto en el AI como en el AP, cada forma tienen sus ventajas e inconvenientes que se deben valorar desde la perspectiva de la situacin en la que nos encontremos. Interesa recordar, que habitualmente las tarjetas PCI traen conectores externos. - Un Amplificador RF: Consiguen ganancia activa inyectando pontencia continua (DC). Tipos: > Unidireccionales: Aumentan la potencia de transmisin. > Bidireccionales: Incremetan tambin la sensibilidad de recepcin. Se suelen instalar para compensar las prdidas debidas a una excesiva longitud del cable coaxial que une la antena y el dispositivo inalmbrico. ------------------------------------------------------------------------------------------------------------------------Aqu podemos hablar tambin del warchalking (Es un lenguaje de smbolos normalmente escritos con tiza en las paredes que informa a los posibles interesados de la existencia de una red inalmbrica en ese punto.) Detectada una red se puede hacer una marca en el suelo, o bien un mapa virtual con su localizacin (para esto conviene tener un GPS) que adems anota las caractersticas de la red: SSID, WEP, direcciones MAC, red abierta o cerrada, DHCP, ancho de banda... De estas caractersticas hablaremos ms tarde, todo a su tiempo. No menciono los smbolos del warchalking pero los podis encontrar en google o el manual de Vicent Alapont (*Bibliografa). ------------------------------------------------------------------------------------------------------------------------1.3.- Tipo de interfaz: Como en ningn manual he visto ninguna explicacin de este tipo, porque seguramente se considera excesivamente bsica, me he decidido a hablar un poco del tema, porque estoy seguro de que no todo el mundo lo tiene claro y llega a confundir modelo con el enganche (tipo de interfaz) Seguro que algunos continan algo perdidos y entonces qu es eso de PCI, PCMCIA, BUS...? Vamos a intentar explicarlo de manera sencilla. El modelo de tarjeta inalmbrica viene definido por COMPAA + MODELO + BUS. Vamos a explicar cada apartado: - Compaa: Algunas de las ms conocidas con: Conceptronic, Linksys, icom, D-Link,

Cisco/Aironet ... y son las empresas encargadas de la manufactura y venta de la tarjeta. Estas empresas se encargan de montar la tarjeta, no de desarrollar el chipset y sus drivers, eso va a parte. De ah que diferentes modelos de una misma compaa puedan tener distintos chipsets (son mundos a parte). De ah que debamos consultar el chipset en el listado que he dado para no llevarnos a engao. - Modelo: Una serie de nmeros y letras que marcan un modelo. No apto para dislxicos, ya que algunos modelos difieren de otros tan solo en una "c" o una "r". - Tipo de interfaz: Llegamos al quid de la cuestin. Esto entra dentro de fundamentos fsicos de los computadores (jejeje que informtico) y viene a ser la ranura de entrada, el puerto de conexin de la tarjeta, el mtodo de enganche (esta ltima es una definicn algo chabacana) pero cundo uso uno y cuando otro? Para responder a esto, vamos a analizar brevemente los mtodos de conexin ms comunes y en qu situaciones se utilizan: > PCI (El acrnimo responde a Peripheral Component Interconnect) Es un bus de interconexin de componente perifricos. Es un bus de computadora estndar para conectar dispositivos perifricos directamente a la tarjeta madre de la computadora (bus local). Comentar que PCI permite configurar el dispositivo de manera dinmica. Se suelen utilizar en ordenadores de SOBREMESA. Es comn que tengan conectores para antenas, esto es una factor a tener en cuenta. >> MINIPCI: Consiste en un tarjeta PCI de pequeo tamao para PORTTILES. > PCMCIA : (Personal Computer Memory Card International Association, asociacin de la industria de fabricantes de hardware para ordenadores porttiles encargada de la elaboracin de estndares). Es un dispostivo normalmente utilizado en computadoras PORTTILES para implementar sus posibilidades. Llegamos a un punto aclaratorio clave: CARD BUS Y PC CARD. Las tarjetas PCMCIA DE 16bits pueden recibir el nombre de PC Card y las de 32 bits CARD BUS (este termino os debera sonar) Ahora lo pongo a parte para tener el esquema claro. >> CARD BUS: PCMCIA de 32 bits. se pueden usar con un adaptador USB. > BUS o USB: (Universal Serial Bus) Provee un estndar de bus serie para conectar dispositivos a un PC. Cuando se dice este sistema se pensaba en mejorar la capacidad plugand-play (permitiendo conectar o desconectar dispositivos sin necesidad de reiniciar. Pero no entra en este texto explicar como funciona plug-and-play, investiguen y aprendan jeje) Hoy en da el USB domina y se ha convertido en el mtodo de conexin ms usado, debido a su dinamismo, desplanzando otros estndares de conexin. Pues estos tipos de conexin, para el que no lo sepa, estn en la parte de atrs de la torre del ordenador o del porttil. Cuando hablamos de un tarjeta wireless BUS, hablamos de una tarjeta con un cable Bus para conectar. Son fciles de instalar, sin embargo, a veces no tan potentes como las anteriores (velocidad, encriptacin...). Funcionan tanto en PORTTILES como en PCs DE MESA. > CENTRINO: (Centrino Mobile Technology o Tecnologa Mvil Centrino en espaol) Es una iniciativa comercial de Intel para promocionar una combinacin determinada de CPU, chipset de la placa base e interface de red inalmbrica en el diseo de un ordenador personal porttil. Actualmente esta combinacin consiste en un procesador Pentium M, un chipset de la familia Intel 855 y una conexin de red del tipo Intel PRO/Wireless 2100 (IEEE 802.11b) o PRO/Wireless 2200 (IEEE 802.11g). Esto va integrado en los porttiles de la marca Intel (no se deben confundir el procesador Pentium M y el Centrino). Por otra parte muchos consumidores han recibido la impresin de que Centrino es la nica forma de obtener conectividad inalmbrica en un porttil. Este tipo de interfaz no puede entrar en modo RF (monitor) usando Windows. Una vez tengamos esto claro, les pongo un ejemplo de cmo se debera decir que tarjeta tenemos: "Tengo una Conceptronic c54c tipo PCI" (Si an con esto, no lo entienden, quizs deberan cambiar de hobby por las tabas o algo as) Ahora dejo algunas fotos (porque una imagen vale ms que mil palabras).

PCI

PCMCIA

2.- Software para detectar APs

Existen varios mtodos para detectar APs. - Monitorizacin activa: (Barrido activo) Consiste en que el AI enva un paquete sonda o baliza (beacon frame) y en caso de existir un AP al que le llegue la seal, contestar con marco de respuesta sonda (request frame) que contiene los datos de la red. - Monitorizacin pasiva: Implica la escucha del AI en busca de marcos baliza que emiten los APs. Teniendo en cuenta que los usuarios de otros sistema operativos (OS) que no sean windows suelen tener unos conocimientos medios de informtica avanzados, me referir tan solo a los programas para windows. El ms conocido es el Net Stumbler de windows, es un programa de cdigo cerrado que monitoriza las redes de forma activa. Utilizado por aficionados espontneos del wardriving. Nota: Wardriving no es lo mismo que netstumbling.

3.- Modo monitor o RFMON:


Consiste en poner nuestra tarjeta wireless en escucha para poder captar los paquetes que transmiten otras redes wireless sin estar asociados a ellas. Esto lo explico de manera ms detallada en siguiente post: - Teora bsica sobre el modo monitor en tarjetas wireless: http://foro.elhacker.net/index.php/topic,64149.0.html Nota: El modo promiscuo de las tarjetas de red Ethernet 802.33 no es lo mismo que el modo monitor en redes 802.11. - Cmo poner la tarjeta en modo monitor con Windows? http://foro.elhacker.net/index.php/topic,64705.0.html No todos las tarjetas de red pueden entrar en modo monitor, esto se debe tener en cuenta a la hora de comprarla. Si tenis un tarjeta centrino, es hora de sacar la cartera. 3.1.- Drivers airopeek segn el chipset: Como son muchos los que preguntan si su tarjeta puede entrar en modo monitor o quizs no sepan encontrar los drivers an conociendo la pgina a la que deben dirigirse, voy a listar los chipsets compatibles con airopeek para Windows de Wildpackets. Lo que deben hacer es buscar su modelo de tarjeta en la lista que les d y enterarse de qu chipset utilizan. Listado: - Atheros - Realtek - Symbol - Agere IMPORTANTE: Cuando ya hayamos crackeado WEP deberemos instalar los antiguos drivers de la tarjeta, porque en modo monitor no es posible conectarse a una red. Esto se explica con ms detalle en: Por qu hay que reinstalar los drivers originales una vez tienes la wep? http://foro.elhacker.net/index.php/topic,65590.0.html

4.- Sniffers o "husmeadores" y WEP crackers:


Los sniffers (tambin denominados analizadores de protocolos o "husmeadores"). El sniffing de paquetes es la prctica de capturar datos de red que no estn destinados a tu

mquina, generalmente con el propsito de ver trfico confidencial (contraseas, datos...) Para snifar ("olfatear") es necesario entender como transmiten los paquetes las mquinas en una red. Una vez configurada la tarjeta en modo monitor, trataremos de capturar los paquetes de otras redes o la propia (auditora de seguridad) con el objetivo de saltarnos sus medidas de seguridad y asociarnos a la red (ancho de banda, datos confidenciales). Entramos en la parte jugosa del manual. Aqu entran en juego factores de lo bien que est configurada la red o no. Trminos previos: SSID (Service Set IDentifier) El SSID es un cdigo de 32 caracteres alfanumricos que llevan los paquetes de una WLAN para indentificarlos como parte de esa red. Por lo tanto todos los dispositivos inalmbricos que intentan comunicarse entre s deben compartir el mismo ESSID. Las redes cuya infraestructura incorpora un punto de acceso, utilizan el ESSID (E de extendido). Sin embargo nos podemos referir a este como SSID en trminos generales. A menudo al ESSID se le conoce como nombre de la red. El ESSID de la red ficticia del vecino est por defecto en emisin pblica, cualquier usuario usando un stumbler podra detectar esta ESSID (nombre de red) y sabiendo que el ESSID acta como la relacin entre la estacin cliente (tu mquina) y el AP, ya tienes el nombre de red, que ser vital para asociarse a la red a la que "atacamos". Es por esto que una medida fundamental de seguridad es desactivar la emisin pblica del ESSID (broadcasting), y sino es posible, al menos ocultarlo para que un atacante inexperto no pueda continuar en su intento. - El ms que famoso WEP: (Wireless Equivalency Privacy) Es el sistema de cifrado incluido en redes estndar 802.11 de los paquetes que se transmiten en una red wireless. El WEP viene inhabilitado por defecto. Un usuario sin conocimientos relativos al tema o un usuario medio no habilitar el WEP al instalar el AP. Esto constituye un gran error de seguridad ya que sino la red queda abierta a todo usuario. WEP cifra y comprime los datos enviados por ondas de radio. Sin embargo, WEP no es precisamente el sistema de encriptacin ms potente del mercado. Incluso aunque est habilitado nuestra red sigue siendo insegura. Es "rompible" con los denominados WEP crackers . De esto hablaremos ms tarde. Para conocer las vulnerabilidades del cifrado WEP: Manual de unravel (Hacking wireless - Chincheta) http://foro.elhacker.net/index.php/topic,54992.0.html Recuperando la intencin de este manual, la compresin sobre todos los apartados en relacin con el hacking wireless, voy a explicas de forma tcnica el cifrado WEP. Es necesario para comprender esto unos conceptos previos de criptografa (Recomiendo el taller que ha comenzado la revista Hack x Crack HXC en el momento de redactar esto) Cdigo: El cifrado WEP no es otro que el algoritmo de encriptacin RC4 (Algoritmo de cifrado de flujo, es decir que funciona expandiendo una clave secreta o "seed" la cual es un generador de nmeros psdeualeatoria) Siguiendo las principales vulnerabilidades que afectan a este algoritmo proporcionado por RSA Security es posible reducir su potencia de 128 bits de cifrado a 24 bits. Lo que conlleva una disminucin importante de la seguridad (de 2^104-1 a 2^24-1) Adems se usa un vector de inicializacin (conocido como IV de 24 bits) la cual se aade a la seed mencionada antes, y cambia para cada trama. El receptor usa el mismo IV para chequear la integridad del mensaje. Los IVS son pblicos (no cifrados, en texto plano, o sea legibles), y aparecen en los paquetes transmitidos por la red. Como ya he dicho varan, el problema es que la mquina suele reutilizar IVS (no entro en detalles del porqu) y un intruso podra hacer con duplicados,

montar una tabla y conocer el texto de un mensaje. Para ello ha de servirse el intruso de un boli, papel y mucha paciencia para interpretar el flujo. Pero esto nos llevara demasiado tiempo, asi que se ha automatizado el proceso. Esto es en esencia lo que hace un WEP cracker. Tras capturar una serie de paquetes, en el orden de 1 milln para romper un cifrado de 128 bits, estos programas rompen la clave WEP de forma pasiva, analizando los IVs dbiles o repetidos. No se crean que WEP es el nico sistema de cifrado que existe, hay muchos ms. Este es el ms famoso y el ms inestable. El WPA es mucho ms seguro, pero este sistema no es funcional en algunos host APs (routers) que funcionan con estndares IEEE 802.11 antiguos.

5.- Qu WEP cracker utilizo en windows?:


Recimiente descubr que la ltima versin del Aircrack la v2.1 tiene en su paquete zip una carpeta para windows 32bits. Las pruebas realizada por lovalost (que colabora conmigo en la realizacin de un taller de wireless, tambin moderador de este apartado) mostraron como resultados que el aircrack funciona ms deprisa que cualquier otro WEP cracker probado en windows, aunque no alcanza la funcionabilidad que tiene en el SO (Sistema Operativo) Linux. - Cmo utilizar el aircrack en windows? by lovalost (Nuestro gran entendido del foro hacking wireless) http://foro.elhacker.net/index.php/topic,64705.0.html

6.- Ataque por fuerza bruta al cifrado WEP:


Otra posibilidad para hacernos con la WEP key o clave WEP es realizar un ataque por fuerza bruta al cifrado WEP de un solo paquete. Tambin se puede desplegar un ataque con diccionario. En este post explico la teora y viabilidad del ataque, adems de las herramientas para llevarlo a cabo. - Ataque por fuerza bruta al cifrado WEP http://foro.elhacker.net/index.php/topic,64471.0.html

7.- Sacar la clave WEP almacenada en una estacin cliente con windows:
Si tenemos acceso fsico a una de las mquinas de la red (con sistema operativo Windows) podremos extraer la clave WEP, ahorrndonos tiempo de trabajo. - Sacando la clave WEP en un Windows XP: http://foro.elhacker.net/index.php/topic,56008.msg281743.html#msg281743 - Haciendo funcional wzcook en un XP con SP2: http://foro.elhacker.net/index.php/topic,61344.0.html

8.- Obstculos en el ataque:


Como ya he dicho se ha desarrollado uno de los ataques ms bsicos a la red en sus diversas tcnicas, sin embargo no por ser bsico dejar de ser esencial. Pero a la hora de hacer este ataque podemos encontrarnos algunas barreras que se despliegan

como mdidas bsicas e insuficientes de seguridad, con la intencin de desanimar a script kiddies. Un atacante avanzado habitualmente no suele ser peligroso (igual que un maestro en kung-fu no va por la calle buscando pelea). Las medidas comentadas ahora son las ms comunes, no por esto las nicas, pero esto no es un manual avanzado (tiempo al tiempo) 1.- BROADCAST DEL ESSID DESACTIVADO (En un manual lo le como ESSID cerrado): Al desactivar el BROADCAST del ESSID el AP deja de emitir marcos baliza (beacon frames) y la red aparece como no en uso. Un programa que haga barrido activo no la detectar y sin embargo si lo conseguiremos mediante un barrido pasivo, ya que los paquetes siguen en el aire. Como ya he dicho el ESSID es el nombre de red y es vital para poder asociarnos a ella, en este caso no podremos visualizarlo y aunque logremos romper el WEP no tendremos nada que hacer. La solucin es la siguiente: Cuando est desactivado (el ESSID se enva en marcos de respuesta -request frames-), el ESSID sigue enviandose en paquetes de peticin de asociacin y reasociacin. Entonces deberemos esperar con un "husmeador" activado a que un usuario se conecte a la red (ese paquete contendr el nombre de la red). Pero y si los usuarios estn constantemente conectados? o y si tenemos prisa? Existen utilidades para realizar DoS (este ataque que yo sepa slo es viable en Linux, nuestra punta de lanza en el hacking wierless) como Air-jack toolkit que, entre otras, lleva una aplicacin llamada essid_jack, cuya funcin concreta es provocar que los clientes se tengan que reasociar al punto de acceso y as capturar el paquete de asociacin que contiene el ESSID. Pero esto ya entra en un nivel alto en el que no entraremos aqu, as que pueden investigar o esperar hasta que publiquemos el manual avanzado. 2.- FILTRADO DE DIRECCIONEs MAC (ACL): (*Consultar MAC en vocabulario) Esta medida consiste en permitir solamente la conexin a cierto equipos atentiendo a su MAC. Sin embargo es posible cambiar la direccin MAC de nuestra tarjeta utlizando software especfico, de este modo suplantaramos la identidad de una de las mquinas de confianza (trusted). Esta tcnica se conoce como MAC spoofing. Para saber que MAC deberemos emular, utilizaremos un husmeador (el ms idneo es Kismet). - Cambio de direccin MAC: http://foro.elhacker.net/index.php/topic,63350.0.html

9.- Medidas de seguridad:


- Fsico: Consiste en utilizar materiales que mitiguen las ondas de radio impidiendo que salgan de los lmites del edificio. -En la capa de enlace (capa 2): > Habilitar WEP con el mayor nmero de bits posible. > Habilitar WPA en vez de WEP si es que nuetros hardware es compatible (Tiene que ser compatibles tanto el AP como los AIs, deben por as decirlo, hablar en el mismo idioma para entenderse) > Deshabilitar el broadcast (emisin pblica) del ESSID (este mtodo es bastante bueno porque la red no aparecer como una red en uso). Pero no es suficiente como hemos visto, un atacante experto podra saltarse esta proteccin. ------------------------------------------------------------------------------------------------------------------------IMPORTANTE: Adems de ocultar el ESSID, hay que cambiarlo para que no est en predeterminado, porque sino sacando la OUI de la MAC nos bastara para conocer el modelo de AP y buscar userID/password por defecto. - Relacin de la OUI con el modelo de AP: http://standards.ieee.org/regauth/oui/oui.txt -------------------------------------------------------------------------------------------------------------------------

> Habilitar el filtrado de direcciones MAC. > Deshabilitar el DHCP. > Cambiar la contrasea por defecto del router. En caso de que un atacante acceda a la red podra cerra puertas a otros usuarios, montar una backdoor (puerta trasera) mapeando los puertos de la NAT para conectarse de forma remota... > Cambio habitual de la clave WEP, que es esttica. De este modo un atacante podra perder el inters en nuestra red, ya que tendra que atacarla cada vez que se quisiese asociar. > Cambiar la IP por defecto del AP. Se han comentado las medidas de proteccin, sin embargo dejo el tema de deteccin de intrusos y utizacin de IDS (En nuestro caso WIDS ) para el manual avanzado. Pues este ya tiene una extensin considerable y sera entrar en demasiada profundidad. En el manual avanzado se incluirn algunas lecciones para una mejor comprensin: - Capas OSI - Criptografa - Muchas ms

10.- Accediendo al router (AP) de nuestra red para configurarlo (User ID/password por defecto):
Todos los APs vienen con nombre de usuario y contrasea por defecto de fbrica. Si ha sido instalado por un usuario que se sirve de una gua rpida o por un tcnico negligente, el AP seguir teniendo el mismo user ID y password que antes de salir de la caja. Os dejo a continuacin una pgina mencionada en este foro que tiene los users ID/passwords por defecto de las grandes compaas que comercializan APs que est adems en constante actualizacin y te ser muy til. http://www.phenoelit.de/dpl/dpl.html Voy a comentar tambin que en los dos routers que he tenido la ocacin de leer sus manuales (siendo de diferente distribuidoras) tenan como user ID por defecto: Admin y como contrasea por defecto: default. As que si no encontris el AP que os interesa en el anterior web probad con lo segundo. En la actualidad se han descrito en algunos topics del foro tcnicas para sacar la contrasea de un router: + Sacando la contrasea de un router: http://foro.elhacker.net/index.php/topic,62224.0.html Por dividir las tcnicas en dos ramas diferentes y que se entienda mejor el anterior post: 1.- Tcnicas para filtrar los paquetes de una red, entre los cuales estn los que van dirigidos al router, cuando el administrador se loguea en l. Estas tcnicas se utilizan cuando nosotros no somos el administrador de la red sino un intruso en ella. La intencin es extraer el user ID (nombre de usuario) y password de acceso al router cuando el administrador se loguee. Para ello nos podemos servir de un sniffer y tcnicas de implementacin del anterior ataque: ARP spoofing, ataques man-in-the-middle... Manual de ARP spoofing by Fakedos: (Muy bueno y fcil de entender. Explica los tipos de redes: de hubs o conmutadas -switches-) http://fakedos.all-inone.net/tecdocexplo/arpspoofing.html Metodologa para hacerse con el nombre de usuario y contrasea del router si hemos realizado una intrusin a la red y no somos los administradores de esta: 1.- Instalar un sniffer y poner la tarjeta de red en modo promiscuo.

2.- Filtrar los protocolos que nos interesan para que no se nos desborde de la cantidad de datos: filtramos telnet y HTTP (que son los caminos de acceso al router) 3.- Se pueden utilizar tcnicas de implementacin del sniffing (Esto est descrito con anterioridad) Tambin podramos instalar un keylogger en la mquina que utiliza el administrador. Hagan volar su imaginacin. 2.- Si nos hemos olvidado de la contrasea de nuestro router, o nunca la supimos porque nos la instal un tcnico y en ese momento no sabamos ni lo que estaba haciendo. Se subdividen bsicamente en (detalladas en el anterior post): - Ataque por fuerza bruta. - Utilizacin de alguna vulnerabilidad (mediante exploit) conociendo el modelo de router (Se busca informacin en google. Esto ser efectivo si el firmware no est actualizado y otros usuarios con conocimientos avanzados en programacin publicaron informacin en torno a posibles fallos para ganar acceso al router) - El log de la cookie. - Llamada al tcnico. - Resetear el router y configurarlo de nuevo con los datos de conexin. Al resetear el router este vuelve a su configuracin por defecto de fbrica, es conveniente buscar informacin de nuestro AP en la pgina oficial de este, donde seguro se explica en las FAQs como resetearlo, configurarlo... Conviene aclarar que la contrasea del router no es la contrasea de red ni mucho menos, se tiende a confudir por usuarios inexpertos. La contrasea de red como ya hemos dicho es la WEP key, de ah la importancia de saber crackearla.

11- Por qu nos centramos tanto en WEP?


El protocolo de cifrado WEP, a pesar de las futuras revisiones, mejoras, alternativas... seguir funcionando durante mucho tiempo, sin importar cmo de buenos y seguros sean sus sustitutos. Los motivos son los siguientes y conviene tenerlos en cuenta: 1- Es fcil configurar WEP y cualquier sistema conforme con el estndar 802.11 lo soporta, no ocurre lo mismo por ejemplo con WPA. 2- El hardware heredado podra no soportar los nuevos protocolos de seguridad y muchos usuarios no se desharn de l a pesar de las recomendaciones, nuevos estndars... ya que han invertido en su equipo un dinero que desean rentabilizar. 3- El hardware ms moderno pasar a utilizar el nivel de seguridad del anterior harware para poder interactuar con l. 4- Muchos administradores de red debido a su ignorancia o pereza no actualizarn el firmware de sus sistemas para soportar sustitutos de WEP ms seguros. 5- Los nuevos sistemas de seguridad conllevarn un esfuerzo en mantenerse actualizado y comprensin. Algunas pymes (pequeas y medianas empresas) que disponen de estos mtodos de intercomunicacin entre mquinas se oponen por motivos econmicos. 6- Algunas implementaciones de las especificacin 802.11i requerir renovar el hardware en su totalidad. 7- Todava se pueden oir comentarios de los autodenominados "expertos" que opinan que WEP es un protocolo lo suficientemente seguro para redes domsticas y pequeas empresas. De este modo los ataques contra WEP estn hoy ms de moda que nunca, a pesar de que WEP hace tiempo que quedo obsoleto. Sin embargo romper el WEP no es el ltimo paso (como muchos atacantes consideran) en el ataque a una red. Por ltimo cabe destacar, que los usuarios que llevan a cabo estos ataques sirvindose de una gua paso a paso, no merecen otra categora dentro de las comunidades de seguridad informtica y hacking, que la de script kiddies o lammers. Vamos a dar las caractersticas que debe reunir un usuario avanzado o entendido:

> Conocimiento de diversas tcnicas de ataque: - DoS (Ataques de Denegacin de Servicio) - Ataques de intermediario sobre la capa fsica. - Inyectar trfico para acelerar la ruptura de WEP. - Conocer la estructura de los paquetes de las redes 802.11 y sus correspondientes marcos. - Saber llevar el ataque a la zona cableada de la red. - Saltar pequeas barreras como el filtrado de direcciones MAC y ESSID cerrados, que hoy en da a pesar de su debilidad como medidas de seguridad siguien desanimando a muchos atacantes. - Ruptura de 802.1x - Inyectar trfico inalmbrico cifrado. - Creacin de una puerta trasera (backchannel) - Montaje de una red segura, desplegar VPNs As el prfil de usuario aficionado e interesado momentneamente en el tema es: - Ruptura del cifrado WEP con sistema operativo Windows. - Realizar barridos activos con una copia de Netstumbler. quizs debera preguntarse en que grupo se enmarca y qu medidas podra tomar para avanzar y aumentar sus conocimientos? No olvide que este texto es una simple introduccin al tema de la seguridad wireless, que puede resultar en algunos niveles realmente complicado y requiere conocimientos sobre: Diferentes protocolos Criptografa Topologa de redes Capas OSI Protocolo TCP a fondo

Pero antes debemos conocer unos conceptos bsicos que sern nuestra base de apoyo en el avance. En estos momentos se est trabajando en el desarrollo de un taller o proyecto que comprenda algunos de estos puntos ms avanzados explicados de la forma ms sencilla posible. Por el momento se est trabajado en solucionar las dudas ms habituales al iniciarse en el tema: - Qu tarjeta me recomiendan? Cmo ponerla en modo monitor? Qu es un chipset y para qu sirve? - Puede mi tarjeta entrar en modo monitor? - Qu programa uso para romper WEP en windows? - WEP o WPA? De todas formas recomiendo encarecidamente que visiten el Recopilatorio de textos y enlaces de inters (en constante actualizacin) donde podrn encontrar respuestas a ms preguntas como estas y a otras ms avanzadas. No olviden la lectura de todas las chinchetas. - Recopilacin de textos y enlaces de inters: http://foro.elhacker.net/index.php/topic,64843.0.html - F.A.Q (Frequency Asked Questions): http://foro.elhacker.net/index.php/topic,65591.0.html

12.- Conclusiones:
Las redes Wireless son todava muy inseguras y es por esto que la poltica de seguridad de algunas empresas las prohbe tajantemente. Debido a la dificultad de controlar la expansin de las ondas de radio, estas traspasan los lmites del edificio, "tendiendo una mano" al intruso.

Cuando instalas un AP en tu domicilio, se dan varios casos que van a repercutir en la posterior seguridad de este AP. - Lo instalas t con un manual rpido sin habilitar WEP, ni cambiar la SSID por defecto, ni la IP por defecto del router... - Lo instala un tcnico incompetente con conocimientos mnimos que le bastan solamente para que funcione. - Lo instala una empresa despreocupada por sus usuarios (O decir que telefnica no configuraba el router) - Te lo instala un tcnico competente o t mismo habiendote ledo esto. ---> Tendrs el culo bastante a salvo. (Recuerden que nada es seguro al 100%)

13.- BIBLIOGRAFA:
El taller de redes WIFI de Vic_THOR: http://www.hackxcrack.com/phpBB2/viewtopic.php?t=21310 Manual de sniffers de LorD_Darkness: http://ccia.ei.uvigo.es/docencia/SSI/SniffersPDF.pdf Manual de redes wireless de Vicent Alapont:http://www.telefonica.net/web2/telamarinera/facu/seguridad_en_redes_inalambricas _by_vicent_alapont.zip Diccionario enciclopdico Wikipedia: http://es.wikipedia.org/wiki/Portada --> Una maravilla para entender temas profundos que nos superan, buscar definiciones. Un consejo, tenedlo siempre a mano. Taller prctico de intrusin en redes locales de Gospel (realmente bueno) http://foro.elhacker.net/index.php/topic,45618.0.html ESTE FORO que tanto me est enseando sobre el tema. Espero no dejarme ninguno. Ms mis conocimientos escasos sobre la seguridad informtica.

14.- Expansin del manual:


Mi compaero moderador lovalost y yo estamos trabajando, de forma conjunta con el staff de elhacker en un taller avanzado sobre hacking wireless. Pueden leer ms sobre el proyecto manual de hacking wireless aqu: http://foro.elhacker.net/index.php/topic,62868.0.html

15.- Metodologa para hackear una red wireless:


1.- Comprar una tarjeta WNIC (AI) 2.- Hacer un barrido activo o pasivo para detectar las redes de los alrededores. 3.- Poner la tarjeta en modo monitor o RFMON. 4.- Utilizar un WEP cracker (Aircrack) para obtener el WEP key (contrasea de red) Con el nombre de red ESSID y el WEP key ya podemos asociarnos y autentificarnos en la red. 5.- En nuestro camino quizs necesitemos sortear una serie de barreras como el filtrado de direcciones MAC, ESSID cerrados... 6.- En caso de acceso fsico a una estacin cliente de la red con Windows XP, utilizar un programa de recuperacin de la WEP key. 7.- Proximamente se desarrollarn ataques ms avanzados como inyeccin de trfico para acelerar el proceso de ruptura de WEP, ataques hombre en medio (man-in-the-middle)...

DEFINICIONES:
Algunas de estas definiciones estn extradas del taller de Vic_THOR, que realizo un buen glosario de consulta. Autenticado y asociado: Estado en el que un dispositivo wireless se une a la red de forma correcta y puede participar de los servicios que se ofrecen Autenticado y disociado: Estado en el que un cliente ha sido reconocido por los dispositivos de la red wireless pero que todava no puede emitir datos ni participar de los recursos. Balizas/Beacons: Tramas de administracin o sondas que emiten los puntos de acceso para informar a sus clientes o a otros puntos de acceso de su presencia y de otros datos. BSSID: La MAC del punto de acceso Desautenticado y disociado: Estado en el que un cliente est desconectado de la red y no se asoci con el Punto de Acceso Filtrado de MAC: Mtodo de configuracin de seguridad en puntos de acceso que restringe a determinadas direcciones MAC la posibilidad de unirse a la red y autenticarse. IEEE: Instituto de Ingenieros Elctricos y Electrnicos, una asociacin estadounidense dedicada a la estandarizacin. Punto de acceso: (AP) Dispositivo que comunica redes de cable e inalmbricas. Red inalmbrica (de rea local) o WLAN o WIFI: El nombre tcnico para denominarlas es redes 802.11. El protocolo IEEE 802.11 es un estndar de protocolo de comunicaciones de la IEEE que define el uso de los dos niveles ms bajos de la arquitectura OSI (capas fsica y de enlace de datos), especificando sus normas de funcionamiento en una WLAN (Wireles LAN - red de rea local) SSID de difusin: Identificador de servicio vaco, es el equivalente a un ESSID con el valor Any, en el cual cualquier cliente puede conectarse a la WLAN. WEP: Protocolo de seguridad para el cifrado del trfico WLAN Wi-Fi: Organizacin que certifica la interoperabilidad de dispositivos 802.11 como un estndar compatible y global de redes WLAN WLAN: LAN inalmbrica WPA: Acceso protegido Wi-FI que utiliza las caractersticas de 802.11i 802.11i: Estndar de seguridad para WLAN, combina el uso de 802.1x y protocolos de cifrado TKIP/CCMP que ofrece autenticacin de usuario (no de dispositivo), confiabilidad e integridad de los datos.

16.- ENLACES DE INTERS:

17.- Anotaciones extras sobre la seguridad de redes wireless: http://foro.elhacker.net/index.php/topic,56008.msg279739.html#msg279739 18.- Movernos en la red wireless: http://foro.elhacker.net/index.php/topic,56008.msg279733.html#msg27973

19.- Utilizando un live CD de linux (Live CD especfico para la auditora inalmbrica, por si no queremos desinstalar nuestro windows, o instalar dos sistemas operativos) http://foro.elhacker.net/index.php/topic,56008.msg279383.html#msg279383 20.- Manual de cmo hace un live-CD por BADBYTE-K (Aqu se puede enterar de lo que es un live-CD entre otras cosas) http://foro.elhacker.net/index.php/topic,20178.0.html 21.- URL posteada por Fandango sobre wireless, Linux y wardriving en pdf: -Herramientas de configuracin de redes wireless en linux (iwconfig, iwpriv) http://jornadespl.upc.es/vell-02/jplupc2003/Mataro/wireless.pdf

Vous aimerez peut-être aussi