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.