IRC Daemon (IRCd)


Introdução
Demasiadas vezes os utilizadores não percebem a origem dos comandos que executam. E é na verdade bem compreensível que assim aconteça. Primeiro porque os IRC Daemons vão além do protocolo de IRC; segundo porque os clientes de irc possuem os próprios comandos, nomeadamente o mIRC que permite uma variadíssima quantidade de comandos estranhos ao servidor (ircd) e por último, porque os clientes estabeleceram novos protocolos entre si para comunicação sem utilizar o servidor (DCC por exemplo).

E outras perguntas podem ser feitas: o que é um IRCd? Quais os comandos do Protocolo de IRC? Como é que se estamos conectados em servidores diferentes não podemos usar nicks iguais?

Tudo isso terá resposta neste tutorial!


IRC Daemon (IRCd)
Um IRC Daemon (IRCd) é um programa que representa um SERVIDOR de IRC, isto é, implementa o PROTOCOLO DE IRC, permitindo assim que um número indeterminado de utilizadores - através dos clientes de IRC - se conectem e possam comunicar entre si.

Assim, o que permite funcionar o servidor uevora.ptnet.org é um IRC Daemon. Neste caso um IRC Daemon modificado e melhorado pela própria PTnet. Por detrás de cada servidor há um IRCd.

Por sua vez uma REDE DE IRC é um conjunto de IRC Daemons interligados. Para total compatibilidade não devem existir IRCd's diferentes dentro de uma rede. Mas uma Rede de IRC não pressupõe uma ligação HORIZONTAL entre os servidores (ircd's) que a constituem. Há sim ligações VERTICAIS E HORIZONTAIS. Assim, a HUB (por exemplo: hub.ptnet.org) é uma LIGAÇÃO PRIVILEGIADA, que atribui ao IRCd apontado como tal o estatuto de SERVIDOR MESTRE. A sua ligação com os outros ircd's é vertical, porque hierarquicamente superior. Os outros servidores também podem ser HUB's de outros. Os Servidores que não são HUB são LEAF!

Só esta estrutura em rede permite que se eu me conectar no uevora.ptnet.org e tu te conectares no nfsi.ptnet.org não possamos usar o mesmo nick. Se esses ircd's não estivessem ligados em rede, poderiamos usar o mesmo nick, porque não estavamos na mesma plataforma. Nem sequer poderiamos falar um com o outro. É o que acontece com o NETSPLIT (quando um servidor se deslinka da rede).

Faz /links para perceberes como estão dispostos os servidores na rede e para veres a versão do IRCd!

Um Servidor com muitos utilizadores significa um IRCd cheio de Conexões TCP/SSL abertas. Como imaginas a estabilidade necessária na máquina do IRCd é enorme. A plataforma Unix/Linux consegue essa estabilidade. Daí 90% dos IRCd's funcionarem apenas nessa plataforma.
A título de exemplo ficam aqui alguns IRCd's conhecidos:

Bahamut IRCd (IRCd da rede DALnet - Open Source)
Hybrid IRCd (Open Source)
Unreal IRCd (Open Source + Versão para Windows)

Para mais informações sobre o tema visita este SITE (ainda assim a informação nesse site não se encontra completa).


Protocolo de IRC
Em 1993 o autor do primeiro IRC Daemon, Jarkko Oikarinen, documentou o Protocolo do Internet Relay Chat.

Todas as noções e comandos básicos nascem com este protocolo: NICK, CHANNEL, IRC-OPERADORES (Opers), QUERY, BAN, KICK, UMODE, CHANMODE, QUIT, PRIVMSG, LINKS, LIST, TOPIC, INVITE, NAMES, WHOIS, WHO, etc

Contudo actualmente os IRCd's não se limitam aos Comandos do Protocolo. Possuem novas funcionalidades, alteraram outras, restringiram o acesso a outras. Cada IRCd possui as suas particularidades, e daí alguns comandos funcionarem numa rede e não funcionarem noutra.

Há portanto uma DECADÊNCIA do Protocolo.

Já se falou aqui do protocolo de IRC, principalmente na vertente Internet Relay Chat - Client + Channel Protocol. Ou seja, com tudo o que se relaciona com a ligação Servidor-Cliente-Utilizador e Utilizador-Cliente-Administração dos Canais.

Outra vertente há, porem, e talvez a mais problemática: Internet Relay Chat: Server Protocol. Ou seja, o modo como os servidores se interligam e todo o problema de compatibilidade que isso traz.

Relativamente a esta última vertente poucos são os IRCd que ainda utilizam este protocolo. Preferindo a utilização do TS3, TS5 e TS6. Não cabe neste tutorial a explicação desses protocolos, para mais informações acede aos links.


