Projet bot irc [Résolu]

Signaler
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013
-
Messages postés
116
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
26 janvier 2008
-
Bonjour,

j'ai un projet de faire un petit bot irc, tout sommaire au debut pour m'ameliorer avec les sockets en C, le socket se connecte bien mais je pense que les messages send ne sont pas envoyés, quelqu'un pourrait t'il me faire une correction de ma ou mes erreurs s'il vous plait et m'expiquer d'ou cela vient

code: http://shadow1779.ifrance.com/archives%20prog/ircbot.txt

8 réponses

Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
Salut,
N'etant pas expert de winsock je vais te repondre d'une seule chose:

sprintf(buffer,"NICK %s",nick);
printf("%s\n",buffer);
send(sock, buffer, strlen(buffer), 0);
sprintf(buffer,"USER %s",nick);
send(sock, buffer, strlen(buffer), 0);

Sous le procole IRC, la requette USER passe devant la requette NICK, deplus il ya un separateur qui est le saut de ligne classique: \n

Deplus, la majorité des serveurs IRC demmande un PING -> PONG avant de dire: "Toi t'est un vrai user!" , le ping/pong doit de preference etre dans un thread separer pour eviter le revc() bloquant (voir l'erreur classique: la boucle infini utilisant 100% du CPU).

Pour de petites initiations comme celle-ci les char statiquement alloué suffisent, parcontre commance dés aujoudhui a t'initier aux char dynamiquement alloué -> malloc() realloc() free().
Deplus je ne voit pas de memset() nul part, strcpy() est a eviter => strncpy().

Il ya une sympatique source d'un robot IRC sur ce site, une recherche s'impose donc, tu peux aussi aller voir la RFC, elle ne t'expliquera le protocole a suivre pour avoir un bot correct.

Bon courage.
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
salut,

en + ya un buffer overflow (probleme le plus dramatique du C) sur ton tableau char ip[15] (solution; utilise char ip[16];)

au lieu de vouloir avoir pile la bonne taille, tu aurais du prévoir un
peu de mou, ca t'aurait peut etre éviter un pb ... allez recompte : une
ip au max, c'est 4 nombres de 3 chiffres, et 3 points qui les
separent... ca, ca fait effectivement 15 caractere, pas de bol t'as
oublié le caractere 0 qui marque la fin de la chaine, et qui fait
déborder ton tableau.



sinon le premier truc a envoyer:



sprintf(buffer, "NICK %s\nUSER %s . . :%s\n", nick, nick, "bot fullname");

send(sock, buffer, strlen(buffer), 0);



sprintf(buffer, "JOIN %s\n", channel);

send(sock, buffer, strlen(buffer), 0);



t'avais effectivement oublié le \n qui est le caractere de fin de ligne.



et si tu veux voir une source d'un bot simple:

http://www.cppfrance.com/codes/BOT-IRC-TOUT-SIMPLE-FAIT-A-L-AIDE-DE-LA-CLASSE-PROSOCK/20596.aspx





allez a+
Messages postés
116
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
26 janvier 2008

comme la dit cosmobob t'as oublier les \n
et ta requete user n'est pas bonne. Pour mieux comprendre jette un coup d'oeil a la rfc de l'irc

sprintf(buffer,"NICK %s\n",nick);
send(sock, buffer, strlen(buffer), 0);
sprintf(buffer,"USER a a a :%s\n",nick);
send(sock, buffer, strlen(buffer), 0);
sprintf(buffer,"JOIN %s\n",channel);
send(sock, buffer, strlen(buffer), 0);

là ça fonctionne :)
Messages postés
116
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
26 janvier 2008

j'ai oublier de dire : telecharge netcat c'est un utilitaire en console qui aide beaucoup pour créer des client/serveur.
par exemple là pour vérifier le probleme dans une console tu fais "nc -v -l -p 6667" pour mettre sur ecoute ton port 6667 et apres avec ton bot tu te connect sur l'ip 127.0.0.1 port 6667 et tu vois tout de suite que ton bot envoie tout en une seule ligne sans retour a+
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

merci beaucoup a tous pour vos reponses, j'vai y appliquer :)
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

oups par contre j'ai tout changer :s et ca ne marche toujours pas, connection reussie mais pas les send, j'vous ai reuploadé le fichier source :)
Messages postés
116
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
26 janvier 2008

sprintf(buffer,"USER %s . . :%s\n","become_a_bot",nick);

:)
Messages postés
116
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
26 janvier 2008

la rfc en français http://www.iprelax.fr/irc/irc_rfcfr.php

pour l'etablissement de connection http://www.iprelax.fr/irc/irc_rfcfr4.php#41

tout est expliqué a+