Internet Relay Chat

Introdução

Componentes

Protocolo Utilizado

Mensagens

Comandos

Obtenção do software


Por: Cristiano André da Costa

Introdução

O Internet Relay Chat, ou IRC como é mais conhecido, é um serviço da Internet utilizado para teleconferência em modo texto. Ele é constituído de servidores e clientes, de maneira que cada servidor contém informações sobre todo o sistema (clientes, usuários, outros servidores, etc.).

O cliente é implementado em sockets e normalmente utiliza as portas 6666, 6667 ou 6668 para comunicar-se com o servidor. Esta comunicação ocorre sobre TCP/IP, utilizando o protocolo TCP na camada de rede.

O protocolo do Internet Relay Chat é baseado em texto (caracteres ASCII) e está descrito no RFC 1459 .

Componentes

Os principais componentes do Internet Relay Chat são:

A seguir cada um destes componentes é descrito:

Clientes

Um cliente é qualquer conexão a um servidor, que não seja um servidor. Eles são diferenciados através de um apelido (ou nickname) único com tamanho máximo de nove caracteres. Além disso, todos os servidores devem ter as seguintes informações sobre os clientes: o host do cliente, o seu username e o nome do servidor ao qual este está conectado.

Servidores

Os Servidores formam o backbone do IRC e são os pontos de conexão para outros servidores e pra clientes. A configuração de uma rede IRC assemelha-se a uma spanning tree, onde cada servidor age como um nodo central para o resto da rede que ele está conectado.

Operadores

Os operadores são uma classe especial de clientes capazes de realizarem funções gerais de manutenção na rede IRC. A principal função dos operadores é desconectar e reconectar servidores, para previnir o mau uso de roteamento. Além desta, os operadores podem realizar outras operações, como por exemplo, desconectar usuários.

Canais

Um canal é um grupo formado por um ou mais clientes que irá receber mensagens endereçadas a este canal. O canal é criado implicitamente quando o primeiro cliente junta-se a este canal (comando join). De forma análoga o canal deixa de existir quando o último cliente o deixa (comando part).

Nomes de canais são cadeias de caracteres iniciadas com '&' ou '#' e de comprimento até 200 caracteres. Além disso o nome de um canal não pode conter nenhum espaço, ^G ou vírgula.

Operadores de Canais

Operadores de canais são clientes que são considerados donos de determinados canais. Quando um novo canal é criado, o criador é o operador deste canal. Um operador de canal pode remover clientes deste, mudar o modo do canal, tornar outros clientes operadores deste canal, mudar o tópico do canal, etc. O operador de canal é identificado através do símbolo '@' que precedo o nickname do cliente.

Protocolo Utilizado

O protocolo usado pelo Internet Relay Chat é baseado em troca de mensagens constituídas de até 512 octetos (8 caracteres ASCII quaisquer). Estas mensagens são assíncronas e não existe uma garantia de resposta. O protocolo entre servidores é o mesmo do que entre clientes e servidores, porém existem restrições para o segundo tipo de conexão (algumas mensagens não são aceitas de clientes).

Mensagens

As mensagens utilizadas pelo IRC são constituídas de três partes, separadas por espaços:
prefixo (opcional)
O prefixo é utilizado em algumas situações para indicar quem é o servidor ou cliente de origem.
comando
É uma string ou conjunto de três números que indica um comando ou uma resposta numérica.
parâmetros de comando
Até 15 argumentos que podem ser enviados durante as mensagens. O último argumento se iniciado por ':' pode conter espaços.

Abaixo é apresentada a BNF das mensagens utilizados no Internet Relay Protocol:

<message>	::= [':' <prefix> <SPACE>] <command> <params> <crlf>
<prefix>	::= <servername> | <nick> ['!' <user>] ['@' <host>]
<command>	::= <letter> {<letter>} | <number> <number> <number>
<params>	::= <SPACE> [':' <trailing> | <middle> <params>]
<middle>	::= <qualquer seqüência de octetos, não incluindo SPACE, 	        
                   NUL, CR ou LF, o primeiro caracter não pode ser ':'>
<trailing>	::= <qualquer seqüência de octetos, sem NUL, CR ou LF>
<SPACE>		::= ' ' {' '}
<crlf>		::= CR LF
<servername>	::= <host>
<host>		::= ver RFC 952 para detalhes em nomes de hosts permitos
<nick>		::= <letter> { <letter> | <number> | <special> }
<user>		::= <nonwhite> { <nonwhite> }
<letter>	::= 'a' ... 'z' | 'A' ... 'Z'
<number>	::= '0' ... '9'
<special>	::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'
<nonwhite>	::= <qualquer caracter menos SPACE, NUL, CR e LF>

Exemplo de mensagem:

:cris USER cac espora tolsun :Cristiano Costa

Respostas numéricas são usadas para erros e respostas normais.

Exemplo de resposta numérica:

401 pedro :No such nick/channel

Comandos

Devido a grande quantidade de comandos que o protocolo do IRC possui, aqui será apresentada apenas uma breve descrição destes.

Comandos para registro de conexão

PASS
Utilizado para definir uma senha de conexão.
NICK
Utilizado para dar a um usuário um nickname ou para mudá-lo.
USER
Serve para especificar dados do cliente para o servidor no início de uma conexão.
SERVER
Esta mensagem diz a um servidor que no outro lado da nova conexão está outro servidor.
OPER
Comando utilizado por um usuário normal para obter privilégios de operador.
QUIT
Uma sessão de cliente é terminada com uma mensagem deste tipo.
SQUIT
Este comando é necessário para informar sobre servidores que estão deixando a rede IRC.

Comandos para operações com canais

JOIN
Comando usado por um cliente para começar a escutar um canal específico.
PART
Remove um cliente de um canal.
MODE
Altera o modo de usuários e canais.
TOPIC
Altera o tópico de um canal.
NAMES
Lista todos os nicknames em um determinado canal.
LIST
Informa todos os canais e seus tópicos.
INVITE
Comando utilizado para convidar usuários para entrar em um canal.
KICK
Remove um usuário de um canal.

Comandos e Consultas de Servidores

VERSION
Retorna a versão do servidor.
STATS
Mostra estatísticas do servidor indicado.
LINKS
Permite com que o usuário liste todos os servidores que são conhecidos por determinado servidor.
TIME
Mostra a hora local de um servidor.
CONNECT
Estabelece uma conexão entre dois servidores.
TRACE
O comando TRACE é utilizado para achar rotas a um servidor específico.
ADMIN
Usado para descobrir um administrador de um servidor.
INFO
Retorna informações que descrevem um servidor.

Comandos de envio de mensagens

PRIVMSG
Envia uma mensagem entre dois usuários.
NOTICE
Envia uma mensagem para um canal.

Consultas de Usuários

WHO
Utilizado por um cliente para retornar informações sobre clientes, baseados em uma máscara.
WHOIS
Retorna informações específicas sobre um cliente.
WHOWAS
Informa sobre um nickname que não existe mais.

Outros Comandos

KILL
Fecha uma conexão cliente-servidor.
PING
Testar se um cliente está ativo.
PONG
Resposta a uma mensagem com PING.
ERROR
Usado pelos servidores para reportar um erro sério ou fatal.
Existem outros comandos que não estão listados aqui por serem opcionais ou por não terem padronização na data em que este documento foi criado.


Para saber mais... consultar o RFC 1459.


Outros protocolos ...