Mi Irc Bot ( En progreso)

Iniciado por 0x46-F, 17 Diciembre 2018, 23:04 PM

0 Miembros y 1 Visitante están viendo este tema.

0x46-F

Falta mandar un PONG  para que la conexion no se quede en time out y muchas cosas que cambiar, por ejemplo añadir un procedimiento para floodear tanto el protocolo UDP como TCP y convertirlo en una botnet cifrando tando el usuario, host y el canal....El código no es limpio y tiene cosas innecesarias pero bueno.

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <windows.h>

#define PORT "6665"

struct info{
char *host;
char *channel;
char *user;
}Ainfo;

int connect_irc(char *host){
   struct addrinfo *result,*copy;
   struct addrinfo hints;
   int sock,getadd;


       memset(&hints, 0, sizeof(hints));
       hints.ai_family = AF_UNSPEC;
       hints.ai_socktype = SOCK_STREAM;
       hints.ai_flags = 0;


       getadd=getaddrinfo(host,PORT,(struct addrinfo *)&hints,&result);
       if(getadd!=0){
       perror("\n");
       exit(0);
       }
       
       
       sock = socket(result->ai_family,result->ai_socktype,result->ai_protocol);
       if (connect(sock, result->ai_addr, result->ai_addrlen) != 0)
       {
       perror("\n");
       exit(0);
       }
       return sock;
}

char *read_info(int sockd,char *pointer){

size_t length = 0;
char info = 0;

while(pointer[length-1]!='\n')
{
   
   int data = recv(sockd, &info, 1, 0);
   pointer[length]=info;
   length++;
   
   
}
return pointer;


}

void set_nick(int sock, char nick[]) {// </editor-fold>

   char nick_packet[512];
   sprintf(nick_packet, "NICK %s\r\n", nick);
   send(sock, nick_packet, strlen(nick_packet), 0);
}

void send_user_packet(int sock, char nick[]){
   char user_packet[512];
   sprintf(user_packet, "USER %s 0 * :%s\r\n", nick, nick);
   send(sock, user_packet, strlen(user_packet), 0);
}

void join_channel(int sock, char channel[]){
   char join_packet[512];
   sprintf(join_packet, "JOIN %s\r\n", channel);
   send(sock, join_packet, strlen(join_packet), 0);
}
void send_pong(int sock, char argument[]){
   char pong_packet[512];
   sprintf(pong_packet, "PONG :%s\r\n", argument);
   send(sock, pong_packet, strlen(pong_packet), 0);
}



int main(int argc, char *argv[])
{
   printf("Atbot IRC bot");
    Ainfo.user=argv[1];
    Ainfo.host=argv[2];
    Ainfo.channel=argv[3];
       int sock_result = connect_irc(Ainfo.host);
       set_nick(sock_result,Ainfo.user);
       send_user_packet(sock_result,Ainfo.user);
       join_channel(sock_result,Ainfo.channel);
       while(1){
           char data[1024];
           char *array = read_info(sock_result,data);
           printf("%s",array);
           
       }
               
   return 0;
}