Internet Relay Chat
Por: Cristiano André da Costa
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 .
Os principais componentes do Internet Relay Chat são:
- Clientes
- Servidores
- Operadores
- Canais
- Operadores de Canais
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 ...