Actualizado el 14-01-2007
versión para imprimir

DCC

DCC es una parte del protocolo CTCP, que permite establecer una conexion peer to peer entre dos ordenadores conectados a internet.

Los atractivos de la conexión DCC se resumen en que se añade una capa de seguridad a la transacción (la red de servidores irc solo es utilizada, a lo sumo, para establecer la conexión inicial entre ordenadores, el resto es conexion directa ordenador a ordenador).

La conexión es además mucho mas eficiente, ya que los datos no necesitan ser pasados de servidor a servidor, no hay splits, y no existen restricciones de velocidad de transmisión, lo que implica mayor velocidad y estabilidad.

El protocolo DCC permite básicamente entablar conversaciones peer to peer (DCC CHAT) o bien la transmisión directa de ficheros (DCC SEND).

Para establecer una conexión DCC es preciso un reconocimiento entre usuarios: una invitación a la apertura de conexión y una aceptación de la misma:

  1. El cliente que invita a abrir la conexión DCC abre un puerto TCP de su ordenador que queda a la escucha.
  2. A continuación envía un mensaje CTCP a la máquina de destino. Este mensaje incluye la dirección IP del invitante, y el puerto a la escucha, asi como información del tipo de sesión DCC que se propone (chat o transmisión de ficheros, y en este caso, el nombre del fichero y su tamaño).
  3. Si la máquina de destino acepta la sesión, intenta abrir una conexión utilizando para ello los datos facilitados en la invitación (IP, puerto a la escucha, nombre de archivo)

Lo importante a retener aqui es que la conexión efectiva se hace desde el ordenador invitado al ordenador invitante.

La especificación básica DCC no obliga al cliente que cursa la invitación a comprobar que la conexión que se recibe en el puerto dejado a la escucha proviene precisamente del ordenador que ha sido invitado, siendo teóricamente posible que otro ordenador cualquiera (conociendo naturalmente la IP y puerto abierto del invitante) se conecte al mismo, lo que arroja algunas sombras sobre la tan publicitada mayor privacidad del DCC.

El único momento en que la red de servidores irc esta involucrada en una sesión DCC es cuando se cursa la invitación original, que se envia por un comando CTCP (PRIVMSG). Una vez aceptada, el resto de la conexión se establece ordenador a ordenador.

Una excepción al inicio de sesión mediante mensaje CTCP es cuando uno de los clientes dispone de un DCC SERVER. En este caso, un cliente puede conectar directamente al mismo, sin necesidad de que ninguno de los dos esten en una red irc.

El protocolo DCC establece la precaución de que el cliente invitado a la sesión no debe aceptarla automáticamente. Sin embargo algunos programas clientes vienen con opciones Auto-Get que permiten dicha aceptación automática (lo que es muy poco recomendable)

Servicios DCC

Segun hemos visto, los servicios posibles con DCC son chat, envio de ficheros y DCC server.

El DCC server tiene alguna similitud con un servidor FTP ya que el cliente que se conecta puede examinar y descargar una serie de ficheros almacenados en el servidor.

DCC CHAT: en una conexión DCC chat el texto se envia línea por línea. La sesión termina cuando cualquiera de los programas cliente envia la señal DCC CLOSE.

DCC FILE: conexión DCC para transmisión de ficheros. A diferencia del protocolo FTP, no se envia una corriente ininterrumpida de datos, sino que se fragmenta el archivo en paquetes de bytes. Sobre esto nos extenderemos mas adelante. Añadir ahora que para asegurar la integridad de la transmisión, el cliente receptor reconoce la entrega enviando un mensaje al ordenador remisor con el numero de bytes recibidos. El remisor debe suspender el envio de nuevos paquetes mientras no tenga confirmación de entrega de los enviados. Tampoco puede cerrar la conexión hasta que no se haya confirmado la entrega del ultimo paquete.

Sobre DCC File server hablaremos mas adelante

Algunas opciones

/DCC LIST muestra las conexiones DCC abiertas indicando su tipo (chat, send) nick, estado de la conexion y otra información asociada.

