• STATISTIQUES
  • Il y a eu un total de 1 membres et 8574 visiteurs sur le site dans les dernières 24h pour un total de 8 575 personnes!


    Membres: 2 609
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Comment ca marche
     Gratuit et accessible à tous, ce site de communauté permet de se dépanner, se faire aider ...
    Webmaster
    [FR] Asp-php
    Tutoriaux sur ASP, PHP, ASP.net, XML, SQL, Javascript, HTML, VML - Scripts et ressources pour webmasters - Forums d&#...
    Programmation
    [EN] Astalavista
    Un site aux ressources incontournable depuis plusieurs années, Astalavista est réellement devenue un cl...
    Hacking
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [EN] social-engineer
    Site dédié au Social Engineering en général.
    Hacking
    [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] bot irc
24-09-2012, 19h41 (Modification du message : 19-11-2012, 19h28 par InstinctHack.)
Message : #1
Creepy_p0ney Hors ligne
chef des poneys voodoo
*



Messages : 146
Sujets : 9
Points: 24
Inscription : Dec 2011
[C] bot irc
voilà comme certains auront pu le remarquer sur l'irc, j'ai créer un bot, mais il a un certain bug c'est qu'il affiche plusieurs fois la même chose (le dernier message qu'il a envoyé). Mais je pense savoir pourquoi, mais je sais pas comment y remedier voici mon code :
Code :
#include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <sys/socket.h>
    #include <sys/wait.h>

int main(){
    int sockfd;
    struct sockaddr_in addr;

    char pseudo[100]="NICK botfireWave\r\n";
    char channel[100]="JOIN #bot\r\n";
    char user[100]="USER botfireWave botfireWave botfireWave :bot c\r\n";
    char buf[256];
    char question[256]="https://www.google.fr/search?q=";
    char question2[256];
    char papa[100]="c'est qui papa";
    char *suiteChaine;
    int i=0;
    printf("%s\n%s\n",pseudo,channel);

    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){
        perror("socket");
        exit(1);
    }
    addr.sin_family=AF_INET;
    addr.sin_port=htons(6667);
    addr.sin_addr.s_addr = inet_addr("88.191.137.197");
    
    if(connect(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr))<0){
        perror("connect");
        exit(1);
    }
    printf("connect");
    send(sockfd,pseudo,strlen(pseudo),0);
    recv(sockfd,buf,256,0);
        printf("%s",buf);
    printf("envoi nick");
    send(sockfd,user,strlen(user),0);
    recv(sockfd,buf,256,0);
        printf("%s",buf);
    printf("envoi usr");
    send(sockfd,channel,strlen(channel),0);
recv(sockfd,buf,256,0);
        printf("%s",buf);
    printf("envoi chan");
    send(sockfd,"PRIVMSG #bot :je suis de retour pour vous jouer un mauvais tour\r\n",strlen("PRIVMSG #bot :je suis de retour pour vous jouer un mauvais tour\r\n"),0);
    while(1){
        
        recv(sockfd,buf,256,0);
        if(strstr(buf,"PING")!=NULL){
            send(sockfd,"PONG\r\n",strlen("PONG\r\n"),0);
        }
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,"comment vas tu ")!=NULL)){
            send(sockfd,"PRIVMSG #bot :je me porte bien merci\r\n",strlen("PRIVMSG #bot :je me porte bien merci\r\n"),0);
        }
    
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,papa)!=NULL)){
            send(sockfd,"PRIVMSG #bot :c'est fireWave yeahhh \r\n",strlen("PRIVMSG #bot :c'est fireWave yeahhh \r\n"),0);
        }
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,"bonjour tous")!=NULL)){
            send(sockfd,"PRIVMSG #bot :ces sites son interdits monsieur !!!!\r\n",strlen("PRIVMSG #bot :ces sites son interdits monsieur !!!!\r\n"),0);
        }
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,"parle moi de ton createur")!=NULL)){
        send(sockfd,"PRIVMSG #bot : bientôt 15ans seconde générale\r\n",strlen("PRIVMSG #bot :bientôt 15ans seconde générale \r\n"),0);
        }
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,"horgh_")!=NULL)){
            send(sockfd,"PRIVMSG #bot :attention aux liens de horgh_ âme sensible s'abstenir\r\n",strlen("PRIVMSG #bot :attention aux liens de horgh_ âme sensible s'abstenir\r\n"),0);
        }
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,"hommeparfait")!=NULL)){
            send(sockfd,"PRIVMSG #bot :pfff op il veut me kick c'est pas bien !!!!\r\n",strlen("PRIVMSG #bot :pfff op il veut me kick c'est pas bien !!!!\r\n"),0);
        }
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,"tu suces ?")!=NULL)){
            send(sockfd,"PRIVMSG #bot :non et toi ?\r\n",strlen("PRIVMSG #bot :non et toi ?\r\n"),0);
        }
        if((strstr(buf,"PRIVMSG")!=NULL)&&(strstr(buf,"Supersnail")!=NULL)){
            send(sockfd,"PRIVMSG #bot :il est op, mais je ne vais pas troll j'le suce bien\r\n",strlen("PRIVMSG #bot :il est op, mais je ne vais pas troll j'le suce bien\r\n"),0);
        }
        printf("%s",buf);
        
    }
    close(sockfd);
mon probleme je pense est sur cette ligne ci (il a encore le precedent message je pense)
Code :
recv(sockfd,buf,256,0);
merci d'avance
Penser que coder est coder explique-t-il la recursion ?
http://p0neyland.wordpress.com/
+1 (0) -1 (0) Répondre
24-09-2012, 22h09
Message : #2
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [c bot] probleme bot en c
Hum, j'aurais tendance a essayer d’écrire un \0 au tout début du buffer après l'avoir print, mais pas sur que ça marche.
+1 (0) -1 (0) Répondre
24-09-2012, 22h54
Message : #3
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: [c bot] probleme bot en c
Hello,

Le problème est probablement que recv(2) travaille sur des données arbitraires et ne rajoute donc pas le terminateur nul à la fin d'une ligne. Quand un message plus court que le précédent est reçu, il est réécrit par dessus, et strstr ne voit pas la limite entre les deux.
Code :
read_bytes = recv(sockfd, buf, 255, 0);
//check for error
buf[read_bytes] = '\0';

Note le 255 pour éviter une erreur off-by-one.

Ce code n'est pas fiable parce qu'il n'y a aucune garantie qu'une ligne entière soit disponible après un appel à recv(2), meme si ça sera le cas quasiment tout le temps. Pour faire proprement tu devrais avoir une première boucle qui accumule les résultats des appels à recv dans un buffer intermédiaire, cherche les terminateurs \n et déclenche une action le cas échéant, et copie le reste du buffer éventuel au début.

Ton implémentation de PING/PONG est incomplète, le PONG est sensé retourner l'argument envoyé avec PING. Le serveur serait en droit de te déconnecter pour ça.

Dernièrement, pour tes chaines de caractère constantes,
Code :
char blah[100] = "foobarbaz";
A l'intérieur d'une fonction, cause l'allocation du buffer sur la stack et une initialisation des données en dur dans le code de la fonction, alors que
Code :
char blah[] = "foobarbaz";
a au moins l'avantage d'utiliser un buffer exactement de la bonne taille, et que
Code :
char *blah = "foobarbaz";
place la chaine dans la section de données, et ne génère pas de code d'initialiastion.
+1 (0) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut