Projet bot irc

Résolu
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 5 nov. 2005 à 23:02
skotmarud Messages postés 116 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 26 janvier 2008 - 6 nov. 2005 à 10:54
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

juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
6 nov. 2005 à 00:46
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.
3
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
6 nov. 2005 à 01:35
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+
3
skotmarud Messages postés 116 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 26 janvier 2008
6 nov. 2005 à 08:14
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 :)
3
skotmarud Messages postés 116 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 26 janvier 2008
6 nov. 2005 à 08:23
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+
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
6 nov. 2005 à 10:05
merci beaucoup a tous pour vos reponses, j'vai y appliquer :)
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
6 nov. 2005 à 10:12
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 :)
0
skotmarud Messages postés 116 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 26 janvier 2008
6 nov. 2005 à 10:48
sprintf(buffer,"USER %s . . :%s\n","become_a_bot",nick);

:)
0
skotmarud Messages postés 116 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 26 janvier 2008
6 nov. 2005 à 10:54
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+
0
Rejoignez-nous