DCC CLOSE tipo nick argumentos_opcionales cierra la conexión. Si no se especifican argumentos, se cierra la conexión mas antigua del tipo especificado.

DCC RENAME nick nombre_archivo nuevonombrearchivo
DCC RENAME -chat nombre_conexion nuevo nombre conexion

En el primer caso cambiamos el nombre del archivo que se nos ofrece antes de aceptar el envio. En el segundo caso, cambiamos el nombre de una conexion DCC Chat.

DCC GET nick nombre_archivo es el comando para aceptar la transferencia de un fichero. Si no se especifica nombre_archivo, se aceptará el primer fichero ofrecido por nick. El comando DCC GET debe ir precedido de una oferta DCC SEND.

DCC SEND ofrece la transmisión de un archivo

DCC CHAT NICK ofrece el inicio de una sesion de chat DCC. El cliente invitado debe responder con el comando DCC CHAT.

DCC resume

Si establecemos una sesion DCC SEND para enviar un fichero que ya existe en el ordenador de destino, el programa cliente debe mostrar una advertencia, y la opción de sobreescribir el fichero, renombrarlo o en algunos casos reanudar una transferencia interrumpida.

El protocolo DCC resume no es totalmente standar, siendo instaurado por el programa mirc y por algunos otros muy difundidos, pero no forma parte del protocolo original.

Si ofrecido un archivo el cliente de destino opta por resume, el fichero no se sobreescribe, sino que se añade al final del mismo la parte que faltaba por recibir

En estos casos, el programa cliente de destino en lugar de enviar un comando DCC GET, envia un mensaje de aceptación indicando la posición final de su fichero, es decir, el punto donde quedó interrumpida la transmisión, devolviendo el programa cliente invitante otro mensaje con la misma información, como reconocimiento. A continuación, el cliente destinatario abre una conexion al cliente invitante, que comienza la transmisión del fichero desde la posición solicitada.

Problemas con DCC

Por la mecánica de la conexión, lo mas probable es que cualquier error de conexión esté causado por el primer mensaje (de invitacion), posiblemente porque la información dada al invitado sobre numero IP y puerto abierto no sea correcta, o porque ese puerto no esté realmente abierto.

La sencillez del protocolo (uno de los mas antiguos) lleva consigo a veces imprecisión al establecer la conexión, ya que los datos precisos para establecer la misma no se negocian entre los dos ordenadores (handshaking) sino que se remiten de uno a otro dentro de un paquete de datos. Esto sucede especialmente cuando la IP del invitante se encuentra 'protegida' o es una IP privada, como sucede si el ordenador está en una subred NAT: por ejemplo cuando el ordenador se conecta a internet a traves de un router: la IP pública es la del router, distinta de la IP (privada) del ordenador.

Soluciones

Si el problema es el descrito, la solución pasa por establecer los parámetros correctos en los apartados 'localhost' y 'IP' del ordenador invitante. Estos son los pasos a seguir en mirc, que deberas adaptar en su caso al programa que estes usando:

  • Desconecta el ordenador de la red irc
  • Borra la información que aparezca en Archivo -> Opciones -> Local Info en las casillas 'Local Host' y 'Direccion IP'
  • Selecciona 'Al conectar usar siempre LocalHost' y 'Direccion IP'
  • Marca Método 'Normal'
  • OK para aceptar los cambios y reconecta a la red irc

Con el método normal mirc obtiene la información necesaria para los campos localhost y Ip de tu propio ordenador. Con el método server, obtiene los datos del server irc al que estes conectado.

Si esto no funciona, puedes probar distintos parámetros en 'localhost' o 'IP' hasta dar con los adecuados.

Otro parámetro a revisar si aun asi no consigues establecer la conexion DCC es el timeout (Archivo -> Opciones -> DCC -> Opciones, y alli 'Cerrar a los segundos' 'Enviar/Transferir'), ya que puedes probar con valores superiores, aunque los establecidos por defecto, 60 segundos para DCC Chat y 120 para DCC Send, son los recomendados.