Comunicação e Comandos
Como sabes o Internet Relay Chat é uma plataforma de comunicação em tempo real e multi-pessoal. A conversação dá-se em público - nos CANAIS - ou em privado - No PVT (QUERY). Mas isto utilizando directamente o SERVIDOR (IRCd). No entanto, a partir da conexão na mesma rede, dois nicks podem comunicar apenas através de CLIENTE-para-CLIENTE- o DCC CHAT (/dcc chat nick e /msg =nick MENSAGEM [no mIRC]). É claro que para isso, ambos os clientes devem ter essa funcionalidade. Como sabes existem variados Clientes de IRC: mIRC, xchat, BitchX, irssi, etc

Em informática INFORMAÇÃO é muito mais do que notícias, novidades, cultura geral. INFORMAÇÃO é tudo o que é trocado entre utilizadores. A INFORMAÇÃO trocada através do IRCd é uma informação de TEXTO SIMPLES. Mas mais uma vez podes trocar outro tipo de informação com outros utilizadores do irc sem necessitar directamente do IRCd. Isso é possível através da comunicação CLIENTE-para-CLIENTE. Um exemplo é o DCC SEND.

Nesse caso a informação reveste a forma de FICHEIROS. Os utilizadores podem ENVIAR/RECEBER ficheiros uns dos outros. Como na situação anterior, nem todos os clientes de irc possuem essa funcionalidade, pelo que poderás não o conseguir fazer com um dos teus amigos.

Como vês o IRC é muito mais que ter um IRCd, muito mais que o mIRC! O IRC estrutura-se da seguinte maneira:

UTILIZADOR «--» CLIENTE DE IRC «--» SERVIDOR (IRCd)

UnDeRGoD «--» xchat «--» PTnet

mas como vimos há várias variantes e outras possibilidades:

SERVIDOR «--» UTILIZADOR «--» CLIENTE DE IRC «-- outro protocolo --» CLIENTE DE IRC «--» UTILIZADOR «--» MESMO SERVIDOR

PTnet «--» UnDeRGoD «--» xchat «-- DCC --» mIRC «--» ReAd «--» PTnet

Estás farto de ler sobre COMANDOS. Sobra uma explicação para a sua importância.

O Cliente de IRC e o SERVIDOR trocam informação automaticamente sem que muitas vezes te apercebas. Um exemplo de informação que é trocada com muita frequência é o PING? PONG! Mas o Cliente não te substitui em tudo. A grande maioria das vezes o cliente possui comandos simplificados, que ao executares vão ORDENAR ao Cliente de IRC que por sua vez envie um comando que o SERVIDOR entenda.

Por exemplo:

imagina que estás a utilizar o mIRC. Esse cliente tem um comando para mandar mensagem a todos os OPERADORES (@) de um canal: /omsg #CANAL MENSAGEM. Mas esse comando não é reconhecido pelo servidor, só pelo cliente. Ao fazeres /omsg #CANAL MENSAGEM estás a mandar o Cliente fazer um comando que o SERVIDOR entende: PRIVMSG @#CANAL :MENSAGEM.

Nem todos os clientes te facilitam a vida. Em muitos eles, e em algumas situações em todos és forçado a comunicar directamente com o SERVIDOR para fazeres o que pretendes. Nesse caso utilizas os comandos: /quote COMANDO ou /raw COMANDO.

Por exemplo:

Deves estar familiarizado com um comando que quase todos os clientes de irc possuem: o /NOTIFY. Mas o IRCd da PTnet suporta um comando que se chama WATCH. Tem a mesma funcionalidade, só que é muito mais completo e funciona independentemente do cliente que estiveres a usar.
Se fizeres /watch em alguns clientes podes não ter resposta. Mas se fizeres: /raw WATCH terás de certeza. Porque estás a comunicar DIRECTAMENTE com o Servidor, sem intervenção do Cliente.

Por fim existem comandos que são RESERVADOS dos Clientes de IRC. Não servem para comunicares com outros nem para comunicares com o servidor. Servem para configurares o próprio cliente. O seu GUI, as suas opções, etc.

Por exemplo:

Para colocares as horas a aparecerem antes das mensagens que são enviadas para todas as janelas, fazes: /timestamp -e on. Este comando só é reconhecido no mIRC. No xchat o comando já é diferente: /set stamp_text ON.


Conclusão
Termina assim este tutorial. Há muita informação para assimilar, e espero que seja da maior utilidade para perceberes como realmente funciona o IRC.

Qualquer dúvida, não hesites em perguntar no #PThelp!

UnDeRGoD