Universidad Carlos III de Madrid Departamento de Ingeniería Telemática

Práctica Redes de Ordenadores II: Implementación de un cliente IRC

 INTRODUCCIÓN

Esta práctica consiste en desarrollar un cliente del protocolo IRC. El protocolo IRC, Internet Relay Chat, es un protocolo estándar del IETF para comunicación en tiempo real basado en texto, que permite a los usuarios unirse y comunicarse en grupos de discusión, llamados canales, y además permite también, entre otras cosas, mensajes privados entre dos usuarios y transferencia de ficheros. El sistema IRC, inspirado en otro sistema llamado Bitnet, fue creado por Jarkko Okarinen en 1988. Ha evolucionado y se ha complementado con nuevas capacidades hasta nuestros días, como cifrado, transferencia de ficheros, comandos adicionales, etc... y aunque su uso ha decaído debido al uso de las redes sociales y otros sistemas de mensajería instantánea, se sigue usando en entornos de desarrollo de software y otros ámbitos.

La práctica debe desarrollarse en lenguaje C ó lenguaje C++ (consulte las aqui las librerías que se permiten usar) sobre sistema operativo Linux y debe funcionar en los ordenadores de los laboratorios docentes de Ingeniería Telemática, donde se realizará la corrección presencial. Recordad que para poder trabajar en estos laboratorios debeis tener una cuenta abierta en el departamento, en la página de planificación de la asignatura encontrareis información sobre este procedimiento.

Existen varias máquinas a las que os podeis conectar de forma remota (ssh): monitor01.lab.it.uc3m.es a monitor06.lab.it.uc3m.es. Detalles sobre cómo trabajar remotamente se pueden encontrar aqui.

 OBJETIVOS

Los objetivos que se pretenden alcanzar con el desarrollo de esta práctica son los siguientes:

  1. Enfrentarse a la implementación de un protocolo real, partiendo de su especificación original (RFC).
  2. Conocer protocolos de comunicación en tiempo real basados en texto.
  3. Reforzar conocimientos teóricos de algunos de los protocolos que hemos visto en la asignatura.
  4. Adquirir conocimientos de programación de sockets.
 ENUNCIADO

El protocolo IRC está especificado a través de una serie de documentos estándar del IETF (RFC 2810, RFC 2812 y otros; véase sección recursos). Es necesario desarrollar un cliente IRC que cumpla con las especificaciones de dichos documentos y ciertas simplificaciones descritas abajo. NO hay que desarrollar extensiones para transferencia de ficheros (DCC, CTCP) como en años anteriores.

Tampoco hay que desarrollar un servidor IRC, pero sí hay que instalarse uno en la cuenta de cada alumno para hacer pruebas con el cliente. Se ha elegido el servidor ngircd por su amplia documentación, simplicidad y facilidad de uso. Instrucciones de cómo instalar el servidor ngircd se pueden encontrar aqui:



Se pide por tanto implementar un cliente IRC que cumpla con las especificaciones del estándar IRC (veánse RFC) y con las siguientes consideraciones:

  • Ejecutable y parámetros: el ejecutable se llamará ircc y debe soportar los parámetros que se indican a continuación. Si algunos no se proporcionan, el programa hará automáticamente lo posible y lo que no pueda por falta de datos, esperará a los comandos interactivos del usuario. Véase la página de manual de ircc para detalles.

    ircc [-s host:port] [-n nickname] [-c channel] [-d]

    • -s server:port: nombre y puerto del servidor IRC.
    • -n nickname: nick del usuario.
    • -c channel: canal al que se conecta el usuario.
    • -d: modo depuración. Mostrará trazas adicionales para la depuración del programa.

  • Ejemplos y trazas: véase también página de manual de ircc.

  • Notas y simplificaciones a la práctica:

    1. Todos los mensajes deben mostrarse por la salida estándar, excepto los mensajes de error, que deben mostrarse por la salida de error estándar.

    2. No es necesario implementar todos los mensajes especificados en la RFC 2812. Al menos los siguientes sí son obligatorios para aprobar la práctica: nick (3.1.2), user (3.1.3), quit (3.1.7), join (3.2.1), part (3.2.2), list (3.2.6), mensajes privados (3.3.1), who (3.6.1), ping (3.7.2), pong (3.7.3) y el mensaje necesario para la implementación del comando /info.

    3. Es obligatorio implementar un nuevo comando /info con información sobre usuarios conectados a un canal, como su dirección IP (obligatorio) u otros detalles.

    4. Los clientes IRC sólo se conectarán a un canal (no deberán conectarse a varios canales simultáneamente).

    5. Es recomendable probar con un cliente libre, como ircII, BitchX, Chatzilla ó cualquier otro, realizar capturas con wireshark y verificar los mensajes cliente-servidor intercambiados. Se puede también probar con telnet (telnet nombre_maquina numero_puerto) ya que el protocolo IRC es textual. Note que los clientes ircII y BitchX están instalados en los laboratorios, no es necesario que los instale por su cuenta.

    6. Es obligatoria la lectura de las FAQ para una correcta interpretación de la práctica.

    7. Lea los criterios de evaluación indicados en el apartado siguiente.
 EVALUACIÓN

La evaluación de la práctica se realizará de forma presencial y su nota tendrá un peso del 40% sobre la nota final de la asignatura. Para que se haga media con el examen teórico debe obtenerse una nota superior o igual a 5. La nota de la práctica, siempre que esté aprobada, se mantendrá para la convocatoria de Septiembre de 2013. Además, en caso de aprobarse en la convocatoria de Febrero, esta nota podrá conservarse hasta el siguiente curso académico 2013/14.

Fechas importantes:

  • 1 de Septiembre de 2013: Convocatoria anticipada. Entrega por Aula Global 2.

  • 4 de Septiembre de 2013: Convocatoria anticipada. Examen presencial en laboratorio.


Condiciones de entrega:
  • Se debe entregar un único fichero en formato zip. El nombre del fichero será groupXXX.zip, donde XXX será el número de vuestro grupo de prácticas, por ejemplo grupo101.zip

  • El fichero zip contendrá los siguientes ficheros:
    • Los ficheros .c, .cc y .h necesarios para generar el ejecutable de la práctica.
    • Un fichero Makefile.
    • Un fichero README con el nombre y correo de los integrantes del grupo y, de forma opcional, unos breves comentarios sobre la práctica: aspectos adicionales a los del enunciado que se implementen, o cualquier tema fuera de lo común que debamos tener en cuenta durante la corrección (el formato de este fichero es libre).

  • El zip y el Makefile deben ser tales que, habiendo copiado el zip a un directorio vacío, la siguiente secuencia de comandos genere un fichero binario ircc en ese mismo directorio listo para ejecutar:
    • unzip grupo101.zip
    • make

  • El programa no debe tener errores de compilación. Las condiciones obligatorias de compilación se pueden consultar en la FAQ.

  • Es recomendable que el ejecutable no tenga fugas de memoria. Se puede comprobar con valgrind (véanse la sección sobre valgrind en la FAQ para más detalles). Aunque no es obligatorio que la práctica esté libre de fugas de memoria, si limitará la nota máxima a un 7.
 RECURSOS Y ENLACES

Libros

  • W. R. Stevens: "Unix network programming".Volume 1.Networking APIs-Sockets and XTI (L/S 004.451.9 UNIX STE )

Información sobre sockets

RFC


Localización | Personal | Docencia | Investigación | Novedades | Intranet
inicio | mapa del web | contacta