• STATISTIQUES
  • Il y a eu un total de 2 membres et 14342 visiteurs sur le site dans les dernières 24h pour un total de 14 344 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] Exploit-db
    Une base de données d'exploits triés par genre (GHDB, Remote, Local, Web, DOS, ShellCode) à ...
    Vulnérabilités
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [FR] Zmaster
    Articles sur l'informatique, le hacking, le P2P, les divx, les astuces windows XP, les GSM, Emule, la cryptograph...
    Hacking

  • 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 : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut