Cap´ ıtulo 3 Mejoras implementadas en el sistema En este cap´ ıtulo se trata de explicar las distintas funcionalidades a˜ nadi- das al proyecto inicial, para as´ ı resolver los problemas encontrados, superar las limitaciones y poder poner en funcionamiento el sistema de pr´ acticas. Se explicar´ an las mejoras introducidas, se mostrar´ an las modificaciones de los archivos para incluir las mejoras en el c´ odigo y se describir´ a c´ omo poner ´ estas en funcionamiento. Para introducir estas mejoras, se ha cambiado el aspecto de la aplicaci´ on web, se ha modificado el men´ u de navegaci´ on de la aplicaci´ on original para a˜ nadir las nuevas funcionalidades del sistema. Tendr´ a el siguiente men´ u de navegaci´ on: Figura 3.1: Men´ u de navegaci´ on Reinicio: Con esta opci´ on se devuelve el sistema de pr´ acticas a su estado inicial, se aplican las configuraciones por defecto de los elemen- 17
34
Embed
Mejoras implementadas en el sistemabibing.us.es/proyectos/abreproy/12106/descargar... · tos de la red y se borran todos los archivos que se hayan subidos a los PCs. Con guraci on:
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Capıtulo 3
Mejoras implementadas en el
sistema
En este capıtulo se trata de explicar las distintas funcionalidades anadi-
das al proyecto inicial, para ası resolver los problemas encontrados, superar
las limitaciones y poder poner en funcionamiento el sistema de practicas.
Se explicaran las mejoras introducidas, se mostraran las modificaciones
de los archivos para incluir las mejoras en el codigo y se describira como
poner estas en funcionamiento.
Para introducir estas mejoras, se ha cambiado el aspecto de la aplicacion
web, se ha modificado el menu de navegacion de la aplicacion original para
anadir las nuevas funcionalidades del sistema. Tendra el siguiente menu de
navegacion:
Figura 3.1: Menu de navegacion
Reinicio: Con esta opcion se devuelve el sistema de practicas a su
estado inicial, se aplican las configuraciones por defecto de los elemen-
17
18 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
tos de la red y se borran todos los archivos que se hayan subidos a los
PCs.
Configuracion: En este menu desplegable se encuentran los distintos
formularios para “Administrar” las configuraciones, se podra renom-
brar o borrar una configuracion guardada. En este apartado tambien
se puede “Cargar” una configuracion que un usuario tenga almacenada
y “Guardar” una nueva configuracion.
Ademas se han anadido las opciones para interactuar con los conmu-
tadores.
A traves del formulario “Show” se puede mostrar la configuracion del
conmutador que se desee, con la opcion “Configure” se configura el
conmutador lınea a lınea y con “Descargar archivo” se descargara el
ultimo archivo de configuracion del conmutador que haya sido guar-
dado.
Red: Este apartado permite al usuario interactuar con la red de PCs,
obtener las configuraciones de las interfaces de red, las tablas de rutas
y comprobar conectividad entre dos PCs mediante el comando “Ping”.
Ademas este menu incluye el formulario para la captura de trafico en
la red. Podemos iniciar, detener y obtener la captura de la red, para
posteriormente descargarla en el PC del usuario.
Archivos: En este menu se encuentran todas las tareas necesarias para
el intercambio de archivos entre los PCs de la red, esto esta pensado
para el intercambio de trafico. Se pueden ver los archivos contenidos
en los PCs, subir o borrar archivos y transferir los archivos entre los
PCs mediante el protocolo TFTP y el comando WGET del protocolo
HTTP.
Para esto cada PC de la subred puede actuar como servidor o como
cliente, dependiendo de si es el emisor o el receptor del archivo.
3.1. AMPLIACION DE LOS TURNOS 19
Cerrar: Haciendo clic en este campo se cierra la aplicacion web, de-
volviendo el sistema a su estado por defecto y borrando los archivos
almacenados en los distintos PCs de las subredes.
Para introducir este nuevo menu y estos formularios se han modificado
el archivo aplicacion.php del directorio raız y el script interfaz.js, incluido
en la carpeta /js/ anadiendoles las funciones necesarias para las tareas.
Las modificaciones de estos archivos seran incluidas en el apendice.
3.1. Ampliacion de los turnos
El sistema anterior solo permitıa al administrador habilitar turnos de
practicas de Lunes a Viernes. Si bien esto no era un problema, sı que se ha
modificado, ya que uno de los motivos de idear este sistema de practicas
era que los alumnos tuvieran la libertad de hacer las mismas los dıas que
quisieran. Se ha anadido el Sabado y el Domingo a los dıas accesibles, para
que el administrador decida si quiere dar acceso a los alumnos a la aplicacion
dichos dıas.
Para realizar este cambio se han tenido que editar varios archivos del
proyecto anterior, en concreto algunos archivos de la carpeta /include/ y
que eran exclusivos de la parte de administracion del sistema.
En los archivos /include/admin reservas.php, /include/admin turnos.php,
/include/admin usuarios.php y / include/turnos.php se han anadido los dıas
Tambien habrıa que hacer la validacion de los dıas anadidos, en el archivo
/admin/administar.php en lugar de validar entre 1 y 5, habrıa que validar
entre 1 y 7.
20 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
3.2. Interaccion con los conmutadores
Con esta modificacion se pretende tener mas control sobre los conmuta-
dores, permitir al usuario ver “lo que esta pasando” al momento, no sera ne-
cesario tener que descargar el fichero de configuracion para conocer el estado
del conmutador. Ademas se permite configurar los conmutadores de una ma-
nera mas intuitiva.
3.2.1. Comando de informacion: SHOW
Saber utilizar e interpretar los comandos show permite el rapido diagnosti-
co de fallos, el alumno debe entender y asimilar las salidas de cada uno de
los comandos shows mas importantes, estos le daran la respuesta a mas de
un problema.
Los comandos show permitidos estan limitados por el propio formulario
de la aplicacion web, para evitar que los alumnos puedan ver la informacion
que el administrador del sistema considere privada. Esto es realizado con el
campo option de PHP.
El administrador siempre podra anadir o eliminar los comandos que
desee. Solo tiene que modificar estas opciones en el archivo de la pagina
web de la aplicacion de practicas en el directorio raız, /aplicacion.php.
Las opciones disponibles son:
show arp: Muestra la tabla ARP del conmutador.
show config: Muestra la configuracion de inicio del conmutador.
show gvrp: Muestra la configuracion de GVRP.
show history: Muestra los comandos introducidos anteriormente.
show interfaces: Muestra la configuracion de los puertos y la infor-
macion del estado de las interfaces.
3.2. INTERACCION CON LOS CONMUTADORES 21
show ip: Muestra la configuracion IP del dispositivo.
show logging: Muestra el registro de eventos.
show mac-address: Muestra las direcciones MAC que el conmutador
ha aprendido.
show management: Muestra las direcciones disponibles para la ges-
tion del conmutador y el tiempo que se usa el dispositivo como servidor.
show monitor: Muestra la monitorizacion del estado de la red del
conmutador y la configuracion, si el monitoreo de la red esta habilitado.
show name: Muestra los nombres asignados a los puertos.
show qos: Muestra diversas configuraciones de QoS (Quality of Ser-
vice) (Calidad de Servicio)
show running-config: Muestra el contenido del archivo de configu-
racion activo.
show spanning-tree: Muestra la informacion del spanning-tree 1
show static-mac: Muestra las direcciones MAC estaticas de todas
las VLANS.
show system-information: Muestra la informacion de la configura-
cion global y los parametros de operacion del sistema.
show time: Muestra la fecha y la hora actual.
1Spanning Tree Protocol (SmmTPr o STP) es un protocolo de red de nivel 2 dela capa OSI (nivel de enlace de datos). Esta basado en un algoritmo disenado por RadiaPerlman mientras trabajaba para DEC. Su funcion es la de gestionar la presencia debucles en topologıas de red debido a la existencia de enlaces redundantes (necesarios enmuchos casos para garantizar la disponibilidad de las conexiones). El protocolo permitea los dispositivos de interconexion activar o desactivar automaticamente los enlaces deconexion, de forma que se garantice la eliminacion de bucles. STP es transparente a lasestaciones de usuario.
22 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
show trunks: Muestra los canales y los puertos que le pertenecen.
show vlans: Muestra informacion del estado de todas las VLANS2.
Despues de estas opciones se debe introducir un campo de texto en el
que se anaden los siguientes parametros de la orden, si se deja el campo en
blanco muestra una vision general del comando seleccionado, a medida que
se introducen parametros se tiene una vision mas especıfica.
Una de las grandes mejoras es la posibilidad de introducir el caracter ‘?’
en los argumentos, esto es equivalente a pulsar el tabulador en el conmuta-
dor, lo que hace que se muestren las distintas opciones que se pueden poner
como parametros del comando elegido. Con esto se puede buscar lo que se
quiera mostrar sin necesidad de conocer todos los comandos y parametros.
Para implementar esta opcion, se han introducido varios cambios en
los archivos del nucleo de la aplicacion (archivos incluidos en la carpeta
/admin/). En el fichero aplicacion.php, en el que se encuentran las acciones
que se realizan al usar un campo del formulario, se ha anadido en el switch
principal la opcion “show”, aquı se comprueba si el conmutador, la accion a
realizar y sus parametros son correctos. Tambien se ha anadido la funcion
show($accion) en la clase conmutador del archivo red.php, para procesar la
orden a realizar, mandarla al conmutador mediante la clase PHPTelnet y
posteriormente procesar la respuesta para devolverla a la aplicacion y se
muestre el resultado por pantalla.
Para esto se ha tenido que modificar la clase PHPTelnet escrita por An-
tone Roundy, para permitir mandar el caracter tabulador cuando el usuario
introduce la ‘?’ como argumento. Posteriormente, se envıan varios backspa-
ces para que se puedan seguir enviando ordenes sin tener que reiniciar la
aplicacion. Ası pues, se han anadido las funciones DoCommand2() y Do-
Command3(), para enviar el tabulador y los backspaces.
2VLAN (acronimo de virtual LAN, red de area local virtual) es un metodo de crearredes logicamente independientes dentro de una misma red fısica.
3.2. INTERACCION CON LOS CONMUTADORES 23
3.2.2. Comando de configuracion: CONFIGURE
Como se ha comentado, con esta mejora se pretende poder configurar
los conmutadores de una manera mas intuitiva, los conmutadores podran
ser configurados lınea a lınea y el sistema ira dando la respuesta a cada
orden introducida, corrigiendo posibles fallos de una manera mas comoda.
Con el comando configure se puede realizar esta tarea de forma sencilla.
Saber utilizar este comando con las ordenes adecuadas hace posible que se
puedan configurar los conmutadores rapidamente.
Al igual que en el caso del show, los comandos configure permitidos
estan limitados por la propia aplicacion web, para evitar que los alumnos
configuren parametros de los conmutadores que el administrador no desee.
Estos comandos de configuracion permitidos, tambien podran ser modifica-
dos, habrıa que anadir o eliminar las opciones en el formulario correspon-
diente a la configuracion de los conmutadores.
Los comandos disponibles para el configure son:
hostame: Especifica el nombre del conmutador para fines administra-
tivos.
interface: Introduce el nivel de configuracion de la interfaz o ejecuta
un comando para ese nivel.
ip: Configura varios parametros IP del conmutador.
mac-age-time: Configura el tiempo de duracion de la tabla de direc-
ciones MAC.
mirror-port: Define el puerto espejo para fines de diagnostico.
qos: Configura la calidad del servicio (QoS) del dispositivo.
primary-vlan: Establece la VLAN que va a ser utilizada como pri-
maria.
24 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
ping: Envıa solicitudes ping a un dispositivo de la red.
spanning-tree: Establece los parametros de operacion del conmuta-
dor en una topologıa spanning-tree.
trunks: Anade o elimina un puerto del conmutador del tunel.
vlan: Anade, elimina o edita una VLAN, o introduce una VLAN en
el contexto.
Despues de elegir el comando de configuracion, se introducen los valo-
res de estos comandos. Los valores de algunas opciones son comprobados
mediante la funcion de validacion utilizada en el proyecto anterior, para no
permitir el uso de valores correspondientes a la red de administracion. Es-
ta funcion de validacion ha tenido que ser modificada para que, ademas de
permitir validar la configuracion introducida con un fichero de texto, verifi-
que la lınea de configuracion introducida en el formulario. Se ha anadido en
el codigo de la funcion esConmutador($input, $idred, $idconmutador, $con-
fig), usada para esta validacion, del archivo func comunes.php, la siguiente
estructura:
1 i f ( $ input == ‘ archivo ’ ) {
2 // Conf igurac ion completa en un arch ivo de con f i gu ra c i on
3 $texto = Archivo : : l e e r ( $ con f i g ) ;
4 } e l s e {
5 // Conf igurac ion in t roduc ida l i n e a a l i n e a en e l f o rmu la r i o
6 $texto = $con f i g ;
7 }
Como con la orden show, con estos comandos tambien se puede intro-
ducir el caracter ‘?’ como argumento, para poder ver las diversas opciones
de configuracion del comando seleccionado. El caracter puede ser introduci-
do en la profundidad del argumento de configuracion que se desee, ya que
algunas ordenes de configuracion pueden llegar a ser muy largas.
Para llevar a cabo esta tarea se han realizado los mismos cambios que
para el comando show. Se ha modificado el fichero del nucleo de la aplica-
3.2. INTERACCION CON LOS CONMUTADORES 25
cion, aplicacion.php, para anadir la opcion “configure” en el switch, aquı se
comprueba si el conmutador y la accion a realizar son correctas. Tambien se
ha anadido la funcion configure($accion) en la clase conmutador del archivo
red.php, para procesar la orden a realizar, mandarla al conmutador mediante
la clase PHPTelnet y posteriormente procesar la respuesta para devolverla
a la aplicacion y mostrar el resultado por pantalla. En PHPTelnet se usan
las mismas clases que se han comentado con anterioridad.
Ademas de estos cambios, se ha tenido que cambiar la forma en la que se
guardaban las configuraciones de los conmutadores. Antes cuando se querıa
obtener el archivo de configuracion de un conmutador, la aplicacion no se
conectaba al propio conmutador, sino que obtenıa el fichero de configuracion
que el usuario habıa subido, o el archivo de configuracion por defecto, ya
que era la unica forma de poder configurarlo. Como ahora sı que se puede
configurar el conmutador sin la necesidad de subir un archivo de configura-
cion, aunque esta opcion sigue siendo valida, surge la necesidad de obtener
la configuracion actual de cada conmutador cada vez que se quiera guardar
una configuracion.
Para esta tarea se crea la funcion ObtConfig() en la clase conmutador
del archivo red.php, esta funcion obtendra la configuracion del conmuta-
dor que se desee mediante la orden copy running-config tftp, aplicara el
filtrado de la parte de la red de administracion con la funcion filtrarArchi-
vo($completo, $admin) y guardara la configuracion en el servidor web. Una
vez guardada la configuracion puede ser descargada con la opcion “Descar-
gar Archivo”, incluida en el menu “Configuracion” del menu de navegacion
de la aplicacion web. Para la descarga del archivo se hace uso del codigo
conm config.php del proyecto anterior, el cual no ha sido modificado.
En la funcion filtrarArchivo($completo, $admin) se compara el archivo
de la configuracion completa de un conmutador, obtenida con ObtConfig(),
con un archivo de filtrado creado para esta tarea, en el que se encuentran
26 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
las lıneas de configuracion especıficas de la red de administracion de ese
conmutador, ambos almacenados en arrays. Las diferencias entre los dos
archivos son almacenadas en otro array que posteriormente se escribe en un
archivo para ser almacenado en el servidor web.
El archivo de filtrado de un conmutador esta almacenado en la carpe-
ta /home/labredes/configuraciones/administracion/, con el nombre
conmxyfiltro.txt (conmutador y de la subred x ) y tiene el siguiente aspecto
1 ; J9085A Conf igurat ion Editor ; Created on r e l e a s e #R. 1 1 . 2 5
2
3 max−vlans 64
4 snmp−s e r v e r community ” pub l i c ” Unre s t r i c t ed
Los codigos de las funciones anteriormente mencionadas podran consul-
tarse en el apendice.
3.3. Informacion de los PCs de las subredes
Aunque se pueda obtener la configuracion principal de los PCs de las
subredes seleccionandolos en el esquema, se ha introducido un simple formu-
lario, tanto para obtener toda la configuracion de la interfaz de red utilizada
para la red de usuario, como para mostrar la tabla de rutas de cada uno
de los PCs. Accediendo a “Muestra Configuracion” o a “Muestra Tabla de
Rutas”, en el menu “Red” del menu de navegacion, y seleccionando el PC
que se desee, se obtiene la informacion pedida.
Para hacer estas tareas, en el lado del servidor web se han llevado a cabo
3.3. INFORMACION DE LOS PCS DE LAS SUBREDES 27
las siguientes modificaciones:
Se han anadido los formularios correspondientes a la pagina web. Mo-
dificando los archivos aplicacion.php, del directorio raız, e interfaz.js,
del directorio /js/
Se han anadido dos nuevas opciones al switch del nucleo de la apli-
cacion web. Estas son “ifconfig” y “route”. Aquı se verifica el PC de
destino y se manda la orden a la clase PC del archivo red.php, y una
vez que se obtiene la respuesta, esta es enviada a la aplicacion para
mostrar el resultado.
En la clase PC del archivo red.php se anaden dos funciones practica-
mente identicas, “ifconfig” y “route”, estas se encargaran de crear y
de enviar el mensaje XML-RPC correspondiente. Una vez mandado el
mensaje al PC de la subred de practicas, se espera la respuesta de este
para procesarla segun corresponda.
En el lado del PC de la subred, que sera el servidor XML-RPC que recibe
las ordenes, se han tenido que definir dos nuevas funciones, en el modulo de
acciones, para procesar los mensajes.
Para mostrar la configuracion, de la interfaz de la red de usuario, de los
PCs se anade:
1 de f i f c o n f i g ( s e l f ) :
2 ”””
3 Rea l i za una consu l ta de in formac ion
4 ”””
5 comando = ’ i f c o n f i g eth0 ’
6 sa l i da , s a l i d a e r r = commonfunc . invoca ( comando )
7
8 return sa l i da , s a l i d a e r r
Para mostrar la tabla de rutas se anade:
1 de f route ( s e l f ) :
2 ”””
28 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
3 Rea l i za una consu l ta de l a tab la de rutas
4 ”””
5 comando = ’ route ’
6 sa l i da , s a l i d a e r r = commonfunc . invoca ( comando )
7
8 return sa l i da , s a l i d a e r r
3.4. Operaciones con archivos
Con esta mejora se pretende poder realizar algunas tareas para compro-
bar el funcionamiento de las subredes, ademas de estudiar distintos proto-
colos de transferencia de ficheros entre PCs, como son TFTP y HTTP,
usando, para este ultimo, la orden WGET.
Se podran subir ficheros a cada uno de los ordenadores de la subred y se
podran comprobar esos ficheros, borrarlos y transferirlos a los demas orde-
nadores. Todas estas opciones las podemos encontrar en el menu “Archivos”
del menu de navegacion de la aplicacion web.
Para el manejo de los archivos en los PCs de las subredes se han crea-
do varias carpetas en dichos PCs. En la carpeta /var/www/uploads/
se almacenaran los ficheros que se suban al ordenador, los archivos de es-
ta carpeta seran los archivos de origen para la transferencia de ficheros y
seran transferidos a las carpetas /home/labredes/downloads/wget/ y
/home/labredes/downloads/tftp/ de los PCs destino segun sean trans-
ferencias con WGET o TFTP, respectivamente.
3.4.1. Listado de archivos
Con esta opcion se pueden listar los archivos, con sus respectivos ta-
manos, que se encuentran en los ordenadores de las subredes, inicialmente
estos estan vacıos ya que la aplicacion borra automaticamente los archivos
cada vez que se inicia o finaliza la sesion, ademas estos archivos tambien
pueden ser borrados gracias a otra funcion de la aplicacion.
3.4. OPERACIONES CON ARCHIVOS 29
Para poder ver el listado de los archivos se debe seleccionar en el for-
mulario el PC que deseemos y elegir el rol para el cual queremos ver los
archivos. Los distintos roles que existen son:
Servidor: Eligiendo este rol se accederıa a la carpeta /var/www/u-
ploads/, donde se encuentran almacenados los ficheros subidos al PC
desde la aplicacion web.
Cliente TFTP: Con este rol se tendrıa acceso a los archivos de la car-
peta /home/labredes/downloads/tftp/, donde son enviados los
ficheros que se transfieren por TFTP desde el ordenador origen.
Cliente WGET: Con esta opcion se listarıan los archivos de la car-
peta /home/labredes/downloads/wget/, donde se encuentran los
archivos transferidos mediante el comando WGET.
Para anadir esta funcion se han llevado a cabo cambios tanto en el ser-
vidor web, como en las funciones de cada servidor XML-RPC de los PCs de
las subredes.
En el codigo de la aplicacion web, archivos incluidos en la carpeta /ad-
min/, ademas de anadir el formulario correspondiente, se ha creado un
nuevo caso en el bucle switch del archivo aplicacion.php, llamado “ls”, que
se encarga de procesar la informacion del formulario, y, en el archivo red.php,
se ha definido la funcion ls($rol) para crear y enviar el mensaje XML-RPC,
posteriormente se recibe la respuesta del servidor XML-RPC y se procesa
de forma adecuada con estas mismas funciones.
En el lado de los PCs de las subredes se ha anadido la funcion para pro-
cesar el mensaje XML-RPC procedente del PC de administracion y generar
la respuesta adecuada.
1 de f l s ( s e l f , r o l ) :
2 ”””
3 Rea l i za una v i s u a l i z a c i o n de arch ivo s
30 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
4 ”””
5 i f r o l == ’ Servidor ’ :
6 comando = ’ l s −s −h / var /www/ uploads ’
7 e l i f r o l == ’ C l i en t e WGET’ :
8 comando = ’ l s −s −h /home/ lab r ede s /downloads/wget ’
9 e l s e :
10 comando = ’ l s −s −h /home/ lab r ede s /downloads/ t f tp ’
11
12 sa l i da , s a l i d a e r r = commonfunc . invoca ( comando )
13 return sa l i da , s a l i d a e r r
La funcion invoca(comando), del archivo commonfunc, es la que se usa
normalmente para las operaciones en el servidor XML-RPC, esta funcion
ejecuta los comandos en el shell del sistema y devuelve los resultados, fue
creada por Silvio Fernandez para el manejo de PCs en el CDC y es usada
tambien en el proyecto anterior.
3.4.2. Borrado de archivos
El formulario creado para el borrado de archivos es identico al del listado
de archivos, se debe seleccionar el PC del que se quierenn borrar los archivos
y el rol que se quiere utilizar, al dar la orden se borran todos los archivos
contenidos en la carpeta del rol especificado en el PC seleccionado. Se han
tenido que modificar, como se hace cada vez que se crea un nuevo formula-
rio, los archivos de codigos aplicacion.php, del directorio raız, e interfaz.js,
incluido en la carpeta /js/.
Los cambios realizados en los archivos de codigo son los mismos que
para el caso anterior, lo unico que se modifica es el nombre de la funcion, la
opcion del switch se llama “borrar” y la nueva funcion en el archivo red.php
se denomina borrar($rol).
En el lado del PC de la subred, el servidor XML-RPC, se crea una funcion
para procesar el mensaje y realizar la tarea de borrado, posteriormente se
hace un listado de archivos para comprobar que la accion se ha realizado
correctamente.
1 de f borrar ( s e l f , r o l ) :
3.4. OPERACIONES CON ARCHIVOS 31
2 ”””
3 Rea l i za una v i s u a l i z a c i o n de arch ivo s
4 ”””
5 i f r o l == ’ Servidor ’ :
6 comando = ’rm −r / var /www/ uploads /∗ ’
7 comando2 = ’ l s −s −h / var /www/ uploads ’
8 e l i f r o l == ’ C l i en t e WGET’ :
9 comando = ’rm −r /home/ lab r ede s /downloads/wget /∗ ’
10 comando2 = ’ l s −s −h /home/ lab r ede s /downloads/wget ’
11 e l s e :
12 comando = ’rm −r /home/ lab r ede s /downloads/ t f t p /∗ ’
13 comando2 = ’ l s −s −h /home/ lab r ede s /downloads/ t f tp ’
14
15 sa l i da , s a l i d a e r r = commonfunc . invoca ( comando )
16 sa l i da , s a l i d a e r r = commonfunc . invoca ( comando2 )
17
18 return sa l i da , s a l i d a e r r
3.4.3. Subida de archivos
La subida de archivos a los PCs se realiza en dos pasos, primero se sube
el archivo al servidor web y posteriormente, se codifica para ser enviado y
almacenado en el PC destino.
3.4.3.1. Subida al servidor web
Como en las modificaciones anteriores, se ha tenido que crear el formula-
rio correspondiente para realizar esta tarea, anadiendo y modificando codigo
en los archivos aplicacion.php e interfaz.js para que sean mostrados en la
pagina web.
En el archivo del nucleo de la aplicacion aplicacion.php, en la carpeta
/admin/, se anade un nuevo caso al bucle switch, llamado “subir” en el
cual se hace una validacion del formulario, para comprobar si el PC que
recibira el archivo es correcto. Aunque, en un principio, la aplicacion no es-
tablece lımites en los ficheros que se suben, se podrıa modificar facilmente
el codigo para comprobar si el fichero sobrepasa un tamano especificado o
si tiene una extension adecuada. De todas maneras, en la propia configu-
racion del servidor web, se ha limitado la subida de archivos a un tamano
32 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
no mayor de 50M. Para modificar esta limitacion hay que editar los fiche-
ros /etc/php5/apache2/php.ini y /etc/php5/cli/php.ini y cambiar
los tamanos en las lıneas
1 pos t max s i z e=50M
1 upload max s ize=50M
Para que el cambio surta efecto, hay que reiniciar el servidor web
sudo service apache2 restart
Una vez realizada la validacion, se procede a guardar el archivo en el
servidor web, para ello se ha creado la carpeta /home/labredes/upload-
s/, aquı se almacenan los archivos antes de ser enviados al PC de la subred,
estos archivos se quedaran almacenados en el servidor para que el adminis-
trador pueda comprobar los archivos que se han subido, para que no haya
problemas de almacenamiento, se aconseja que sean revisados y eliminados
cada cierto tiempo. Para almacenar estos archivos se usa la funcion alma-
cenar($archivo, $destino) de la clase archivo del fichero func comunes.php,
funcion creada y utilizada en el proyecto anterior.
Si todo ha ido bien, el archivo es enviado al PC de la subred mediante
XML-RPC, para ello se codifica el fichero en base643 para que pueda ser
transferido en el mensaje, para realizar esta codificacion se deben hacer
varias operaciones con el archivo, usando las funciones fopen(), fread() y
fclose()
3Base 64 es un sistema de numeracion posicional que usa 64 como base. Es la mayorpotencia de dos que puede ser representada usando unicamente los caracteres imprimiblesde ASCII. Esto ha propiciado su uso para codificacion de correos electronicos, PGP y otrasaplicaciones. Todas las variantes famosas que se conocen con el nombre de Base64 usanel rango de caracteres A-Z, a-z y 0-9 en este orden para los primeros 62 dıgitos, pero lossımbolos escogidos para los ultimos dos dıgitos varıan considerablemente de unas a otras.Otros metodos de codificacion como UUEncode y las ultimas versiones de binhex usan unconjunto diferente de 64 caracteres para representar 6 dıgitos binarios, pero estos nuncason llamados Base64.
3.4. OPERACIONES CON ARCHIVOS 33
1 $ge s to r = fopen ( $ruta , ” r ”) ;
2 $contenido = f read ( $gestor , f i l e s i z e ( $ruta ) ) ;
3 f c l o s e ( $ge s to r ) ;
Tras realizar esta tarea, el fichero se codifica y se llama a la funcion en-
viar($ficheroxml, $nombre), de la clase PC del fichero red.php, que sera la
encargada de enviar el fichero codificado, el sistema permanecera a la es-
pera de la respuesta por parte del servidor XML-RPC. Una vez recibida la
respuesta se mostrara el resultado.
Esta operacion de subida puede tardar un poco de tiempo en realizarse,
dependera del tamano del archivo a subir. Tambien hay que tener en cuenta
que las operaciones con ficheros pueden dar algunos problemas, si algunas
de las funciones de operaciones con ficheros falla, el sistema mostrara un
error de subida y la operacion debe hacerse otra vez desde el principio.
3.4.3.2. Subida al PC de la subred
Como se ha comentado el fichero se codifica y se envıa al PC de la subred
como parte de un mensaje XML-RPC. En este PC, el archivo sera guarda-
do en la carpeta /var/www/uploads/, para que pueda ser transferido a
otros PCs de la subred mediante los dos metodos de transferencia que des-
pues seran comentados. El fichero permanecera en esta carpeta hasta que el
usuario decida borrar los archivos almacenados en el PC con rol de servidor,
reinicie o cierre la aplicacion, momento en el que se borran automaticamente
todos los archivos almacenados en el PC.
Para la recepcion del mensaje XML-RPC se ha creado una nueva funcion
en el modulo del servidor XML-RPC, esta nueva funcion es
1 de f c rea ( s e l f , f i cheroxml , nombre ) :
2 ”””
3 Rea l i za c r eac i on arch ivo s
4 ”””
5 nombre = s t r ( nombre )
6 f i c h e r o = ’/ var /www/ uploads/ %s ’ %(nombre )
7 sa l i da , s a l i d a e r r = commonfunc . c r e a f i c h e r o ( f i cheroxml , f i c h e r o )
34 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
8 return sa l i da , s a l i d a e r r
Aquı se pasa la ruta donde se almacenara el fichero, junto con el propio
fichero codificado en base64, a la funcion crea fichero(ficheroxml, fichero)
del archivo commonfunc, que ha sido modificado para anadir esta funcion.
No se hace uso de la funcion invoca(comando), usada en los casos anteriores,
ya que, ademas de introducir comandos en el shell del sistema, se necesitan
otras operaciones.
1 de f c r e a f i c h e r o ( f i che roxml , f i c h e r o ) :
2 s a l i d a = [ ]
3 s a l i d a e r r = [ ]
4 t ry :
5 f i c h=open ( f i ch e r o , ’w’ )
6 f i c h . wr i t e ( base64 . b64decode ( f i che roxml ) )
7 f i c h . c l o s e ( )
8
9 r e su l t ado = s t r ( ’ Fichero subido ’ )
10 s a l i d a . append ( r e su l t ado )
11
12 except Exception , why :
13 s a l i d a e r r = [ s t r ( Exception ) , s t r (why) ]
14 return sa l i da , s a l i d a e r r
Usando las mismas funciones de operaciones con archivos, tambien dispo-
nibles en Python, conseguimos decodificar y almacenar el fichero en la ruta
adecuada, dando el mensaje ‘Fichero subido’, si todo ha ido correctamente,
o lanzando una excepcion en caso de error.
3.4.4. Transferencia de archivos
El principal objetivo para el que se ha hecho esta modificacion es para
que el alumno pueda ver como interaccionan dos PCs de la subred, los
protocolos implicados en las transferencias y otras caracterısticas del trafico
en las redes.
Para realizar esta tarea se barajaron varias opciones, primero se penso en
usar generadores de trafico:
Generador de trafico IPERF: Permite medir el ancho de banda entre
3.4. OPERACIONES CON ARCHIVOS 35
dos ordenadores en red, genera flujo de datos TCP y UDP y mide el
rendimiento de la red. Permite al usuario modificar ciertos parametros
del generador de trafico, como el tamano de datagramas UDP, o el
tiempo de la conexion.
Generador de trafico UPDCAST: Permite el envıo de datos UDP de
forma simultanea a muchos destinos en la red.
Estos generadores de trafico, al igual que otros, se descartaron ya que
para su uso requerıan la ejecucion de comandos tanto en el servidor de
trafico como en el cliente, y con el sistema implementado se tenıan que
hacer cambios muy grandes en la estructura.
Otra de las opciones fue la de usar protocolos en tiempo real (RTP),
pero requerıa un tiempo de aprendizaje del protocolo por parte del alumno.
Ademas estas opciones anteriormente mencionadas no dejan de ser algo
abstractas, no hay manera visual de comprobar si el trafico llega correcta-
mente al PC destino, ası que se llego a la conclusion que la mejor manera de
generar trafico entre los PCs era la de transferir archivos entre los ordena-
dores. Con este sistema el alumno puede comprobar si el archivo que se ha
enviado esta en el PC destino, puede enviar archivos de distintos tamanos y
no tiene que preocuparse de configurar los parametros de la conexion.
Para esta solucion tambien se tuvieron en cuenta varias opciones para la
transferencia de archivos; finalmente se opto por el protocolo de transferencia
TFTP, que usa UDP, y la herramienta WGET del protocolo HTTP, que
utiliza TCP. Ası se tienen dos protocolos de transporte distintos.
Para analizar los protocolos implicados en la transferencia, el alumno
podra capturar el trafico de la red con una nueva herramienta de la aplicacion
web que sera explicada posteriormente.
36 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
3.4.4.1. Transferencia WGET
WGET es una herramienta libre que permite la descarga de contenidos
desde servidores web de una forma simple. Su nombre deriva de World Wide
Web (www), y de obtener (en ingles “get”), esto quiere decir: obtener desde
la WWW.
Actualmente soporta descargas mediante los protocolos HTTP, HTTPS
y FTP.
Caracterısticas:
Robustez: WGET ha sido disenado para la robustez en conexiones
de red lentas o inestables. Si una descarga no se completa debido a
un problema en la red, WGET automaticamente tratara de seguir
descargado desde donde acabo, y repetir el proceso hasta que el archivo
completo haya sido recuperado.
Descarga recursiva: WGET opcionalmente puede trabajar como
una arana web extrayendo recursos enlaces de las paginas web HTML
y descargarlas en la secuencia, repitiendo el proceso recursivamente
hasta que todas las paginas hayan sido descargadas o hasta que haya
sido alcanzada una profundidad de repeticion maxima especificada por
el usuario. Las paginas web descargadas son guardadas en una estruc-
tura de directorio que se parece a un servidor remoto. Esta descarga
recursiva permite hacer una copia exacta de cualquier sistema de ar-
chivos parcial o completamente de un sitio web vıa HTTP. Los enlaces
de sitios web HTML descargados pueden ser ajustados para indicar el
punto o zona de descarga.
Portabilidad: Escrito en una forma que permita la portabilidad, en
lenguaje de programacion C y con la menor cantidad posible de biblio-
tecas de terceros, WGET requiere no mucho mas que un compilador de
C y una interfaz tipo de BSD para usar la red con TCP/IP. Disenado
3.4. OPERACIONES CON ARCHIVOS 37
como un programa Unix para invocarse desde una lınea de comandos,
el programa ha sido portado a numerosos sistemas y ambientes tipo
Unix, tales como Cygwin y Mac OS X, ası como tambien a sistemas
Microsoft Windows.
Otras caracterısticas:
WGET soporta descargas a traves de proxies, los cuales son amplia-
mente desplegados para proporcionar acceso web dentro de cortafuegos
de empresas y al cache para rapidamente entregar contenido de acceso
frecuente.
Hace uso de conexiones persistentes de HTTP donde estan disponibles.
Compatible con IPv6 en sistemas que incluyan las interfaces apropia-
das.
Puede usarse SSL/TLS para el cifrado de las descargas usando la bi-
blioteca OpenSSL.
Puede descargar archivos mas grandes a 2 gigabytes en sistemas de 32
bits que incluyan las interfaces apropiadas.
La velocidad de descarga puede ser limitada para evitar consumir todo
el ancho de banda disponible.
Como se puede ver, es un metodo muy simple para la tarea de transfe-
rencia de ficheros entre PCs, por ello ha sido el metodo elegido para trabajar
sobre TCP.
Para hacer uso de esta herramienta, una de las condiciones es que exista
un servidor web de donde obtener los ficheros, por ello se tiene que instalar
un servidor web en cada PC de la subred.
38 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
sudo apt -get install apache2
sudo apt -get install apache2 -mpm -prefork
Una vez instalado el servidor web, se debe crear la carpeta donde se en-
contraran los ficheros que seran trasferidos al cliente, en esta carpeta tambien
se almacenaran los ficheros que se transferiran mediante TFTP.
sudo mkdir /vaar/www/uploads/
En el lado del cliente no es necesario instalar nada, solo se necesita crear
la carpeta donde se almacenaran los ficheros transferidos mediante WGET
y cambiar sus permisos.
sudo mkdir /home/labredes/downloads/wget
sudo chmod 777 /home/labredes/downloads/wget
Ahora, desde el cliente o PC destino del archivo, se teclearıa el comando
para obtener el archivo
wget -N -P /home/labredes/downloads/wget/ http://‘‘ direccion del
servidor ’’/uploads/‘‘nombre del archivo ’’
Con la opcion -N, si en nuestro equipo existe ya un archivo igual al que
se quiere descargar, solicita al servidor la fecha de la ultima modificacion
del archivo solicitado (last-modified date) y solo si es mas reciente del que
se posee se descarga.
La opcion -P permite especificar donde se almacenaran los archivos des-
cargados, si la carpeta no existe WGET la creara.
Con esta orden tambien se obtienen las estadısticas de la transferencia,
no es necesario anadir ninguna opcion mas.
Si todo ha ido bien, el archivo es almacenado en el cliente WGET, si
ha habido algun problema, la herramienta informa del error.
Para poner en funcionamiento esta mejora en la aplicacion, se han llevado
3.4. OPERACIONES CON ARCHIVOS 39
a cabo las siguientes tareas:
Se han modificado los archivos de la pagina web para poder mostrar
el formulario de la transferencia WGET, estos archivos son aplica-
cion.php e interfaz.js.
En el formulario se tiene que escoger el PC que actuara como destino,
se debe introducir la direccion IP del PC que actuara como servidor
y se tiene que poner el nombre del archivo a transferir, hay que tener
en cuenta que el nombre debe coincidir exactamente con el nombre
del archivo almacenado, para ello se recomienda hacer uso de la he-
rramienta de listado de archivos, con el rol servidor, que fue explicada
anteriormente.
Como en las anteriores modificaciones se han tenido que editar los
archivos del nucleo de la aplicacion, aplicacion.php y red.php de la
carpeta /admin/.
En el archivo aplicacion.php, se anade un nuevo caso en el switch,
llamado “wget”. Aquı se validan los parametros introducidos en el for-
mulario y si no hay problemas con la direccion del servidor, ni con el
PC de destino, se procede a llamar la funcion wget($servidor, $archi-
vo), de la clase PC del archivo red.php. Esta funcion ha sido anadida
al codigo y su tarea es crear el mensaje XML-RPC, donde se introduce
el nombre del archivo y la direccion del servidor al PC que se haya in-
dicado como destino (cliente WGET), y esperar la respuesta de este,
para procesarla y mostrar el resultado por la consola de la aplicacion.
Se han tenido que modificar los archivos configeth.py y commonfunc.py
de los servidores XML-RPC, para poder procesar correctamente el
mensaje XML-RPC proveniente de la aplicacion.
En el fichero configeth.py se ha creado una nueva funcion, wget(self,
servidor, archivo), que se encarga de recibir el mensaje, de crear el
40 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
comando WGET adecuado, de llamar a la funcion que realiza la tarea
y genera la respuesta, commonfunc.wget(comando,archivo), y de enviar
la respuesta a la aplicacion.
1 de f wget ( s e l f , s e rv idor , arch ivo ) :
2 ”””
3 Hace t r a n s f e r e n c i a wget
4 ”””
5 comando = ’ wget −N −P /home/ lab r ede s /downloads/wget/ http : // ’ + s t r (
s e r v i d o r ) + ’/ uploads / ’ + s t r ( arch ivo )
6 sa l i da , s a l i d a e r r = commonfunc . wget ( comando , arch ivo )
7
8 return sa l i da , s a l i d a e r r
La funcion wget(comando,archivo) del archivo commonfunc.py, se en-
carga de ejecutar el comando en un nuevo subproceso y de almacenar
la salida de este subproceso.
1 de f wget ( comando , arch ivo ) :
2 s a l i d a = [ ]
3 s a l i d a e r r = [ ]
4
5 try :
6 p = subprocess . Popen ( comando , stdout=subprocess . PIPE , s t d e r r=subprocess
. PIPE , s h e l l=True )
7 # La s a l i d a de l wget es por s tder r , pero l a guardamos en l a s a l i d a
normal
8 i f p . s t d e r r :
9 f o r l i n e in p . s t d e r r :
10 l i n e = l i n e . s p l i t ( ’\n ’ ) [ 0 ]
11 s a l i d a . append ( l i n e )
12 e l s e :
13 s a l i d a . append ( ’NONE’ )
14 except Exception , why :
15 s a l i d a e r r = [ s t r ( Exception ) , s t r (why) ]
16
17 return sa l i da , s a l i d a e r r
La salida de este subproceso, sea buena o erronea, se da por la salida
de error estandar, por ello esta salida es guardada y mandada como
respuesta en la salida normal, para que la aplicacion pueda procesarla
correctamente.
Todo el codigo para poner en funcionamiento esta herramienta en la
aplicacion sera mostrado en el apendice.
3.4. OPERACIONES CON ARCHIVOS 41
3.4.4.2. Transferencia TFTP
TFTP son las siglas de Trivial file transfer Protocol (Protocolo de trans-
ferencia de archivos trivial). Es un protocolo de transferencia muy simple
semejante a una version basica de FTP. TFTP a menudo se utiliza para
transferir pequenos archivos entre ordenadores en una red.
Algunos detalles del TFTP:
Utiliza UDP (en el puerto 69) como protocolo de transporte (a dife-
rencia de FTP que utiliza los puertos 20 y 21 TCP).
No puede listar el contenido de los directorios.
No existen mecanismos de autenticacion o cifrado.
Se utiliza para leer o escribir archivos de un servidor remoto.
Soporta tres modos diferentes de transferencia, ‘netascii’, ‘octet’y ‘mail’,
de los que los dos primeros corresponden a los modos ‘ascii’ e ‘ima-
gen’(binario) del protocolo FTP.
Ya que TFTP utiliza UDP, no hay una definicion formal de sesion,
cliente y servidor, aunque se considera servidor a aquel que abre el puerto
69 en modo UDP, y cliente a quien se conecta.
Sin embargo, cada archivo transferido vıa TFTP constituye un inter-
cambio independiente de paquetes, y existe una relacion cliente-servidor in-
formal entre la maquina que inicia la comunicacion y la que responde.
La maquina A, que inicia la comunicacion, envıa un paquete RRQ
(read request/peticion de lectura) o WRQ (write request/peticion de
escritura) a la maquina B, conteniendo el nombre del archivo y el modo
de transferencia.
42 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
B responde con un paquete ACK (acknowledgement/confirmacion),
que tambien sirve para informar a A del puerto de la maquina B al
que tendra que enviar los paquetes restantes.
La maquina origen envıa paquetes de datos numerados a la maquina
destino, todos excepto el ultimo conteniendo 512 bytes de datos. La
maquina destino responde con paquetes ACK numerados para todos
los paquetes de datos.
El paquete de datos final debe contener menos de 512 bytes de datos
para indicar que es el ultimo. Si el tamano del archivo transferido es
un multiplo exacto de 512 bytes, el origen envıa un paquete final que
contiene 0 bytes de datos.
Por todas estas caracterısticas, ha sido el metodo elegido para trabajar
sobre UDP.
Para hacer uso de este protocolo, se han tenido que instalar en cada PC
de las subredes tanto el servidor como el cliente TFPT.
Instalacion y configuracion del servidor:
Para la instalacion del servidor se ejecuta el siguiente comando en
consola:
sudo apt -get install tftpd -hpa
Una vez instalado se tiene que editar el archivo de configuracion
sudo nano /etc/default/tftpd -hpa
El archivo de configuracion tendra el siguiente aspecto:
TFTP_USERNAME=‘‘tftp ’’
TFTP_DIRECTORY =‘‘/var/www/uploads/’’
TFTP_ADDRESS = ‘‘0.0.0.0:69 ’’
3.4. OPERACIONES CON ARCHIVOS 43
TFTP_OPTIONS=‘‘--secure ’’
RUN_DAEMON=‘‘yes ’’
OPTIONS=‘‘-l -s /var/www/uploads/’’
La carpeta /var/www/uploads/ es donde se almacenaran los fiche-
ros que se suban a los PCs y que seran transferidos desde el PC servidor
a los clientes TFTP. Esta carpeta fue creada al instalar el servidor
web en los PCs para la transferencia mediante WGET. Si no es ası,
debe ser creada de la misma manera
sudo mkdir /var/www/uploads/
Instalacion y configuracion del cliente:
Para la instalacion del cliente TFTP se tiene que introducir la siguien-
te orden:
sudo apt -get install tftp -hpa
Posteriormente, se crea la carpeta, donde se almacenaran los archivos
recibidos mediante TFTP, y se cambian sus permisos
sudo mkdir /home/labredes/downloads/tftp
sudo chmod 777 /home/labredes/downloads/tftp
Ya estan configurados los PCs para el intercambio de archivos mediante
TFTP, como solo se podra obtener el archivo desde el servidor al cliente
TFTP, solo se usaras la orden get.
Desde el cliente se teclea
tftp -v ‘‘direccion del servidor ’’
tftp > get ‘‘nombre del archivo ’’
tftp > quit
44 CAPITULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
Con la opcion -v se muestran las estadısticas de la transferencia.
Como en el caso del WGET, existen muchos modos y opciones para la
trasnferencia de archivos mediante TFTP, pero para nuestro sistema solo
se usaran las ordenes anteriores.
Con esto ya se tiene almacenado el archivo en el cliente TFTP, siempre
que no se produzca un error.
Para poner en funcionamiento este sistema de transferencia se llevan a
cabo las mismas tareas que en el caso de la transferencia WGET.
Creacion de un nuevo formulario para la transferencia TFTP, con las
mismas opciones que para WGET.
Modificacion de los archivos del nucleo de la aplicacion, en este caso la
opcion del switch es “tftp” y la funcion se llamara tftp($servidor, $ar-
chivo), para validar el formulario, crear el mensaje XML-RPC, man-
darlo y recibir la respuesta.
La mayor variacion con respecto al metodo de transferencia WGET
se observa en el codigo del servidor XML-RPC.
En la funcion tftp(self, servidor, archivo), del modulo configeth.py,
encargada de recibir el mensaje XML-RPC y devolver la respuesta,
no se genera ningun comando, si no que se llama directamente a la
funcion cliente tftp(servidor, archivo), del archivo commonfunc.py, con
la direccion del servidor y el nombre del archivo.
1 de f t f t p ( s e l f , s e rv idor , a rch ivo ) :
2 ”””
3 Hace un get de t f t p a l s e r v i d o r
4 ”””
5 # Aqui se almacenan l a s descargas desde e l s e r v i d o r
6 sa l i da , s a l i d a e r r = commonfunc . c l i e n t e t f t p ( s e rv idor , a rch ivo )
7
8 return sa l i da , s a l i d a e r r
Una vez en esta funcion, se procede a hacer la tarea de transferencia
3.4. OPERACIONES CON ARCHIVOS 45
1 de f c l i e n t e t f t p ( s e rv idor , a rch ivo ) :
2 s a l i d a = [ ]
3 s a l i d a e r r = [ ]
4 t ry :
5 comando = ’ t f t p −v ’ + s t r ( s e r v i d o r )
6 p = subprocess . Popen ( comando , s td in=subprocess . PIPE , stdout=subprocess .
PIPE , s t d e r r=subprocess . PIPE , s h e l l=True )