3-MEJORAS IMPLEMENTADAS EN EL SISTEMA

Anuncio
Capı́tulo 3
Mejoras implementadas en el
sistema
En este capı́tulo se trata de explicar las distintas funcionalidades añadidas al proyecto inicial, para ası́ resolver los problemas encontrados, superar
las limitaciones y poder poner en funcionamiento el sistema de prácticas.
Se explicarán las mejoras introducidas, se mostrarán las modificaciones
de los archivos para incluir las mejoras en el código y se describirá cómo
poner éstas en funcionamiento.
Para introducir estas mejoras, se ha cambiado el aspecto de la aplicación
web, se ha modificado el menú de navegación de la aplicación original para
añadir las nuevas funcionalidades del sistema. Tendrá el siguiente menú de
navegación:
Figura 3.1: Menú de navegación
Reinicio: Con esta opción se devuelve el sistema de prácticas a su
estado inicial, se aplican las configuraciones por defecto de los elemen17
18
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
tos de la red y se borran todos los archivos que se hayan subidos a los
PCs.
Configuración: En este menú desplegable se encuentran los distintos
formularios para “Administrar” las configuraciones, se podrá renombrar o borrar una configuración guardada. En este apartado también
se puede “Cargar” una configuración que un usuario tenga almacenada
y “Guardar” una nueva configuración.
Además se han añadido las opciones para interactuar con los conmutadores.
A través del formulario “Show” se puede mostrar la configuración del
conmutador que se desee, con la opción “Configure” se configura el
conmutador lı́nea a lı́nea y con “Descargar archivo” se descargará el
último archivo de configuración del conmutador que haya sido guardado.
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”.
Además este menú incluye el formulario para la captura de tráfico en
la red. Podemos iniciar, detener y obtener la captura de la red, para
posteriormente descargarla en el PC del usuario.
Archivos: En este menú se encuentran todas las tareas necesarias para
el intercambio de archivos entre los PCs de la red, esto está pensado
para el intercambio de tráfico. 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. AMPLIACIÓN DE LOS TURNOS
19
Cerrar: Haciendo clic en este campo se cierra la aplicación web, devolviendo el sistema a su estado por defecto y borrando los archivos
almacenados en los distintos PCs de las subredes.
Para introducir este nuevo menú y estos formularios se han modificado
el archivo aplicacion.php del directorio raı́z y el script interfaz.js, incluido
en la carpeta /js/ añadiéndoles las funciones necesarias para las tareas.
Las modificaciones de estos archivos serán incluidas en el apéndice.
3.1.
Ampliación de los turnos
El sistema anterior sólo permitı́a al administrador habilitar turnos de
prácticas 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 prácticas
era que los alumnos tuvieran la libertad de hacer las mismas los dı́as que
quisieran. Se ha añadido el Sábado y el Domingo a los dı́as accesibles, para
que el administrador decida si quiere dar acceso a los alumnos a la aplicación
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 administración del sistema.
En los archivos /include/admin reservas.php, /include/admin turnos.php,
/include/admin usuarios.php y / include/turnos.php se han añadido los dı́as
Sábado y Domingo.
1
$ d i a s = a r r a y ( 1 => ’ Lunes ’ ,
’ Martes ’ ,
’ Miercoles ’ ,
’ Jueves ’ ,
’ Viernes ’ ,
’ Sabado ’ ,
’ Domingo ’ ) ;
También habrı́a que hacer la validación de los dı́as añadidos, en el archivo
/admin/administar.php en lugar de validar entre 1 y 5, habrı́a que validar
entre 1 y 7.
20
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
3.2.
Interacción con los conmutadores
Con esta modificación se pretende tener más control sobre los conmutadores, permitir al usuario ver “lo que está pasando” al momento, no será necesario tener que descargar el fichero de configuración para conocer el estado
del conmutador. Además se permite configurar los conmutadores de una manera más intuitiva.
3.2.1.
Comando de información: SHOW
Saber utilizar e interpretar los comandos show permite el rápido diagnóstico de fallos, el alumno debe entender y asimilar las salidas de cada uno de
los comandos shows más importantes, estos le darán la respuesta a más de
un problema.
Los comandos show permitidos están limitados por el propio formulario
de la aplicación web, para evitar que los alumnos puedan ver la información
que el administrador del sistema considere privada. Esto es realizado con el
campo option de PHP.
El administrador siempre podrá añadir o eliminar los comandos que
desee. Sólo tiene que modificar estas opciones en el archivo de la página
web de la aplicación de prácticas en el directorio raı́z, /aplicacion.php.
Las opciones disponibles son:
show arp: Muestra la tabla ARP del conmutador.
show config: Muestra la configuración de inicio del conmutador.
show gvrp: Muestra la configuración de GVRP.
show history: Muestra los comandos introducidos anteriormente.
show interfaces: Muestra la configuración de los puertos y la información del estado de las interfaces.
3.2. INTERACCIÓN CON LOS CONMUTADORES
21
show ip: Muestra la configuración 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 gestión del conmutador y el tiempo que se usa el dispositivo como servidor.
show monitor: Muestra la monitorización del estado de la red del
conmutador y la configuración, si el monitoreo de la red está habilitado.
show name: Muestra los nombres asignados a los puertos.
show qos: Muestra diversas configuraciones de QoS (Quality of Service) (Calidad de Servicio)
show running-config: Muestra el contenido del archivo de configuración activo.
show spanning-tree: Muestra la información del spanning-tree
1
show static-mac: Muestra las direcciones MAC estáticas de todas
las VLANS.
show system-information: Muestra la información de la configuración global y los parámetros de operación del sistema.
show time: Muestra la fecha y la hora actual.
1
Spanning Tree Protocol (SmmTPr o STP) es un protocolo de red de nivel 2 de
la capa OSI (nivel de enlace de datos). Está basado en un algoritmo diseñado por Radia
Perlman mientras trabajaba para DEC. Su función es la de gestionar la presencia de
bucles en topologı́as de red debido a la existencia de enlaces redundantes (necesarios en
muchos casos para garantizar la disponibilidad de las conexiones). El protocolo permite
a los dispositivos de interconexión activar o desactivar automáticamente los enlaces de
conexión, de forma que se garantice la eliminación de bucles. STP es transparente a las
estaciones de usuario.
22
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
show trunks: Muestra los canales y los puertos que le pertenecen.
show vlans: Muestra información del estado de todas las VLANS2 .
Después de estas opciones se debe introducir un campo de texto en el
que se añaden los siguientes parámetros de la orden, si se deja el campo en
blanco muestra una visión general del comando seleccionado, a medida que
se introducen parámetros se tiene una visión más especı́fica.
Una de las grandes mejoras es la posibilidad de introducir el carácter ‘?’
en los argumentos, esto es equivalente a pulsar el tabulador en el conmutador, lo que hace que se muestren las distintas opciones que se pueden poner
como parámetros del comando elegido. Con esto se puede buscar lo que se
quiera mostrar sin necesidad de conocer todos los comandos y parámetros.
Para implementar esta opción, se han introducido varios cambios en
los archivos del núcleo de la aplicación (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 añadido en el switch
principal la opción “show”, aquı́ se comprueba si el conmutador, la acción a
realizar y sus parámetros son correctos. También se ha añadido la función
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 aplicación y se
muestre el resultado por pantalla.
Para esto se ha tenido que modificar la clase PHPTelnet escrita por Antone Roundy, para permitir mandar el carácter tabulador cuando el usuario
introduce la ‘?’ como argumento. Posteriormente, se envı́an varios backspaces para que se puedan seguir enviando órdenes sin tener que reiniciar la
aplicación. Ası́ pues, se han añadido las funciones DoCommand2() y DoCommand3(), para enviar el tabulador y los backspaces.
2
VLAN (acrónimo de virtual LAN, red de área local virtual) es un método de crear
redes lógicamente independientes dentro de una misma red fı́sica.
3.2. INTERACCIÓN CON LOS CONMUTADORES
3.2.2.
23
Comando de configuración: CONFIGURE
Como se ha comentado, con esta mejora se pretende poder configurar
los conmutadores de una manera más intuitiva, los conmutadores podrán
ser configurados lı́nea a lı́nea y el sistema irá dando la respuesta a cada
orden introducida, corrigiendo posibles fallos de una manera más cómoda.
Con el comando configure se puede realizar esta tarea de forma sencilla.
Saber utilizar este comando con las órdenes adecuadas hace posible que se
puedan configurar los conmutadores rápidamente.
Al igual que en el caso del show, los comandos configure permitidos
están limitados por la propia aplicación web, para evitar que los alumnos
configuren parámetros de los conmutadores que el administrador no desee.
Estos comandos de configuración permitidos, también podrán ser modificados, habrı́a que añadir o eliminar las opciones en el formulario correspondiente a la configuración de los conmutadores.
Los comandos disponibles para el configure son:
hostame: Especifica el nombre del conmutador para fines administrativos.
interface: Introduce el nivel de configuración de la interfaz o ejecuta
un comando para ese nivel.
ip: Configura varios parámetros IP del conmutador.
mac-age-time: Configura el tiempo de duración de la tabla de direcciones MAC.
mirror-port: Define el puerto espejo para fines de diagnóstico.
qos: Configura la calidad del servicio (QoS) del dispositivo.
primary-vlan: Establece la VLAN que va a ser utilizada como primaria.
24
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
ping: Envı́a solicitudes ping a un dispositivo de la red.
spanning-tree: Establece los parámetros de operación del conmutador en una topologı́a spanning-tree.
trunks: Añade o elimina un puerto del conmutador del túnel.
vlan: Añade, elimina o edita una VLAN, o introduce una VLAN en
el contexto.
Después de elegir el comando de configuración, se introducen los valo-
res de estos comandos. Los valores de algunas opciones son comprobados
mediante la función de validación utilizada en el proyecto anterior, para no
permitir el uso de valores correspondientes a la red de administración. Esta función de validación ha tenido que ser modificada para que, además de
permitir validar la configuración introducida con un fichero de texto, verifique la lı́nea de configuración introducida en el formulario. Se ha añadido en
el código de la función esConmutador($input, $idred, $idconmutador, $config), usada para esta validación, del archivo func comunes.php, la siguiente
estructura:
1
if
2
( $ i n p u t ==
‘ archivo ’ ) {
// C o n f i g u r a c i o n c o m p l e t a en un a r c h i v o de c o n f i g u r a c i o n
3
$texto = Archivo : : l e e r ( $ c o n f i g ) ;
4
} else {
5
// C o n f i g u r a c i o n
6
$texto = $config ;
7
introducida
linea a linea
en
el
formulario
}
Como con la orden show, con estos comandos también se puede introducir el carácter ‘?’ como argumento, para poder ver las diversas opciones
de configuración del comando seleccionado. El carácter puede ser introducido en la profundidad del argumento de configuración que se desee, ya que
algunas órdenes de configuración 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 núcleo de la aplica-
3.2. INTERACCIÓN CON LOS CONMUTADORES
25
ción, aplicacion.php, para añadir la opción “configure” en el switch, aquı́ se
comprueba si el conmutador y la acción a realizar son correctas. También se
ha añadido la función 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 aplicación y mostrar el resultado por pantalla. En PHPTelnet se usan
las mismas clases que se han comentado con anterioridad.
Además 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 configuración de un conmutador, la aplicación no se
conectaba al propio conmutador, sino que obtenı́a el fichero de configuración
que el usuario habı́a subido, o el archivo de configuración por defecto, ya
que era la única forma de poder configurarlo. Como ahora sı́ que se puede
configurar el conmutador sin la necesidad de subir un archivo de configuración, aunque esta opción sigue siendo válida, surge la necesidad de obtener
la configuración actual de cada conmutador cada vez que se quiera guardar
una configuración.
Para esta tarea se crea la función ObtConfig() en la clase conmutador
del archivo red.php, esta función obtendrá la configuración del conmutador que se desee mediante la orden copy running-config tftp, aplicará el
filtrado de la parte de la red de administración con la función filtrarArchivo($completo, $admin) y guardará la configuración en el servidor web. Una
vez guardada la configuración puede ser descargada con la opción “Descargar Archivo”, incluida en el menú “Configuración” del menú de navegación
de la aplicación web. Para la descarga del archivo se hace uso del código
conm config.php del proyecto anterior, el cual no ha sido modificado.
En la función filtrarArchivo($completo, $admin) se compara el archivo
de la configuración completa de un conmutador, obtenida con ObtConfig(),
con un archivo de filtrado creado para esta tarea, en el que se encuentran
26
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
las lı́neas de configuración especı́ficas de la red de administración 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 está almacenado en la carpeta /home/labredes/configuraciones/administracion/, con el nombre
conmxyfiltro.txt (conmutador y de la subred x ) y tiene el siguiente aspecto
1
; J9085A C o n f i g u r a t i o n
Editor ;
C r e a t e d on r e l e a s e #R . 1 1 . 2 5
2
3
max−v l a n s 64
4
snmp−s e r v e r community ” p u b l i c ” U n r e s t r i c t e d
5
v l a n 200
6
name ”ADMIN”
7
f o r b i d 1−24
8
u n t a g g e d 25−28
9
ip
10
address
192.168.200.201
255.255.255.0
exit
11
management−v l a n 200
12
s p a n n i n g −t r e e
13
s p a n n i n g −t r e e 25 bpdu− f i l t e r
14
s p a n n i n g −t r e e 26 bpdu− f i l t e r
15
s p a n n i n g −t r e e 27 bpdu− f i l t e r
16
s p a n n i n g −t r e e 28 bpdu− f i l t e r
17
p a s s w o r d manager
Los códigos de las funciones anteriormente mencionadas podrán consultarse en el apéndice.
3.3.
Información de los PCs de las subredes
Aunque se pueda obtener la configuración principal de los PCs de las
subredes seleccionandolos en el esquema, se ha introducido un simple formulario, tanto para obtener toda la configuración 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 Configuración” o a “Muestra Tabla de
Rutas”, en el menú “Red” del menú de navegación, y seleccionando el PC
que se desee, se obtiene la información pedida.
Para hacer estas tareas, en el lado del servidor web se han llevado a cabo
3.3. INFORMACIÓN DE LOS PCS DE LAS SUBREDES
27
las siguientes modificaciones:
Se han añadido los formularios correspondientes a la página web. Modificando los archivos aplicacion.php, del directorio raı́z, e interfaz.js,
del directorio /js/
Se han añadido dos nuevas opciones al switch del núcleo de la aplicación 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, ésta es enviada a la aplicación para
mostrar el resultado.
En la clase PC del archivo red.php se añaden dos funciones prácticamente idénticas, “ifconfig” y “route”, éstas se encargaran de crear y
de enviar el mensaje XML-RPC correspondiente. Una vez mandado el
mensaje al PC de la subred de prácticas, se espera la respuesta de éste
para procesarla según corresponda.
En el lado del PC de la subred, que será el servidor XML-RPC que recibe
las órdenes, se han tenido que definir dos nuevas funciones, en el módulo de
acciones, para procesar los mensajes.
Para mostrar la configuración, de la interfaz de la red de usuario, de los
PCs se añade:
1
2
def
ifconfig ( self ) :
”””
3
R e a l i z a una c o n s u l t a de i n f o r m a c i o n
4
”””
5
comando = ’ i f c o n f i g
6
salida ,
eth0 ’
s a l i d a e r r = commonfunc . i n v o c a ( comando )
7
8
return
salida ,
salidaerr
Para mostrar la tabla de rutas se añade:
1
2
def
route ( s e l f ) :
”””
28
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
3
R e a l i z a una c o n s u l t a de l a
4
”””
5
comando = ’ r o u t e ’
6
salida ,
t a b l a de r u t a s
s a l i d a e r r = commonfunc . i n v o c a ( comando )
7
8
return
3.4.
salida ,
salidaerr
Operaciones con archivos
Con esta mejora se pretende poder realizar algunas tareas para comprobar el funcionamiento de las subredes, además de estudiar distintos protocolos de transferencia de ficheros entre PCs, como son TFTP y HTTP,
usando, para este último, la orden WGET.
Se podrán subir ficheros a cada uno de los ordenadores de la subred y se
podrán comprobar esos ficheros, borrarlos y transferirlos a los demás ordenadores. Todas estas opciones las podemos encontrar en el menú “Archivos”
del menú de navegación de la aplicación web.
Para el manejo de los archivos en los PCs de las subredes se han creado varias carpetas en dichos PCs. En la carpeta /var/www/uploads/
se almacenarán los ficheros que se suban al ordenador, los archivos de esta carpeta serán los archivos de origen para la transferencia de ficheros y
serán transferidos a las carpetas /home/labredes/downloads/wget/ y
/home/labredes/downloads/tftp/ de los PCs destino según sean transferencias con WGET o TFTP, respectivamente.
3.4.1.
Listado de archivos
Con esta opción se pueden listar los archivos, con sus respectivos tamaños, que se encuentran en los ordenadores de las subredes, inicialmente
éstos están vacı́os ya que la aplicación borra automáticamente los archivos
cada vez que se inicia o finaliza la sesión, además estos archivos también
pueden ser borrados gracias a otra función de la aplicación.
3.4. OPERACIONES CON ARCHIVOS
29
Para poder ver el listado de los archivos se debe seleccionar en el formulario 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/uploads/, donde se encuentran almacenados los ficheros subidos al PC
desde la aplicación web.
Cliente TFTP: Con este rol se tendrı́a acceso a los archivos de la carpeta /home/labredes/downloads/tftp/, donde son enviados los
ficheros que se transfieren por TFTP desde el ordenador origen.
Cliente WGET: Con esta opción se listarı́an los archivos de la carpeta /home/labredes/downloads/wget/, donde se encuentran los
archivos transferidos mediante el comando WGET.
Para añadir esta función se han llevado a cabo cambios tanto en el servidor web, como en las funciones de cada servidor XML-RPC de los PCs de
las subredes.
En el código de la aplicación web, archivos incluidos en la carpeta /admin/, además de añadir 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 información del formulario, y, en el archivo red.php,
se ha definido la función 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 añadido la función para procesar el mensaje XML-RPC procedente del PC de administración y generar
la respuesta adecuada.
1
def
ls ( self ,
rol ) :
2
”””
3
R e a l i z a una v i s u a l i z a c i o n
de a r c h i v o s
30
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
4
”””
5
if
7
elif
r o l == ’ C l i e n t e WGET’ :
comando = ’ l s −s −h /home/ l a b r e d e s / d o w n l o a d s / wget ’
8
9
r o l == ’ S e r v i d o r ’ :
comando = ’ l s −s −h / v a r /www/ u p l o a d s ’
6
else :
comando = ’ l s −s −h /home/ l a b r e d e s / d o w n l o a d s / t f t p ’
10
11
12
salida ,
13
return
s a l i d a e r r = commonfunc . i n v o c a ( comando )
salida ,
salidaerr
La función invoca(comando), del archivo commonfunc, es la que se usa
normalmente para las operaciones en el servidor XML-RPC, esta función
ejecuta los comandos en el shell del sistema y devuelve los resultados, fue
creada por Silvio Fernández para el manejo de PCs en el CDC y es usada
también en el proyecto anterior.
3.4.2.
Borrado de archivos
El formulario creado para el borrado de archivos es idéntico 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 formulario, los archivos de códigos aplicacion.php, del directorio raı́z, e interfaz.js,
incluido en la carpeta /js/.
Los cambios realizados en los archivos de código son los mismos que
para el caso anterior, lo único que se modifica es el nombre de la función, la
opción del switch se llama “borrar” y la nueva función en el archivo red.php
se denomina borrar($rol).
En el lado del PC de la subred, el servidor XML-RPC, se crea una función
para procesar el mensaje y realizar la tarea de borrado, posteriormente se
hace un listado de archivos para comprobar que la acción se ha realizado
correctamente.
1
def
borrar ( self ,
rol ) :
3.4. OPERACIONES CON ARCHIVOS
2
”””
3
R e a l i z a una v i s u a l i z a c i o n
4
”””
5
if
6
7
8
9
10
11
31
de a r c h i v o s
r o l == ’ S e r v i d o r ’ :
comando = ’ rm −r / v a r /www/ u p l o a d s / ∗ ’
comando2 = ’ l s −s −h / v a r /www/ u p l o a d s ’
elif
r o l == ’ C l i e n t e WGET’ :
comando = ’ rm −r /home/ l a b r e d e s / d o w n l o a d s / wget / ∗ ’
comando2 = ’ l s −s −h /home/ l a b r e d e s / d o w n l o a d s / wget ’
else :
12
comando = ’ rm −r /home/ l a b r e d e s / d o w n l o a d s / t f t p / ∗ ’
13
comando2 = ’ l s −s −h /home/ l a b r e d e s / d o w n l o a d s / t f t p ’
14
15
salida ,
s a l i d a e r r = commonfunc . i n v o c a ( comando )
16
salida ,
s a l i d a e r r = commonfunc . i n v o c a ( comando2 )
17
18
return
3.4.3.
salida ,
salidaerr
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 formulario correspondiente para realizar esta tarea, añadiendo y modificando código
en los archivos aplicacion.php e interfaz.js para que sean mostrados en la
página web.
En el archivo del núcleo de la aplicación aplicacion.php, en la carpeta
/admin/, se añade un nuevo caso al bucle switch, llamado “subir” en el
cual se hace una validación del formulario, para comprobar si el PC que
recibirá el archivo es correcto. Aunque, en un principio, la aplicación no establece lı́mites en los ficheros que se suben, se podrı́a modificar fácilmente
el código para comprobar si el fichero sobrepasa un tamaño especificado o
si tiene una extensión adecuada. De todas maneras, en la propia configuración del servidor web, se ha limitado la subida de archivos a un tamaño
32
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
no mayor de 50M. Para modificar esta limitación hay que editar los ficheros /etc/php5/apache2/php.ini y /etc/php5/cli/php.ini y cambiar
los tamaños en las lı́neas
1
p o s t m a x s i z e =50M
1
u p l o a d m a x s i z e =50M
Para que el cambio surta efecto, hay que reiniciar el servidor web
sudo service apache2 restart
Una vez realizada la validación, se procede a guardar el archivo en el
servidor web, para ello se ha creado la carpeta /home/labredes/uploads/, aquı́ se almacenan los archivos antes de ser enviados al PC de la subred,
estos archivos se quedarán almacenados en el servidor para que el administrador 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 función almacenar($archivo, $destino) de la clase archivo del fichero func comunes.php,
función 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 codificación se deben hacer
varias operaciones con el archivo, usando las funciones fopen(), fread() y
fclose()
3
Base 64 es un sistema de numeración posicional que usa 64 como base. Es la mayor
potencia de dos que puede ser representada usando únicamente los caracteres imprimibles
de ASCII. Esto ha propiciado su uso para codificación de correos electrónicos, PGP y otras
aplicaciones. Todas las variantes famosas que se conocen con el nombre de Base64 usan
el rango de caracteres A-Z, a-z y 0-9 en este orden para los primeros 62 dı́gitos, pero los
sı́mbolos escogidos para los últimos dos dı́gitos varı́an considerablemente de unas a otras.
Otros métodos de codificación como UUEncode y las últimas versiones de binhex usan un
conjunto diferente de 64 caracteres para representar 6 dı́gitos binarios, pero éstos nunca
son llamados Base64.
3.4. OPERACIONES CON ARCHIVOS
1
$ g e s t o r = fopen ( $ruta , ” r ”) ;
2
$contenido = fread ( $gestor ,
3
f clo se ( $gestor ) ;
33
f i l e s i z e ( $ruta ) ) ;
Tras realizar esta tarea, el fichero se codifica y se llama a la función enviar($ficheroxml, $nombre), de la clase PC del fichero red.php, que será la
encargada de enviar el fichero codificado, el sistema permanecerá a la espera de la respuesta por parte del servidor XML-RPC. Una vez recibida la
respuesta se mostrará el resultado.
Esta operación de subida puede tardar un poco de tiempo en realizarse,
dependerá del tamaño del archivo a subir. También 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 mostrará un
error de subida y la operación 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 será guardado en la carpeta /var/www/uploads/, para que pueda ser transferido a
otros PCs de la subred mediante los dos métodos de transferencia que después serán comentados. El fichero permanecerá en esta carpeta hasta que el
usuario decida borrar los archivos almacenados en el PC con rol de servidor,
reinicie o cierre la aplicación, momento en el que se borran automáticamente
todos los archivos almacenados en el PC.
Para la recepción del mensaje XML-RPC se ha creado una nueva función
en el módulo del servidor XML-RPC, esta nueva función es
1
2
def
crea ( se l f ,
f i c h e r o x m l , nombre ) :
”””
3
Realiza
4
”””
creacion
archivos
5
nombre = s t r ( nombre )
6
f i c h e r o = ’ / v a r /www/ u p l o a d s/ %s ’
7
salida ,
%(nombre )
s a l i d a e r r = commonfunc . c r e a f i c h e r o ( f i c h e r o x m l ,
fichero )
34
8
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
return
salida ,
salidaerr
Aquı́ se pasa la ruta donde se almacenará el fichero, junto con el propio
fichero codificado en base64, a la función crea fichero(ficheroxml, fichero)
del archivo commonfunc, que ha sido modificado para añadir esta función.
No se hace uso de la función invoca(comando), usada en los casos anteriores,
ya que, además de introducir comandos en el shell del sistema, se necesitan
otras operaciones.
1
2
def
crea fichero ( ficheroxml
,
fichero ) :
salida = [ ]
3
salidaerr = []
4
try :
5
f i c h=open ( f i c h e r o , ’ w ’ )
6
f i c h . w r i t e ( base64 . b64decode ( f i c h e r o x m l ) )
7
fich . close ()
8
9
10
r e s u l t a d o = s t r ( ’ Fichero subido ’ )
s a l i d a . append ( r e s u l t a d o )
11
12
13
14
e x c e p t E x c e p t i o n , why :
s a l i d a e r r = [ s t r ( Exception ) ,
return
salida ,
s t r ( why ) ]
salidaerr
Usando las mismas funciones de operaciones con archivos, también disponibles 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 excepción en caso de error.
3.4.4.
Transferencia de archivos
El principal objetivo para el que se ha hecho esta modificación es para
que el alumno pueda ver cómo interaccionan dos PCs de la subred, los
protocolos implicados en las transferencias y otras caracterı́sticas del tráfico
en las redes.
Para realizar esta tarea se barajaron varias opciones, primero se pensó en
usar generadores de tráfico:
Generador de tráfico 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 parámetros
del generador de tráfico, como el tamaño de datagramas UDP, o el
tiempo de la conexión.
Generador de tráfico UPDCAST: Permite el envı́o de datos UDP de
forma simultánea a muchos destinos en la red.
Estos generadores de tráfico, al igual que otros, se descartaron ya que
para su uso requerı́an la ejecución de comandos tanto en el servidor de
tráfico 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.
Además estas opciones anteriormente mencionadas no dejan de ser algo
abstractas, no hay manera visual de comprobar si el tráfico llega correctamente al PC destino, ası́ que se llegó a la conclusión que la mejor manera de
generar tráfico entre los PCs era la de transferir archivos entre los ordenadores. Con este sistema el alumno puede comprobar si el archivo que se ha
enviado está en el PC destino, puede enviar archivos de distintos tamaños y
no tiene que preocuparse de configurar los parámetros de la conexión.
Para esta solución también se tuvieron en cuenta varias opciones para la
transferencia de archivos; finalmente se optó 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
podrá capturar el tráfico de la red con una nueva herramienta de la aplicación
web que será explicada posteriormente.
36
CAPÍTULO 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 inglés “get”), esto quiere decir: obtener desde
la WWW.
Actualmente soporta descargas mediante los protocolos HTTP, HTTPS
y FTP.
Caracterı́sticas:
Robustez: WGET ha sido diseñado para la robustez en conexiones
de red lentas o inestables. Si una descarga no se completa debido a
un problema en la red, WGET automáticamente tratará de seguir
descargado desde donde acabó, y repetir el proceso hasta que el archivo
completo haya sido recuperado.
Descarga recursiva: WGET opcionalmente puede trabajar como
una araña web extrayendo recursos enlaces de las páginas web HTML
y descargarlas en la secuencia, repitiendo el proceso recursivamente
hasta que todas las páginas hayan sido descargadas o hasta que haya
sido alcanzada una profundidad de repetición máxima especificada por
el usuario. Las páginas web descargadas son guardadas en una estructura de directorio que se parece a un servidor remoto. Esta descarga
recursiva permite hacer una copia exacta de cualquier sistema de archivos 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 programación C y con la menor cantidad posible de bibliotecas de terceros, WGET requiere no mucho más que un compilador de
C y una interfaz tipo de BSD para usar la red con TCP/IP. Diseñado
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 también a sistemas
Microsoft Windows.
Otras caracterı́sticas:
WGET soporta descargas a través de proxies, los cuales son ampliamente desplegados para proporcionar acceso web dentro de cortafuegos
de empresas y al caché para rápidamente entregar contenido de acceso
frecuente.
Hace uso de conexiones persistentes de HTTP donde están disponibles.
Compatible con IPv6 en sistemas que incluyan las interfaces apropiadas.
Puede usarse SSL/TLS para el cifrado de las descargas usando la biblioteca OpenSSL.
Puede descargar archivos más 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 método muy simple para la tarea de transferencia de ficheros entre PCs, por ello ha sido el método 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
CAPÍTULO 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 encontrarán los ficheros que serán trasferidos al cliente, en esta carpeta también
se almacenarán los ficheros que se transferirán mediante TFTP.
sudo mkdir / vaar / www / uploads /
En el lado del cliente no es necesario instalar nada, sólo se necesita crear
la carpeta donde se almacenarán 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 opción -N, si en nuestro equipo existe ya un archivo igual al que
se quiere descargar, solicita al servidor la fecha de la última modificación
del archivo solicitado (last-modified date) y sólo si es más reciente del que
se posee se descarga.
La opción -P permite especificar donde se almacenarán los archivos descargados, si la carpeta no existe WGET la creará.
Con esta orden también se obtienen las estadı́sticas de la transferencia,
no es necesario añadir ninguna opción más.
Si todo ha ido bien, el archivo es almacenado en el cliente WGET, si
ha habido algún problema, la herramienta informa del error.
Para poner en funcionamiento esta mejora en la aplicación, se han llevado
3.4. OPERACIONES CON ARCHIVOS
39
a cabo las siguientes tareas:
Se han modificado los archivos de la página web para poder mostrar
el formulario de la transferencia WGET, estos archivos son aplicacion.php e interfaz.js.
En el formulario se tiene que escoger el PC que actuará como destino,
se debe introducir la dirección IP del PC que actuará 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 herramienta 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 núcleo de la aplicación, aplicacion.php y red.php de la
carpeta /admin/.
En el archivo aplicacion.php, se añade un nuevo caso en el switch,
llamado “wget”. Aquı́ se validan los parámetros introducidos en el formulario y si no hay problemas con la dirección del servidor, ni con el
PC de destino, se procede a llamar la función wget($servidor, $archivo), de la clase PC del archivo red.php. Esta función ha sido añadida
al código y su tarea es crear el mensaje XML-RPC, donde se introduce
el nombre del archivo y la dirección del servidor al PC que se haya indicado como destino (cliente WGET), y esperar la respuesta de éste,
para procesarla y mostrar el resultado por la consola de la aplicación.
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 aplicación.
En el fichero configeth.py se ha creado una nueva función, wget(self,
servidor, archivo), que se encarga de recibir el mensaje, de crear el
40
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
comando WGET adecuado, de llamar a la función que realiza la tarea
y genera la respuesta, commonfunc.wget(comando,archivo), y de enviar
la respuesta a la aplicación.
1
d e f wget ( s e l f ,
servidor ,
archivo ) :
2
”””
3
Hace t r a n s f e r e n c i a
4
”””
5
comando = ’ wget −N −P /home/ l a b r e d e s / d o w n l o a d s / wget / h t t p : / / ’ + s t r (
6
salida ,
wget
s e r v i d o r ) + ’/ uploads / ’ + s t r ( archivo )
s a l i d a e r r = commonfunc . wget ( comando ,
archivo )
7
8
return
salida ,
salidaerr
La función wget(comando,archivo) del archivo commonfunc.py, se encarga de ejecutar el comando en un nuevo subproceso y de almacenar
la salida de este subproceso.
1
d e f wget ( comando ,
2
salida = [ ]
3
salidaerr = []
archivo ) :
4
5
6
try :
p = s u b p r o c e s s . Popen ( comando ,
. PIPE ,
7
s t d o u t=s u b p r o c e s s . PIPE ,
s t d e r r=s u b p r o c e s s
s h e l l =True )
# La s a l i d a
d e l wget e s p o r s t d e r r ,
pero
l a guardamos en l a
salida
normal
8
9
if
p. stderr :
for
11
12
15
in p . stderr :
s a l i d a . append ( l i n e )
else :
13
14
line
l i n e = l i n e . s p l i t ( ’\n ’ ) [ 0 ]
10
s a l i d a . append ( ’NONE’ )
e x c e p t E x c e p t i o n , why :
s a l i d a e r r = [ s t r ( Exception ) ,
s t r ( why ) ]
16
17
return
salida ,
salidaerr
La salida de este subproceso, sea buena o errónea, se da por la salida
de error estándar, por ello esta salida es guardada y mandada como
respuesta en la salida normal, para que la aplicación pueda procesarla
correctamente.
Todo el código para poner en funcionamiento esta herramienta en la
aplicación será mostrado en el apéndice.
3.4. OPERACIONES CON ARCHIVOS
3.4.4.2.
41
Transferencia TFTP
TFTP son las siglas de Trivial file transfer Protocol (Protocolo de transferencia de archivos trivial). Es un protocolo de transferencia muy simple
semejante a una versión básica de FTP. TFTP a menudo se utiliza para
transferir pequeños archivos entre ordenadores en una red.
Algunos detalles del TFTP:
Utiliza UDP (en el puerto 69) como protocolo de transporte (a diferencia de FTP que utiliza los puertos 20 y 21 TCP).
No puede listar el contenido de los directorios.
No existen mecanismos de autenticación 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 ‘imagen’(binario) del protocolo FTP.
Ya que TFTP utiliza UDP, no hay una definición formal de sesión,
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 intercambio independiente de paquetes, y existe una relación cliente-servidor informal entre la máquina que inicia la comunicación y la que responde.
La máquina A, que inicia la comunicación, envı́a un paquete RRQ
(read request/petición de lectura) o WRQ (write request/petición de
escritura) a la máquina B, conteniendo el nombre del archivo y el modo
de transferencia.
42
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
B responde con un paquete ACK (acknowledgement/confirmación),
que también sirve para informar a A del puerto de la máquina B al
que tendrá que enviar los paquetes restantes.
La máquina origen envı́a paquetes de datos numerados a la máquina
destino, todos excepto el último conteniendo 512 bytes de datos. La
máquina 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 último. Si el tamaño del archivo transferido es
un múltiplo 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 método 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.
Instalación y configuración del servidor:
Para la instalación 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 configuración
sudo nano / etc / default / tftpd - hpa
El archivo de configuración tendrá el siguiente aspecto:
TFTP_USERNAME = ‘ ‘ tftp ’ ’
TFTP_ DIRECTO RY = ‘ ‘/ 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 almacenarán los ficheros que se suban a los PCs y que serán 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 /
Instalación y configuración del cliente:
Para la instalación del cliente TFTP se tiene que introducir la siguiente orden:
sudo apt - get install tftp - hpa
Posteriormente, se crea la carpeta, donde se almacenarán los archivos
recibidos mediante TFTP, y se cambian sus permisos
sudo mkdir / home / labredes / downloads / tftp
sudo chmod 777 / home / labredes / downloads / tftp
Ya están configurados los PCs para el intercambio de archivos mediante
TFTP, como solo se podrá obtener el archivo desde el servidor al cliente
TFTP, sólo se usarás la orden get.
Desde el cliente se teclea
tftp -v ‘‘ direccion del servidor ’ ’
tftp > get ‘‘ nombre del archivo ’ ’
tftp > quit
44
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
Con la opción -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 sólo
se usarán 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.
Creación de un nuevo formulario para la transferencia TFTP, con las
mismas opciones que para WGET.
Modificación de los archivos del núcleo de la aplicación, en este caso la
opción del switch es “tftp” y la función se llamará tftp($servidor, $archivo), para validar el formulario, crear el mensaje XML-RPC, mandarlo y recibir la respuesta.
La mayor variación con respecto al método de transferencia WGET
se observa en el código del servidor XML-RPC.
En la función tftp(self, servidor, archivo), del módulo configeth.py,
encargada de recibir el mensaje XML-RPC y devolver la respuesta,
no se genera ningún comando, si no que se llama directamente a la
función cliente tftp(servidor, archivo), del archivo commonfunc.py, con
la dirección del servidor y el nombre del archivo.
1
def
tftp ( self ,
servidor ,
2
”””
3
Hace un g e t de t f t p
4
”””
5
# Aqui s e almacenan
6
salida ,
al
archivo ) :
servidor
las
descargas
desde
el
servidor
s a l i d a e r r = commonfunc . c l i e n t e t f t p ( s e r v i d o r ,
archivo )
7
8
return
salida ,
salidaerr
Una vez en esta función, se procede a hacer la tarea de transferencia
3.4. OPERACIONES CON ARCHIVOS
1
2
def
c l i e n t e t f t p ( servidor ,
45
archivo ) :
salida = [ ]
3
salidaerr = []
4
try :
5
comando = ’ t f t p −v
6
p = s u b p r o c e s s . Popen ( comando ,
PIPE ,
’ + str ( servidor )
s t d i n=s u b p r o c e s s . PIPE ,
s t d e r r=s u b p r o c e s s . PIPE ,
s t d o u t=s u b p r o c e s s .
s h e l l =True )
7
comando = ’ g e t
8
c o m a n d o s t d o u t = p . communicate ( i n p u t=comando ) [ 0 ]
’ + str ( archivo )
9
10
if
comando stdout :
11
comando stdout = comando stdout . r e p l a c e ( ’ t f t p ’ , ’
12
s a l i d a . append ( c o m a n d o s t d o u t )
13
’)
else :
14
s a l i d a . append ( ’NONE’ )
15
16
w h i l e ( o s . path . e x i s t s ( ’/ % s ’
17
%(s t r ( a r c h i v o ) ) )==F a l s e ) :
time . s l e e p ( 1 )
18
19
comando = ’mv / %s /home/ l a b r e d e s / d o w n l o a d s / t f t p/ %s ’
%(s t r ( a r c h i v o ) ,
str
( archivo ) )
20
salida2 ,
s a l i d a e r r = i n v o c a ( comando )
21
22
w h i l e ( o s . path . e x i s t s ( ’ / home/ l a b r e d e s / d o w n l o a d s / t f t p/ %s ’
%(s t r ( a r c h i v o ) )
)==F a l s e ) :
23
time . s l e e p ( 1 )
24
25
if
26
comando = ’ rm −r /home/ l a b r e d e s / d o w n l o a d s / t f t p/ %s ’
comando stdout . count (” Error code 1”) :
%(s t r ( a r c h i v o ) )
27
28
29
30
31
salida2 ,
s a l i d a e r r = i n v o c a ( comando )
e x c e p t E x c e p t i o n , why :
s a l i d a e r r = [ s t r ( Exception ) ,
return
salida ,
s t r ( why ) ]
salidaerr
En esta función se crea un proceso TFTP para conectarse a la dirección del servidor, posteriormente se solicita el archivo especificado
y se guardan las estadı́sticas de la transferencia. Como el archivo se
guarda por defecto en la carpeta raı́z, hay que mover dicho archivo a la
carpeta que se ha creado para las descargas TFTP, /home/labredes/downloads/tftp/. Si todo va bien se devuelve la respuesta al
módulo tftp de configeth.py para que la mande a la aplicación, si hay
un error se tiene que borrar el archivo creado en /home/labredes/downloads/tftp/, ya que éste estará vacı́o, y mandar el mensaje de
error.
46
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
3.5.
Capturas de tráfico
Un analizador de tráfico en red es una herramienta para desarrollar y
depurar protocolos y aplicaciones de red. Permite al ordenador capturar
diversas tramas de red para analizarlas, ya sea en tiempo real o después
de haberlas capturado. Por analizar se entiende que el programa puede reconocer que la trama capturada pertenece a un protocolo concreto (TCP,
ICMP...) y mostrar al usuario la información decodificada. De esta forma, el
usuario puede ver todo aquello que en un momento concreto está circulando
por la red que se está analizando. Estos analizadores son muy útiles para
experimentar o comprobar cómo funcionan ciertos protocolos de red, si bien
su estudio puede resultar poco ameno, sobre todo si se limita a la estructura
y funcionalidad de las unidades de datos que intercambian. También, gracias a estos analizadores, se puede ver la relación que hay entre diferentes
protocolos, para ası́, comprender mejor su funcionamiento.
Existen muchos analizadores de tráfico en red, quizás el más conocido
pueda ser Wireshark, pero para nuestro sistema utilizaremos TCPDump,
ya que no tiene interfaz de usuario, y para iniciarlo de forma remota es mucho
más sencillo mediante la lı́nea de comandos.
Para utilizar TCPDump en los PCs de las subredes, éste debe ser instalado en cada equipo
sudo apt - get install tcpdump
Posteriormente se creará una carpeta donde serán almacenadas la captura que haga cada usuario
sudo mkdir / home / labredes / capturas
sudo chmod 777 / home / labredes / capturas
TCPDump puede ser ejecutado con múltiples opciones, pero para esta
aplicación web, únicamente se necesita que se inicie la captura, escribiendo
3.5. CAPTURAS DE TRÁFICO
47
la salida en un archivo, y posteriormente finalizar dicha captura.
tcpdump -i eth0 -w / home / labredes / capturas / ‘ ‘ nombre_captura ’ ’. pcap
Con la opción -i eth0, sólo se captura el tráfico por la interfaz eth0, la
interfaz de usuario, que es la que se utiliza para conectar las subredes de
prácticas, dejando fuera la red de administración.
Con la opción -w se guarda la captura en el fichero indicado.
Para finalizar la captura se debe obtener el número del subproceso asociado a TCPDump y posteriormente finalizarlo.
sudo ps aux
sudo kill ‘‘ subproceso tcpdump ’ ’
Una vez se tiene la captura, se puede visualizar con el mismo TCPDump
tcpdump -r ‘‘ nombre de la captura ’ ’. pcap
O se puede abrir dicha captura con otro analizador de tráfico, como
Wireshark, que tiene interfaz gráfica y es más cómodo para el análisis.
3.5.1.
Inclusión de esta tarea en el sistema
Como en todas las modificaciones anteriores, para esta tarea se han tenido que añadir distintas funciones a los códigos de la aplicación.
En el servidor web:
Se ha añadido el formulario para la realización de la captura, modificando los archivos aplicacion.php e interfaz.js. Con dicho formulario
se puede iniciar, finalizar u obtener una captura en el PC seleccionado.
Se ha tenido que crear el archivo des cap.php mediante el cual se descarga la captura desde el servidor web al PC del usuario.
48
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
Las capturas descargadas al servidor web, desde los PCs de las subredes se almacenan en la carpeta /home/labredes/capturas/ con el
nombre del usuario que la realiza.
En el núcleo de la aplicación web se han modificado los archivos aplicacion.php y red.php de la carpeta /admin/. En aplicacion.php se ha
añadido el caso “captura” donde se valida el formulario, se llama a la
función captura($accion, $usuario) de la clase PC del archivo red.php,
creada para esta tarea, y, una vez realizada la tarea, se procesa la
respuesta del servidor XML-RPC. Para procesar esta respuesta se ha
generado un nuevo array llamado stdfich, por donde se recibirá el fichero de la captura, codificado en base64, en el caso de que la acción a
realizar sea la de descargar la captura, que posteriormente será decodificado y guardado en la carpeta /home/labredes/capturas/ con
el nombre del usuario que realiza la captura.
En la función captura($accion, $usuario) de la clase PC del archivo
red.php, se crea el mensaje XML-RPC con la acción a realizar, iniciar,
finalizar u obtener la captura, más el nombre de la captura, y se envı́a al
PC de la subred correspondiente. Posteriormente se recibe la respuesta
y se devuelve para que sea procesada.
En los PCs de las subredes
Se ha tenido que definir una nueva función, captura(self, accion, usuario), en el archivo configeth.py para procesar el mensaje XML-RPC de
la captura
1
def
captura ( s e l f ,
accion ,
2
”””
3
Hace una c a p t u r a de
4
”””
5
# Iniciar
6
if
usuario ) :
trafico
una c a p t u r a
a c c i o n == ’ I n i c i a r ’ :
7
nombre = s t r ( u s u a r i o )
8
comando = ’ tcpdump − i
nombre )
e t h 0 −w /home/ l a b r e d e s / c a p t u r a s/ %s . pcap &’ %(
3.5. CAPTURAS DE TRÁFICO
9
10
salida ,
return
49
s a l i d a e r r = commonfunc . c a p t u r a ( comando )
salida ,
salidaerr
11
12
13
# F i n a l i z a r una c a p t u r a
elif
a c c i o n == ’ F i n a l i z a r ’ :
14
salida ,
15
return
s a l i d a e r r = commonfunc . c a p t u r a 2 ( )
salida ,
salidaerr
16
17
18
# Obtener
la
captura
d e l PC de l a
subred
else :
19
salida ,
20
return
salidaerr ,
salida ,
f i c h e r o x m l = commonfunc . c a p t u r a 3 ( u s u a r i o )
salidaerr ,
ficheroxml
Se puede observar que dependiendo de la acción que se vaya a realizar, se llama a una función distinta del archivo commonfunc.py. Estas
funciones son captura(comando), captura2() y captura3(usuario). Una
vez realizada la tarea de estas funciones se devuelve la respuesta a la
aplicación.
En captura(comando), se comprueba si hay alguna captura iniciada
por el mismo usuario, de no ser ası́ se inicia un nuevo subproceso
TCPdump para comenzar la captura, si ya hay una captura iniciada
se avisa al usuario con un mensaje.
En captura2(), siempre que la captura esté iniciada, se obtiene el nombre del subproceso TCPdump y se finaliza, dando ası́ por concluida
la captura.
En captura3(usuario), si existe una captura del usuario y ésta está finalizada, se codifica en base64 el fichero de la captura y se manda a
la aplicación web. Una vez mandada, la captura se borra del PC de la
subred.
Además de borrarse cuando es enviada, las capturas se borran al iniciar, finalizar o reiniciar la aplicación. Hay que tener en cuenta, que
cada usuario no puede hacer más de una captura de forma simultánea,
y ésta siempre se almacena con el mismo nombre, ası́ que un mismo
usuario sólo tiene acceso a la última captura realizada.
50
CAPÍTULO 3. MEJORAS IMPLEMENTADAS EN EL SISTEMA
3.6.
Resumen de las mejoras implementadas
1. Se ha añadido el Sábado y el Domingo a los dı́as disponibles para realizar las prácticas, el administrador es el que decidirá si quiere habilitar
turnos en estos dı́as
2. Gracias al comando configure se podrán configurar los conmutadores
lı́nea a lı́nea y mediante el comando show se podrá consultar en todo
momento el estado de los conmutadores.
Además el uso del carácter ‘?’ como argumento de los comandos, tanto
para show como para configure, permite conocer los posibles valores
que siguen a ese comando.
3. Se puede conocer tanto la información de las configuraciones de red
como las tablas de rutas de cada uno de los equipos de la red.
4. Se pueden realizar operaciones con archivos en la subred de prácticas,
se pueden subir archivos a los equipos, ver los archivos almacenados y
borrarlos.
Además se pueden intercambiar los archivos entre los equipos mediante
los protocolos HTTP (sobre TCP) y TFTP (sobre UDP).
5. Para analizar el tráfico generado entre los equipos se permite la realización de capturas de ese tráfico.
Descargar