Por supuesto, si nada de esto funciona, puede suceder que exista un filtro fuera de tu control, por ejemplo si tu PC esta detras de un proxy. La única solución en tal caso es pedir ayuda al administrador del filtro, y esperar que sea razonable.

localinfo

En las versiones mirc posteriores a 5.71 tenemos disponible un comando llamado localinfo que comprueba y corrige tu configuración. Su sintaxis es:

/localinfo -uh [host ip]

El modificador -u ejecuta un comando /userhost y el modificador -h sirve para ordenar un lookup normal

Otras opciones: con el comando /sreq puedes configurar el comportamiento de tu programa irc cuando reciba una oferta DCC SEND (oferta de fichero). Si lo ejecutas sin parámetros, aparecera un mensaje en pantalla recordandote tus opciones de aceptación DCC actuales. Los parametros admisibles son /sreq [ask | auto | ignore], es decir, preguntar en cada caso si se acepta la conexión, aceptar invitaciones DCC automaticamente o rechazar todas.

/creq es un comando análogo al anterior, y con las mismos argumentos, para el caso de las peticiones de DCC CHAT:

Paquetes ...

Mediante el protocolo DCC, el envio de archivos se hace mediante la fragmentación en paquetes de bytes, siendo el tamaño admisible de 512 a 8192 (en la especificación inicial se recomendaba un tamaño de 1024 bytes. En condiciones de mala conexión, es mejor especificar un tamaño pequeño).

Puedes especificar el tamaño que desees con el comando /dcc packetsize nnnn siendo nnnn el nuevo tamaño del paquete.

El comando /fsend te permite habilitar el modo fast send que debería acelerar la velocidad de transmisión.

El comando /pump, mítico para los mas viejos del irc, permite enviar nnnn bytes de datos sin esperar a que el ordenador de destino compruebe la recepción de los anteriores. Con las versiones mas recientes de mirc solo puedes ejecutar este comando (con la sintaxis /pdcc) pero no indicar el número de bytes.

DCC SERVER

Muchos programas irc, como mirc, tienen la posibilidad adicional de emular pequeños servidores de ficheros ftp.

Esta opción vendrá desactivada por defecto. En Mirc puedes activarla en Opciones -> DCC -> Activar Servidor DCC.

Si activas tu servidor DCC, dejas abierto un puerto adicional a la escucha (tipicamente el 59). Puedes restringir tu servicio DCC a sesiones de transmisiones de archivo, de chat o ambas.

Ademas de especificar que carpetas de tu disco duro deseas hacer accesibles, puedes especificar el nick de la persona autorizada a conectar, asi como el numero de transmisiones simultaneas admitidas.

El visitante de tu servidor tiene una serie de opciones restringidas por razones de seguridad: puede examinar los ficheros existentes en las carpetas publicas, leer archivos y bajar archivos. No puede borrar archivos ni subirlos a tu sistema.

Seguridad y DCC

Todos los consejos genericos acerca de seguridad en internet son plenamente aplicables a las sesiones DCC en cuanto pueden implicar admisión de ficheros en tu sistema. Insistir una vez mas en que no debes aceptar ficheros de personas que no sean 100% de tu confianza. Incluso a estas personas debes preguntarles si ellos estan a su vez seguros de la inocuidad del archivo. Puede suceder que tengan un virus que se esté auto-enviando a todos los que comparten un canal, sin ellos saberlo.

Por supuesto, * nunca * configures tu programa irc en modo de aceptación automática de archivos, es la forma mas rápida de acabar con un virus.

Recientemente redes de irc como hispano.org han establecido sistemas de IP virtual, de forma que el resto de usuarios no pueden saber tu IP real al conectarte a la red. Esta iniciativa ha eliminado en un gran porcentaje las guerras irc a base de nukeos y demás, y supone una importante garantía adicional de privacidad. Sin embargo, tienes que tener en cuenta que en el momento que invitas a otra persona a abrir una sesión DCC (Chat o Ftp) la persona invitada puede ver tu IP real, quedandote sin la protección de la IP virtual. (Por las razones que ya hemos explicado de la forma de establecerse la conexión, la persona invitante, en cambio, no 've' la IP real del invitado).

This site powered by Phorum.