Différence entre un bot client et un bot de service

Article soumis par Averell le 01/08/02

Grosso modo, la différence flagrante entre un bot connecté en tant que simple client, et un bot de service, est la même qu'entre un être humain normal et Big Brother. Le socket client ne peut vous connaître que parce que vous communiquez avec lui, ou parce que vous vous manifestez sur un canal irc commun avec le sien. Le bot de service n'a pas besoin de cela pour savoir et épier tous vos moindres faits et gestes: il sait que vous existez au moment même où vous vous connectez au serveur, et il sait aussi quand vous vous déconnectez. Il sait, en gros, autant de choses que le serveur sur lequel vous êtes connecté!

A la différence d'un bot client, un service peut se présenter sous la forme de plusieurs bots (Exemple: le système Chanserv de Dalnet). Ces bots ne sont pas des sockets clients du serveur, ou d'un serveur en général.

Prenons un exemple: si vous vous connectez à un serveur Dalnet, vous recevrez très probablement un notice d'accueil d'un bot appelé Global, et ce, dès la connexion. Un socket client ne pourrait pas savoir quand vous vous connectez, sauf peut être s'il vous a notifié.

Si vous joignez un canal enregistré préalablement vide (vous en êtes donc le créateur puisqu'il n'existait pas avant votre arrivée), vous vous ferez très probablement déopper aussi sec par ChanServ, alors même que ChanServ n'était pas sur le canal. Comment a-t-il pu savoir que vous avez joint le canal en question à cet instant précis? Ceci, un socket (même ircop) ne pourrait pas le faire.

Un peu de technique

D'un point de vue technique, un service est un socket qui s'est authentifié au serveur d'une manière différente d'un client. On dit qu'il "linke". Ce socket peut s'être connecté sur le port client 6667, ou, dans le cas de certains serveurs (les serveur Undernet en particulier) sur un port différent (souvent 4400).

Pour rappel, lorsque vous vous connectez à un serveur, vous envoyez les deux instructions suivantes:

NICK Votre_nick
USER userid param2 param3 :Bla bla bla bla...
le serveur récupère aussi votre adresse ip (par le système général de socket) et la résoud pour obtenir votre host (Ex: 213.36.131.157 devient dyn-213-36-131-157.ppp.libertysurf.fr, en tout cas, c'était le cas avant que Tiscali ne vienne fourrer ses pattes chez ce provider).

Lorsqu'un service se connecte, il envoie au serveur les deux instructions suivantes:

PASS :Un_mot_de_passe
SERVER Nom-du-Service :Bla bla bla
Si le serveur accepte le mot de passe (et dans certains cas, il vérifie aussi l'adresse ip du service pour plus de prudence) alors il va communiquer au service tout son contenu, la liste des personnes connectées (au serveur ou au réseau entier), les canaux où elles se trouvent, leurs modes par rapport aux canaux, leurs modes personnels, leur état (away, ircop), etc. C'est à dire que le serveur "balance" toutes ses informations au service, qui sait donc absolument tout! Subséquemment, le socket service envoie au serveur la liste de ses bots.

Les choses ne s'arrêtent pas là, heureusement sinon cela ne servirait pas à grand chose, la moindre activité sur le serveur ou le réseau tout entier est rapportée au service, et le service est évidemment capable d'agir sur le serveur en conséquence. Même le passage de votre état à l'état away est répliqué! A partir de ce moment, si par exemple vous vous êtes authentifié sur Nickserv, le service Dalnet sait faire une relation entre votre nick et votre authentification. Il sait aussi quand est-ce que vous changez de nick, et ne se trompe pas en donnant un acces à un nick enregistré mais pas authentifié.

Enfin, c'est par le même principe de "link" que deux ou plusieurs serveurs peuvent former un réseau, en s'envoyant mutuellement des informations sur leur contenu et leurs activités.

L'excellent mIRC Script Server, dont je suis l'auteur, possède certaines capacités de link. Il y a notamment un service type Dalnet incorporé.

L'addon Magneto version 2 est un service pour ce serveur, dont les bots sont les personnes que vous avez logguées. Il peut y en avoir théoriquement plusieurs centaines, et pourtant, tout passe par une seule connexion. Un examen des fichiers de log vous renseignera sur le protocole utilisé entre le service et le serveur pour communiquer, aussi je ne le met pas ici.

Plus simplement, lorsque vous vous êtes connecté sur MSS, joignez le canal &service (/join &service): tout ce qui passe par le link est écrit dans ce canal. C'est d'ailleurs dans ce but que je l'avais initialement créé.



Réagir à cet article (8 commentaires)

Titre de l'article Date d'édition Auteur Comm
Différence entre un bot client et un bot de service 01/08/02 Averell 8
Le link entre serveurs - comment ça marche 29/09/02 Averell 1
Créer des fonctions de type $fct() 14/10/02 Vlad 2
Les expressions régulières 9/03/03 Averell 1
Avoir le Saint du jour - Snippet 15/11/04 Vestax 1
Un script open-source 2/2/08 Averell 2


Retour à la page des tutoriaux